2014-11-13 2 views
0

가독성/유지 관리 향상을 위해 '변수'로 지정된 상수가있는 ODBC를 통해 보내지는 여러 SQL 문의 단일 문자열을 쓰고 싶습니다. 나는 DECLARE 블록을 사용할 필요가 있다고 생각한다. 프로 시저 또는 함수를 작성하고 싶지는 않습니다. 이는 임시 쿼리입니다.BEGIN 및 END 내의 Oracle 일반 테이블 표현식 (WITH)

WITH X AS (SELECT 'HELLO' from DUAL) SELECT * FROM X; 

하지만 실행할 때이

declare 
badgerId CHAR(32); /*todo, use me later, a few times within multiple CTEs*/ 
begin 
WITH X AS (SELECT 'HELLO' from DUAL) SELECT * FROM X; 
end; 

나는 오류 얻을 :

CTE는 고립에서 잘 작동 다음 시험 (시작/종료 블록없이)

Error starting at line 2 in command: 
declare 
badgerId CHAR(32); /*todo, use me later*/ 
begin 
WITH X AS (SELECT 'HELLO' from DUAL) SELECT * FROM X; 
end; 
Error report: 
ORA-06550: line 4, column 1: 
PLS-00428: an INTO clause is expected in this SELECT statement 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

이 횡설수설이란 무엇입니까? SQL Server에서 입력 할 수 있습니다.

DECLARE @badgerId CHAR(32); 

언제든지 SQL 문에서 사용할 수 있습니다. 오라클은 무엇입니까?

건배!

+0

당신은 분명하지 않습니다! 다음 번에 묻는 사람을 후원하는 대신 질문에 대답 해보십시오. – GilesDMiddleton

+1

[도움이 될 수 있습니다] (http://stackoverflow.com/a/3400602/266304). 실제로 단일 값을 반환하거나 여러 행을 사용하는 경우에 따라 다르며이 경우 참조 커서가 필요할 수 있습니다. –

답변

1

데이터를 선택했지만 선언 된 변수 (badgerId)에 할당하지 않았기 때문에이 오류가 발생합니다. 아래가 작동해야합니다,

declare 
badgerId CHAR(32); /*todo, use me later, a few times within multiple CTEs*/ 
begin 
WITH X AS (SELECT 'HELLO' from DUAL) SELECT * into badgerId FROM X; 
end;