0

ストアドプロシージャを呼び出すクライアントは、レコードセット出力のみを処理できます。

ただし、ストアドプロシージャは、いくつかの内部クエリの結果として単純な0または1の値を返すことになっています。

ストアドプロシージャの変数値を一種のレコードセットとして返すことができる回避策はありますか?

4

3 に答える 3

1

カーソル変数を返します。プロシージャから返す値の SELECT .. FROM DUAL を使用してカーソル変数を開きます。

このプロシージャは、これらの値を含む単一の行を返すカーソルを返します。

于 2013-01-11T18:29:17.723 に答える
1

あなたの手続きから

OPEN resultsCursor_ FOR
Select 1 As aValue FROM DUAL;

また

CREATE OR REPLACE PROCEDURE GetAValue
(
  results_       OUT     SYS_REFCURSOR
)
IS
    MY_COUNT_  INT;
BEGIN 

    MY_COUNT_ := 10;

    OPEN results_ FOR
    SELECT MY_COUNT_ AS MyCount FROM DUAL;

END GetAValue;
于 2013-01-11T18:30:10.333 に答える
0

プロシージャは値を返すことができません。これを行うには関数が必要です。

呼び出し元にカーソルを「返す」プロシージャが本当に必要な場合は、次のようなものを使用できます。

 --Declare this type in a package X
 --The caller must have access to the package X.
 TYPE ref_cursor IS REF CURSOR;
 CREATE OR REPLACE
 PROCEDURE test (
                   p_param1           IN  VARCHAR2,
                   p_cur              OUT X.REF_CURSOR,
                   p_error_code       OUT NUMBER,
                   p_error_message    OUT VARCHAR2
                 )
 AS
 BEGIN
      OPEN p_cur FOR
        SELECT * FROM TABLE;
 EXCEPTION
 WHEN OTHERS THEN

     p_error_code := SQLCODE;
     p_error_message := SQLERRM;

 END;

エラーが設定されていない場合、呼び出し元はこのカーソルを実行し、それに対して行をフェッチできます。

于 2013-01-11T18:56:51.947 に答える