代码之家  ›  专栏  ›  技术社区  ›  GameFreak

为什么用execute immediate运行此查询会导致失败?

  •  7
  • GameFreak  · 技术社区  · 16 年前

    我正在编写一个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;
    

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

    1 回复  |  直到 10 年前
        1
  •  27
  •   Jonathan Leffler    16 年前

    尝试从立即执行的字符串中丢失“;”。

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