为什么使用EXECUTE IMMEDIATE运行此查询会导致它失败?

时间:2009-05-19 22:17:46

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

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

1 个答案:

答案 0 :(得分:29)

试着失去“;”从你执行立即的字符串内部。

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