我正在编写一个需要动态生成一些查询的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:无效字符.如果我手动运行创建的查询,它将正确运行.此时我能够确定导致问题的原因.
解决方法
试着失去“;”从您执行立即的字符串内部.
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';