立即执行'一些命令'
Posted
技术标签:
【中文标题】立即执行\'一些命令\'【英文标题】:EXECUTE IMMEDIATE ' some commands '立即执行'一些命令' 【发布时间】:2012-04-05 15:41:24 【问题描述】:是否可以在一个 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;
【问题讨论】:
为什么需要在一个语句中完成? 在单个语句中执行将需要更少的重构) 这是“立即执行”命令的错误用法。理解,第一个语句是 PL/SQL,第二个是 DDL,对我帮助很大。再次感谢香农! 【参考方案1】:要立即执行的字符串中的begin
end
将被视为PL/SQL 匿名块。 PL/SQL 中不允许使用 DDL,例如 COMMENT
。如果是这样,您将不需要立即执行。 Oracle 本质上一次处理一个 PL/SQL 语句块或一个 SQL 语句。虽然也有批处理 SQL 语句的 API。
因此,要在 PL/SQL 块或过程中运行 COMMENT
,您将需要 execute immediate
语句。
如果没有更多上下文,我无法明智地评论这是否是正确的方法,或者单独使用两个评论语句会更好。
【讨论】:
谢谢!如果我理解正确,没有这样的查询来评论一个执行立即块中的某些表?【参考方案2】:好吧,你可以这样做:
begin
execute immediate
'begin
execute immediate ''COMMENT ON TABLE t1 IS ''''description1'''' '';
execute immediate ''COMMENT ON TABLE t2 IS ''''description2'''' '';
end;';
end;
但这没什么意义。
【讨论】:
以上是关于立即执行'一些命令'的主要内容,如果未能解决你的问题,请参考以下文章