2011-12-22 126 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

相关问题