11

重複の可能性:
オラクル パッケージ プロシージャから結果を取得するための最良の方法/ツール
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 に答える