4

私は db の経験がありませんが、ストアド プロシージャの結果から列名を取得しようとしています。
ストアド プロシージャが不明なため、コードは汎用でなければなりません。最初のステップは、入力パラメーターのないプロシージャー (io_cursor のみ) で機能するようにすることです。

今までの私のコード:

procedure fakeProc (
       io_cursor        in out t_ref_cursor
      )

そして、私が使用しているコード:

PROCEDURE get_SQL_Fields (
       out_result    out varchar2)
as

/**/

v_cur         NUMBER        := NULL;
v_count       NUMBER        := NULL;

v_tab_desc    DBMS_SQL.DESC_TAB;
sqlstr        VARCHAR2(100);
BEGIN

v_cur := DBMS_SQL.OPEN_CURSOR;
    --Here i get errors
    sqlstr :='begin '|| fakeproc()||';end;';

    DBMS_SQL.PARSE(v_cur, sqlstr, DBMS_SQL.NATIVE);
    DBMS_SQL.DESCRIBE_COLUMNS(v_cur, v_count, v_tab_desc);

    FOR i IN 1..v_count LOOP
      out_result := out_result||v_tab_desc(i).COL_NAME||',';
    END LOOP;

  end if;
END get_SQL_Fields;

したがって、今のところ私の問題は、この sqlstr を構築することです。
私が得るエラーは次のとおりです:エラー: PLS-00306: 'FAKEPROC' への呼び出しで引数の数またはタイプが間違っています。行: 654 テキスト: sqlstr :='begin '|| fakeproc()||';end;';

エラー: PL/SQL: ステートメントは無視されました 行: 654 テキスト: sqlstr :='begin '|| fakeproc()||';end;';

4

2 に答える 2