2

動的SQLと引用符を使用してつまずきます。sql_stmt を dbms_output すると、有効な/機能するコードが出力されます。sql_stmt := 行を動的に実行できるようにするには、どのように記述すればよいですか? 「:1 using」バインド変数構文も試しましたが、うまくいきませんでした。

このコードのポイントは、テーブルのサブセットの統計を収集することです。

set serveroutput on
--create this test table for working example.
--create table test3 as select table_name from user_tables where rownum <= 5;

declare
    sql_stmt varchar2(500);
    begin
        for rec in (select table_name from test3)
        loop 
            sql_stmt := 'exec dbms_stats.gather_table_stats (''SCOTT'',''' || rec.table_name || ''')';
            dbms_output.put_line(sql_stmt);
            execute immediate sql_stmt;  -- <---Error is here---
        end loop;
    end;

execute immediate sql_stmt; から得られるエラー。行: ORA-00900: 無効な SQL ステートメント ORA-06512: 行 8

4

2 に答える 2

2

使用する

sql_stmt := 'BEGIN dbms_stats.gather_table_stats (''SCOTT'','''
    || rec.table_name || '''); END;';

代わりは。

于 2013-06-05T18:10:10.947 に答える