oracle 如何将多个更新查询合并为单个更新查询?

siv3szwd  于 2022-11-22  发布在  Oracle
关注(0)|答案(2)|浏览(157)

我有一个场景,如果列没有表示空的值,则更新'NULL'字符串。因此,我运行了多个更新查询来设置'NULL'字符串。

update codesets set system_name='NULL' where system_name is null
update codesets set column_name='NULL' where column_name is null
update codesets set table_name='NULL' where table_name is null
update codesets set schema_name='NULL' where schema_name is null

如何将多个更新查询合并为单个更新查询?

xtupzzrd

xtupzzrd1#

您可以使用case表达式、nvl或coalesce:

update codesets
set system_name=coalesce(system_name, 'NULL'),
    column_name=coalesce(column_name, 'NULL'),
    table_name=coalesce(table_name, 'NULL'),
    schema_name=coalesce(schema_name, 'NULL')
where system_name is null
or column_name is null
or table_name is null
or schema_name is null

对于更新的每一行,如果这些列中的每一列不为空,则将其(重新)设置为当前值,如果为空,则设置为“NULL”。
组合的where子句意味着仅触及其中至少一列需要更新的行;对于那些行,所有四列都被更新,但可能是它们的原始值。2但是至少有一列会改变。
fiddle
我怀疑这是否是一个好主意--使用神奇的值'NULL'而不是真正的null似乎没有帮助。

egdjgwm8

egdjgwm82#

您可以使用coalesce将值设置为“NULL”,但我不认为这样做有什么意义,代码似乎不太可读(在我看来)。
下面是一个示例代码:

update codesets 
set 
system_name=coalesce(system_name, 'NULL'),
column_name=coalesce(column_name, 'NULL'),
table_name=coalesce(table_name, 'NULL'),
schema_name =coalesce(schema_name , 'NULL') 
where 
system_name is null or column_name is null or table_name is null or schema_name is null

另外,为什么需要将值设置为“NULL”?

相关问题