3

是否可以在一个 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;

对于一个 SQL 命令,它工作正常:

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

2 回答 2

6

立即执行的begin end字符串内将被视为 PL/SQL 匿名块。DDL,例如COMMENT在 PL/SQL 中是不允许的。如果是,您将不需要立即执行。Oracle 本质上一次处理一个 PL/SQL 语句块或一个 SQL 语句。尽管也有用于批处理 SQL 语句的 API。

因此,要COMMENT在 PL/SQL 块或过程中运行,您将需要execute immediate语句。

如果没有更多的上下文,我无法明智地评论这是否是正确的方法,或者如果单独使用两个评论语句会更好。

于 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 回答