立即执行'一些命令'

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;

但这没什么意义。

【讨论】:

以上是关于立即执行'一些命令'的主要内容,如果未能解决你的问题,请参考以下文章

如何使/etc/profile文件修改后立即生效

执行一些需要 5 秒的事情(如电子邮件发送)但立即返回并回复?

js 立即执行函数

通过命令行执行用 ZendGuard 编码的 PHP 脚本

Javascript 自动执行函数(立即调用函数)

ES6中的一些新特性