0

http://docs.oracle.com/cd/B14117_01/appdev.101/b10779/oci05bnd.htm#422771

セクション OCI での PL/SQL REF CURSOR とネストした表

SQLT_RSET が dty パラメーターに渡されると言います。

テーブルを返す関数の戻り値に SQLT_RSET を使用し、OCI パラメータのデータ ポインタにステートメント ハンドルのアドレスを渡すと、さらに実行できる関数を実行した結果、ステートメント ハンドルがインスタンス化されると予想していました。フェッチ、カーソルに似ています。しかし、例外 PLS-00382: expression is of wrong type ORA-06550: 行 2、列 3 がスローされます。上記のドキュメントは間違っていますか?

OCI ヘッダー ファイルから、VARRAY とネストされたテーブルの場合、SQLT_NCO を使用するように言及されていることがわかります。SQLT_NCO を使用しているときにネストされた値を戻り値として受け渡しする方法に関する OCI ドキュメントの例は見つかりませんでした。

私が自分自身を撃つ前に助けてください。

4

1 に答える 1

0

例を詳しく調べると、ネストされたテーブルがcursor()関数と組み合わせて使用​​されていることがわかります。例えば

static const text *nst_tab = (text *)
       "SELECT last_name, CURSOR(SELECT department_name, location_id \
        FROM  departments)  FROM employees WHERE last_name = 'FORD'";

あなたの質問の重要な部分はどこですか

CURSOR(SELECT department_name, location_id FROM  departments)

departmentsネストした表です。
したがって、ネストされたテーブルをカーソルとして使用する必要がある場合は、selectそこからカーソル タイプに変換する必要があります。

PL/SQL コレクション変数の場合、レコードの型がデータベース スキーマ レベルで定義されている場合は、それをテーブルにキャストし、後でそこから選択してカーソルを取得できます。

declare
  vMyTable TMyTableType;
  vCursor  sys_refcursor;
begin
  -- populate table with values ...

  open vCursor for (
    select * from table(vMyTable);
  );

  :OutCursorParameter := vCursor;
end;
于 2013-09-16T10:04:50.443 に答える