如何在Oracle SQL Developer中查看refcursor结果/输出?

时间:2011-12-22 22:38:33

标签: oracle plsql oracle10g oracle-sqldeveloper ref-cursor

  

可能重复:
  Best way/tool to get the results from an oracle package procedure
  Oracle SQL Developer: Show REFCURSOR Results in Grid?

我是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 block completed'并且没有显示任何结果。

任何人都可以帮助我,如何查看结果。

2 个答案:

答案 0 :(得分:22)

您可以使用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被宣布为无用的东西,否则......

答案 1 :(得分:-3)

要查看光标结果,您需要循环浏览光标并打印值。您需要知道光标返回的列名称。你可以这样做:

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;