Why does running this query with EXECUTE IMMEDIATE cause it to fail?(为什么使用 EXECUTE IMMEDIATE 运行此查询会导致它失败?)
问题描述
我正在编写一个需要动态生成一些查询的 PL/SQL 过程,其中一个涉及使用作为参数的查询的结果创建临时表.
I am writing a PL/SQL procedure that needs to to dynamically generate some queries, one of which involves creating a temporary table using results from a query taken as a parameter.
CREATE OR REPLACE PROCEDURE sqlout(query IN VARCHAR2)
IS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ');';
END;
它编译正确,但即使是非常简单的查询,例如:
It compiles correctly, but even with very simple queries such as with:
BEGIN
sqlout('SELECT * FROM DUAL');
END;
IT 抛出 ORA-00911:无效字符.如果我手动运行创建的查询,它会正确运行.在这一点上,我能够确定导致问题的原因.
IT throws ORA-00911: invalid character. If I run the created query manually it runs correctly. At this point I am able to determine what is causing the problem.
推荐答案
尽量去掉;"从您立即执行的字符串内部.
Try to lose the ";" from inside the string that you Execute Immediate.
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';
这篇关于为什么使用 EXECUTE IMMEDIATE 运行此查询会导致它失败?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:为什么使用 EXECUTE IMMEDIATE 运行此查询会导致它失败?
基础教程推荐
- MySQL 中的类型:BigInt(20) 与 Int(20) 2021-01-01
- mysql选择动态行值作为列名,另一列作为值 2021-01-01
- 什么是 orradiag_<user>文件夹? 2022-01-01
- 如何根据该 XML 中的值更新 SQL 中的 XML 2021-01-01
- 在多列上分布任意行 2021-01-01
- oracle区分大小写的原因? 2021-01-01
- 二进制文件到 SQL 数据库 Apache Camel 2021-01-01
- 表 './mysql/proc' 被标记为崩溃,应该修复 2022-01-01
- 在 MySQL 中:如何将表名作为存储过程和/或函数参数传递? 2021-01-01
- 如何在 SQL 中将 Float 转换为 Varchar 2021-01-01
