2015-01-14 39 views
0

我試圖使用多個SLQ語句的結果在firedac查詢編輯器一個結果(光標):用BEGIN和END塊時,遇到了一個遊標爲結果

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 

上面的代碼無法工作,因爲select和begin和end塊不能組合。 有沒有人申請工作代碼?

回答

0

一般是一個奇怪的願望。如果您想返回從匿名塊的一些值,你應該做這樣的事情:

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

給定您的代碼,我假設每個查詢返回一個且只有一個值

如果這是正確的,實現您可能使用CROSS JOIN期望的結果(1列,2列):

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 
相關問題