【发布时间】:2019-03-26 12:24:23
【问题描述】:
我有一个运行良好的更新查询。一旦我把它放在我的 PLSQL 块中,它就会返回 NULL 并且没有错误。在块的这一部分之前,我将默认值插入到目标表中,因此我知道更新实际上是将字段更新为 NULL。由于此查询是按另一列计算每个列组的行数,因此它总是有一个值。我从字符串外部的查询中得到正确的计数..
当我将查询放在我的 plsql 块中时,我使用立即执行,查询将是一个字符串,其中 my_table_name 和 my_column_names 和 Table_1 是可变的。
我搜索了很多,发现了我应该提交的东西等等。但问题仍然存在。
例如: Need help in execute immediate update query
update Table_FINAL r
set column_1 =
(
select max(totalcount)
from (
select 'my_table_name' as table_name, 'my_collumn_name' as column_name, column_3, count(*) as totalcount
from my_table_name a
where exists (select 1 from Table_2 where Table_2.column_x = a.column_x)
group by column_3
) s
where r.column_3 = s.column_3
)
;
这里是字符串:
execute immediate 'update Table_FINAL r
set column_1 =
(
select max(totalcount)
from (
select ''' || my_table_name || ''' as table_name, ''' || my_collumn_name || ''' as column_name, column_3, count(*) as totalcount
from ' || my_table_name || ' a
where exists (select 1 from Table_2 where Table_2.column_x = a.column_x)
group by column_3
) s
where r.column_3 = s.column_3
)'
;
【问题讨论】:
-
更新不返回任何内容;你的意思是表的
column_1最终为空吗?我猜您错误地提供或使用了变量表/列名称 - 请显示更新的动态版本以及您如何在问题中执行它。 -
使用动态 SQL 时:将 动态创建的 UPDATE 放入变量中,并使用 DBMS_OUTPUT.PUT_LINE 将其显示在屏幕上。复制/粘贴它,单独运行(不在 PL/SQL 块中)看看会发生什么。
-
我添加了字符串,并在第一个查询中更正了某事。我用 my_table_name 替换了 Table_1,因为它是一个变量
-
Alex,很抱歉误用了返回词。是的,我的意思是它将 column_1 更新为 NULL。我如何执行它到底是什么意思?我有一个块,其中有多个执行立即数。所有的工作,都是字符串。只有这个更新实际上是在做我不想要的事情。在每个执行立即部分之后,我也有一个提交。
-
我的意思是您在编辑中显示的内容。什么都没有跳出来(就为什么它会表现不同而言),但是按照 Littlefoot 的建议做,并检查生成的动态字符串是否与原始状态语句完全匹配。
标签: oracle plsql dynamic-sql