3

1 つの EXECUTE IMMEDIATE ブロック内でいくつかの SQL コマンドを実行することは可能ですか?

この構文の問題点:

declare
    pragma autonomous_transaction;
begin           
    execute immediate
    'begin
        COMMENT ON TABLE t1 IS ''description1'';
        COMMENT ON TABLE t2 IS ''description2'';            
    end;';
end;

1 つの SQL コマンドで問題なく動作します。

declare
    pragma autonomous_transaction;
begin           
    execute immediate ' COMMENT ON TABLE t1 IS ''description1'' ';
end;
4

2 に答える 2

6

文字列内のbegin end即時実行は、PL/SQL無名ブロックとして扱われます。COMMENTPL/SQLでは許可されていないDDLなど。もしそうなら、すぐに実行する必要はありません。Oracle は基本的に、一度に PL/SQL ステートメントのブロックまたは単一の SQL ステートメントのいずれかで動作します。ただし、SQL ステートメントをバッチ処理する API もあります。

したがって、PL/SQL ブロックまたはプロシージャ内で実行するには、ステートメントCOMMENTが必要になります。execute immediate

これ以上のコンテキストがなければ、それが正しいアプローチなのか、それとも 2 つのコメント ステートメントを独立させた方がよいのかについて、知的にコメントすることはできません。

于 2012-04-05T16:00:32.543 に答える
2

さて、あなたはこれを行うことができます:

begin           
    execute immediate
    'begin
        execute immediate ''COMMENT ON TABLE t1 IS ''''description1'''' '';
        execute immediate ''COMMENT ON TABLE t2 IS ''''description2'''' '';
    end;';
end;

しかし、あまり意味がありません。

于 2012-04-11T05:28:20.910 に答える