【问题标题】:execute immediate sql concatenated insert string立即执行 sql 连接的插入字符串
【发布时间】:2020-10-28 16:53:32
【问题描述】:

如果我对此立即执行,我没有问题:

execute immediate 'insert into tab_aantal2 (table_name,count_1,value_1) select table_name,count_1,value_1 from(select ''CUSTOMERS'' table_name,count(1) count_1,CUSTOMERID||''~''||NAME||''~''||ADDRESS
value_1  from PJO.CUSTOMERS group by CUSTOMERID||''~''||NAME||''~''||ADDRESS having count(1) > 1)';

这个字符串存储在一个表中,看起来像:

'insert into tab_aantal2 (table_name,count_1,value_1) 
select table_name,count_1,value_1 from(select ''CUSTOMERS'' table_name,count(1) count_1,CUSTOMERID||''~''||NAME||''~''||ADDRESS  value_1 
from PJO.CUSTOMERS 
group by CUSTOMERID||''~''||NAME||''~''||ADDRESS  
having count(1) > 1)'

如果我将字符串放在变量中,DBMS_OUTPUT.PUT_LINE 会返回这个确切的字符串,但是当我尝试执行变量时,我得到“无效的 SQL 语句”,所以我认为它一定是带引号的东西,但我就是想不通出来。 我最终会尝试遍历数百个表(在不同的表上运行上述)

非常感谢任何帮助。

【问题讨论】:

    标签: sql oracle plsql execute


    【解决方案1】:

    实际传递给EXECUTE IMMEDIATE 的字符串不应该将撇号加倍 - 只有在 PL/SQL 编译器解析字符串时才需要。将数据库中的数据更改为:

    insert into tab_aantal2 (table_name,count_1,value_1) select table_name,count_1,value_1 from(select 'CUSTOMERS' table_name,count(1) count_1,CUSTOMERID||'~'||NAME||'~'||ADDRESS来自 PJO.CUSTOMERS 组的 value_1,按 CUSTOMERID||'~'||NAME||'~'||ADDRESS 的 count(1) > 1)

    或者换句话说,将所有双撇号改为单撇号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多