执行立即sql连接的插入字符串

问题描述

如果我对此立即执行执行,则不会有问题:

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

如果我将字符串放入变量中,则DBMS_OUTPUT.PUT_LINE返回此确切的字符串,但是当我尝试执行该变量时,我得到了“无效的sql语句”,因此我认为它一定是带引号的,但我只是无法弄清楚出来。 我最终将尝试遍历数百个表(在不同的表上运行上述表)

任何帮助都受到赞赏。

解决方法

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

插入tab_aantal2(table_name,count_1,value_1)从(选择'CUSTOMERS'table_name,count(1)count_1,CUSTOMERID ||'〜'|| NAME ||'〜'|| ADDRESS中选择table_name,count_1,value_1来自PJO.CUSTOMERS组的value_1,由CUSTOMERID ||'〜'|| NAME ||'〜'||地址的count(1)> 1)

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...