2015-01-14 5 views
0

나는 firedac 쿼리 편집기에서 하나 개의 결과 (커서)에 대해 여러 SLQ 문의 결과를 사용하려고 해요 :시작과 끝 블록 사용할 때 결과로 커서를 얻기

는 SQL 명령 편집기에서

DECLARE 
MyVar1 varchar2(100); 
MyVar2 varchar2(100); 

BEGIN 
    SELECT USERINCDE INTO MyVar1 FROM P_USR WHERE USEREXCDE='PH1'; 
    SELECT USERINCDE INTO MyVar2 FROM P_USR WHERE USEREXCDE='PH2'; 
END; 

SELECT MyVar1,MyVar2 AS TEST FROM DUAL 

위의 코드는 선택과 시작 및 끝 블록을 결합 할 수 없으므로 작동하지 않습니다. 작업 코드에 대해 모든 사람에게 설득력이 있습니까?

답변

0

일반적으로 그것의이 올바른 경우

, 당신은 CROSS JOIN을 사용할 수 원하는 결과 (1 열, 2 열)을 달성하기 위해 이상한 소원.

BEGIN 
    SELECT USERINCDE INTO :MyVar1 FROM P_USR WHERE USEREXCDE='PH1'; 
    SELECT USERINCDE INTO :MyVar2 FROM P_USR WHERE USEREXCDE='PH2'; 
END; 

을하지만 당신은 매우 - 매우 커서를 사용해야하는 경우는 다음과 같이 수행 할 수 있습니다 : 당신은 익명 블록에서 일부 값을 반환하려면, 다음과 같이해야합니다

DECLARE 
MyVar1 varchar2(100); 
MyVar2 varchar2(100); 
BEGIN 
    SELECT USERINCDE INTO MyVar1 FROM P_USR WHERE USEREXCDE='PH1'; 
    SELECT USERINCDE INTO MyVar2 FROM P_USR WHERE USEREXCDE='PH2'; 
    OPEN :result FOR SELECT MyVar1, MyVar2 AS TEST FROM DUAL; 
END; 

을 마지막으로 결과는 ref cursor입니다.

3

코드를 가정 할 때 각 쿼리는 하나의 값을 반환한다고 가정합니다.

SELECT V1.USERINCDE MyVar1, V2.USERINCDE MyVar2 FROM 
    (SELECT USERINCDE FROM P_USR WHERE USEREXCDE='PH1') V1 
    CROSS JOIN 
    (SELECT USERINCDE FROM P_USR WHERE USEREXCDE='PH2') V2; 

또는 단순히 두 개의 하위 쿼리 :

SELECT (SELECT USERINCDE FROM P_USR WHERE USEREXCDE='PH1') MyVar1, 
     (SELECT USERINCDE FROM P_USR WHERE USEREXCDE='PH2') MyVar2 FROM DUAL