执行IMMEDIATE'一些命令'

时间:2012-04-05 15:41:24

标签: sql oracle plsql execute-immediate

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

2 个答案:

答案 0 :(得分:6)

要立即执行的字符串中的begin end将被视为PL / SQL匿名块。 PL / SQL中不允许使用DDL,例如COMMENT。如果是这样你就不需要使用execute immediate。 Oracle基本上可以同时使用PL / SQL语句块或单个SQL语句。虽然也有批处理SQL语句的API。

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

如果没有更多的背景,我无法聪明地评论这是否是正确的方法,或者只是将两个评论声明放在一起会更好。

答案 1 :(得分:2)

嗯,你可以这样做:

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

但没有多大意义。