一尘不染

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

sql

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


阅读 112

收藏
2021-05-05

共1个答案

一尘不染

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

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