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

前端之家收集整理的这篇文章主要介绍了sql – 为什么使用EXECUTE IMMEDIATE运行此查询会导致它失败?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个需要动态生成一些查询的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 || ')';

猜你在找的MsSQL相关文章