11

可能重复:
从 oracle 程序包过程中获取结果的最佳方式/工具
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 中运行上述查询时,我收到一条消息“匿名块已完成”并且它没有显示任何结果。

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

.

4

2 回答 2

24

您可以使用在 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被宣布为无益的东西,也许......

于 2011-12-23T16:03:18.963 回答
-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;
于 2011-12-22T22:54:37.027 回答