设为首页 - 加入收藏 华夏网 (http://www.hxwgxz.com)- 云主机,资讯,互联网,人工智能,云计算,大数据,区块链,VR,站长网!
热搜: 2019 google 中国 2020
当前位置: 主页 > 编程 > 正文

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

发布时间:2021-03-03 07:48 所属栏目:[编程] 来源:网络整理
导读:我正在编写一个需要动态生成一些查询的PL / SQL过程,其中一个过程涉及使用作为参数的查询结果创建临时表. CREATE OR REPLACE PROCEDURE sqlout(query IN VARCHAR2)ISBEGINEXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ');';E

我正在编写一个需要动态生成一些查询的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 || ')';

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章