是否可以在一个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;
答案 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;
但没有多大意义。