问题描述
如果我对此立即执行执行,则不会有问题:
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)
或者换句话说,将所有双撇号更改为单撇号。