DB2 z/OS 按列表更新
Posted
技术标签:
【中文标题】DB2 z/OS 按列表更新【英文标题】:DB2 z/OS update by list 【发布时间】:2012-06-12 15:32:58 【问题描述】:我在文本文件中有一个 3k ID 的列表。我应该找到具有此类 ID 的行并更新它们。 我希望能像
WITH RECORD_ID
(ID) AS (
'12345',
...
'32134')
UPDATE MY_TABLE T
SET T.NAME = REPLACE(T.NAME, X'03', '')
WHERE EXISTS (SELECT 1 FROM RECORD_ID R WHERE R.ID = T.ID);
但这不起作用。任何的想法?
【问题讨论】:
“不起作用”怎么办?我不熟悉 z-os 版本,但 CTE 在我的 i-os DB2 中似乎无效。如果您正在构建 CTE,为什么不将 id 列表放在IN(...)
子句中?
我认为如果你有 3000 条记录的列表,IN 会很慢。并寻求更快的更新。
【参考方案1】:
您不能只在 DB2 中的 CTE 中有一个值列表,您必须将这些值UNION ALL
放在一起:
WITH RECORD_ID (ID) AS (
SELECT '12345' FROM SYSIBM.SYSDUMMY1 UNION ALL
-- ...
SELECT '32134' FROM SYSIBM.SYSDUMMY1
)
UPDATE MY_TABLE T
SET T.NAME = REPLACE(T.NAME, X'03', '')
WHERE EXISTS (SELECT 1 FROM RECORD_ID R WHERE R.ID = T.ID);
应该可以。
我同意@X-Zero,不过……似乎IN
子句中的值列表更合适,除非您有特定原因要使用 CTE。
【讨论】:
以上是关于DB2 z/OS 按列表更新的主要内容,如果未能解决你的问题,请参考以下文章