2011-11-28 61 views
1

在這裏,我已經在Oracle中的存儲過程:什麼傳遞的SYS_REFCURSOR參數

CREATE OR REPLACE PROCEDURE StP_COMPS 
IS 
CV_1 SYS_REFCURSOR; 
BEGIN 
OPEN CV_1 FOR SELECT * FROM COMPUTERS; 
END; 

當我執行像EXEC SP_COMPS的過程我沒有得到任何錯誤,SQL Developer中只顯示「ananymous塊已完成」。然後我將程序更改爲

CREATE OR REPLACE PROCEDURE SP_COMPS 
     (cv_1 OUT SYS_REFCURSOR) 
IS 
BEGIN 
OPEN CV_1 FOR SELECT * FROM COMPUTERS; 
END; 

當我執行時出現錯誤,指出參數類型的數量是錯誤的。我很好奇,如果它只是一個輸出參數,我可以作爲參數發送給過程。我想要在程序中獲得運行查詢的結果集。我在這裏做錯了什麼?

P.S.當我嘗試通過右鍵單擊程序並選擇Run來運行程序,我得到:

DECLARE 
    CV_2 sys_refcursor; 
BEGIN 

SP_COMPS(
    CV_2 => CV_2 
    ); 

:CV_2 := CV_2; -- <--Can't understand this part 
END; 

回答

1

你有一個變量,你應該執行程序,如:

DECLARE 
    CV_1 SYS_REFCURSOR; 
BEGIN 
    SP_COMPS(CV_1); 
    --use cv_1 
END; 

UPDATE(後OP更新):這是一個簡單的測試模板。如此處所述:Easiest method to test an Oracle Stored Procedure,只需運行該代碼,並選擇ref_cursor作爲cv2變量的類型。