【问题标题】:DB2 z/OS update by listDB2 z/OS 按列表更新
【发布时间】: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 会很慢。并寻求更快的更新。

标签: sql db2 zos


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2021-12-02
    • 2018-10-25
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多