2011-12-22 242 views
10

可能重複:
Best way/tool to get the results from an oracle package procedure
Oracle SQL Developer: Show REFCURSOR Results in Grid?如何在Oracle SQL Developer中查看refcursor結果/輸出?

我是新來的Oracle SQL Developer。我正在使用Oracle SQL Developer版本3.0。 我正在嘗試使用以下查詢來測試我的SP。

DECLARE 
    type output_cursor is ref cursor; 
    P_CURSOR output_cursor; 
BEGIN 
    P_CURSOR := NULL; 
    myPackage.mySPTest ( P_NOTIFICATION_ID => 1975357,P_CURSOR => P_CURSOR) ; 
END; 

當我跑在我的Oracle SQL Developer上面的查詢,我得到一個消息「anonymus塊完成」,其沒有表現出任何結果。

任何人都可以幫助我,如何看到結果。

+0

你期待什麼輸出?你的「結果」在哪裏去?您可能想要編寫一個SELECT語句... – Randy 2011-12-22 22:46:59

+0

期望結果集的行和列。 SP結果進入.NET程序。 我如何在光標上寫入一個選擇...一些示例會很好.. – 2011-12-22 22:52:17

+0

使用Toad代替它會顯示refcursor的內容。 – 2011-12-23 16:10:53

回答

-2

要查看遊標結果,您需要遍歷遊標和打印值。你需要知道你的光標返回的列名。你可以這樣做:

DECLARE 
    type output_cursor is ref cursor; 
    P_CURSOR output_cursor; 
BEGIN 
    P_CURSOR := NULL; 
    DOCTORS_APP.get_reminders ( P_NOTIFICATION_ID => 1975357,P_CURSOR => P_CURSOR) ; 
    //replace Column1 and Column2 with actual column names 
    FOR CUR_VAL in P_CURSOR LOOP 
     DBMS_OUTPUT.PUT_LINE(CUR_VAL.Column1||' '||CUR_VAL.Column2); 
    END LOOP; 
END; 
+1

我試過樣品,它給出了錯誤。 – 2011-12-22 23:22:06

+0

什麼錯誤?你是否用實際列名填充了Column1和Column2? – 2011-12-22 23:24:06

+1

錯誤 錯誤開始位於第1行中的命令: 錯誤報告: ORA-06550:行11,列10: PLS-00221: 'P_CURSOR' 不是過程或未定義 ORA-06550:線11 ,列1: PL/SQL:語句被忽略 06550. 00000 - 「行%s,列%s:\ n%s」 *原因:通常是PL/SQL編譯錯誤。 *操作: – 2011-12-22 23:25:14

21

您可以使用SQL Developer的聲明綁定變量來保存和顯示結果:

var r refcursor; 
exec myPackage.mySPTest(P_NOTIFICATION_ID => 1975357, P_CURSOR => :r); 
print r; 

exec是一個匿名塊速記所以這相當於:

var r refcursor; 
begin 
    myPackage.mySPTest(P_NOTIFICATION_ID => 1975357, P_CURSOR => :r); 
end; 
/
print r; 

除非P_CURSOR被聲明爲無益的東西,也許......

+0

啊,我沒有注意到@sathya在他對這個問題的評論中提出了兩個鏈接;第二個(和第一個鏈接)指向託尼·安德魯斯做同樣的事情。我是從[舊答案](http://stackoverflow.com/questions/3526798/best-way-tool-to-get-the-results-from-an-oracle-package-procedure/3527037#3527037)我自己的。 – 2011-12-23 16:07:25

相關問題