如果列沒有表示 null 的值,我有一個更新“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
如何將多個更新查詢合并為一個更新查詢?
uj5u.com熱心網友回復:
您可以使用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”?
uj5u.com熱心網友回復:
您可以使用 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子句意味著只觸及至少一列需要更新的行;對于這些行,所有四列都已更新,但可能是它們的原始值。不過,至少有一列會改變。
小提琴
不過,我會質疑這是否是一個好主意——使用魔法值“NULL”而不是真正的 null 似乎沒有幫助。
uj5u.com熱心網友回復:
您可以簡單地更新所有行并讓 COALESCE 在找到 NULL 的位置設定文本“NULL”。
排除所有包含資料的行不會更快,因為資料庫無論如何都必須檢查每一行,如果發現它必須更新相同的值將跳過
UPDATE codesets
SET
system_name=COALESCE(system_name, 'NULL'),
column_name=COALESCE(column_name, 'NULL'),
table_name=COALESCE(table_name, 'NULL'),
schema_name =COLASCE(schema_name , 'NULL')
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/526891.html
標籤:sql甲骨文
