sql - 立即执行 sql 连接的插入字符串
问题描述
如果我对此立即执行,我没有问题:
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 语句”,所以我认为它一定是带引号的东西,但我就是想不通。我最终将尝试遍历数百个表(在不同的表上运行上述)
任何帮助高度赞赏。
解决方案
实际传递给的字符串EXECUTE IMMEDIATE
不应该将撇号加倍——只有在 PL/SQL 编译器解析字符串时才需要。将数据库中的数据更改为:
插入 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 count(1) > 1)
或者换句话说,将所有双撇号改为单撇号。
推荐阅读
- javascript - If 和 Else 语句不适用于 API?
- go - 指针切片的用例是什么?
- spring-boot - 在@DataJpaTest 中启用@Converter
- android - 尝试使用房间数据库时出现 NullPointerException
- javascript - .NET Core - 415 不支持的媒体类型(HTTP POST)
- c# - SqlKata:选择东西
- internationalization - 长文本翻译
- python - 使用 Psycopg2 游标和 Flask 批量显示 Postgresql 表中的大量记录
- python - Pandas:查找数据框中每一列的最大最小行数
- powerbi - 对一列求和的快速度量,按另一列分组,如果选择过滤器则不会更改 (DAX)