11

我正在编写一个需要动态生成一些查询的 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。如果我手动运行创建的查询,它会正确运行。在这一点上,我能够确定是什么导致了问题。

4

1 回答 1

33

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

EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';
于 2009-05-19T22:20:15.420 回答