0

コードのエラーを下回っているのを助けてください。

ORA-06550: 行 20、列 33:

PLS-00306: '||'へのコールの引数の数またはタイプが正しくありません

ORA-06550: 行 20、列 12:

PL/SQL: ステートメントは無視されました

...条件 1: パラメータ化カーソルに明示的に値を入力すると、2 番目の FOR ループまで到達しません。印刷後、'Inside' ステートメントが実行されます。条件2.変数をパラメーターとして配置すると、上記のエラーが発生します。

    DECLARE 
/* First cursor */
    CURSOR get_tables IS
     SELECT DISTINCT * FROM src_table_list tbl ;
/* Second cursor  */
    CURSOR get_columns(v_table_name varchar2) IS 
     SELECT SUBSTR (SYS_CONNECT_BY_PATH (column_name, ','), 2) csv 
      FROM (SELECT column_name , ROW_NUMBER () OVER (ORDER BY column_name ) rn,
               COUNT (*) OVER () cnt
          FROM USER_TAB_COLUMNS where table_name = v_table_name)
     WHERE rn = cnt
    -- and col.sn = v_sn
  START WITH rn = 1
  CONNECT BY rn = PRIOR rn + 1;

BEGIN 
 FOR i IN get_tables LOOP
dbms_output.put_line( 'Inside ' );
    FOR j IN get_columns(i.table_name) LOOP
       dbms_output.put_line('SELECT '|| j ||'FROM'||i.table_name||' ;' );
       dbms_output.put_line( ' ' );
    END LOOP;
 END LOOP;
END; 
/
4

1 に答える 1

2

出力で連結しようとしjていますが、j はカーソル内の行への参照です。これは暗黙的に文字列にキャストできない型であるため、concat は失敗します。

あなたはおそらく書くつもりだった

dbms_output.put_line('SELECT '|| j.csv || ' FROM ' || i.table_name || ';');

PS。その接続で何をしますか?コンマ区切りの値を取得することですか? たぶん、LISTAGG、またはそれの私のカスタムバリアントを使用できます。

于 2012-12-01T15:17:06.343 に答える