我编写需要动态生成某些查询一个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。如果我手动运行创建的查询其正常运行。在这一点上,我能确定是什么原因造成的问题。

有帮助吗?

解决方案

尝试失去“;”从字符串内所执行的立即。

EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top