【问题标题】:Why does running this query with EXECUTE IMMEDIATE cause it to fail?为什么使用 EXECUTE IMMEDIATE 运行此查询会导致它失败?
【发布时间】:2010-10-27 11:37:38
【问题描述】:

我正在编写一个需要动态生成一些查询的 PL/SQL 过程,其中一个涉及使用作为参数的查询的结果创建一个临时表。

CREATE OR REPLACE PROCEDURE sqlout(query IN VARCHAR2)
IS
BEGIN
EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ');';
END;

它可以正确编译,但即使是非常简单的查询,例如:

BEGIN
    sqlout('SELECT * FROM DUAL');
END;

IT 抛出 ORA-00911: invalid character。如果我手动运行创建的查询,它会正确运行。在这一点上,我能够确定是什么导致了问题。

【问题讨论】:

  • 我希望您的应用程序不会在正常的事件过程中运行 proc...动态 DDL 仅适用于管理脚本(例如设置新环境)。

标签: sql oracle plsql dynamic-sql ora-00911


【解决方案1】:

尽量去掉“;”从您立即执行的字符串内部。

EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 2023-03-16
    相关资源
    最近更新 更多