【问题标题】:Db2 merge from jdbc with dynamic values来自 jdbc 的 Db2 与动态值合并
【发布时间】:2012-02-15 13:49:39
【问题描述】:

我想使用 db2 合并语句将其作为来自 jdbc 的语句提交。 我处于以下情况。我正在使用一个专有的持久层,我正在处理一个我不知道它是否已经持久化的实体,我想使用合并语句来插入或更新数据库上的一行。 可能吗? 假设我正在处理具有三列的 people 表:id, name, surname 并且我正在处理一个 id="5", name="chuck ", surname="norris" 我可以发出:

MERGE INTO people AS t
  USING (select '5' as id, 'chuck' as name, 'norris' as surname from SYSIBM.SYSDUMMY1)As s
    ON (t.id = s.id)
  WHEN MATCHED THEN 
      UPDATE SET t.name=s.name, t.surmane=s.surname
  WHEN NOT MATCHED THEN
    INSERT
      (id, name, surname)
    VALUES (s.id, s.name, s.surname)

这样的说法?我正在尝试这样做,但出现错误。我认为在 USING 之后不允许使用选择:

USING (select '5' as id, 'chuck' as name, 'norris' as surname from SYSIBM.SYSDUMMY1)As s

我也尝试过:

USING VALUES('5','chuck','norris') AS s(id,chuck,norris)

但它不起作用。任何帮助,将不胜感激。 此外,有谁知道是否可以在准备好的语句中使用这样的语句,用“?占位符以便使用 setXXX() 方法将它们设置为准备好的语句?

谢谢

谢谢 菲尔

【问题讨论】:

    标签: java sql jdbc merge db2


    【解决方案1】:

    假设您使用的是 DB2 Linux/Unix/Windows (LUW),您的数据的 MERGE 的语法类似于这样。 VALUES 子句 USING 部分的括号内。

    此外,如果您使用的是 LUW,则无法在 LUW 9.5 或更低版本中动态准备 MERGE(即,您的查询不能有参数标记)。这是在 LUW 9.7 中添加的。

    MERGE INTO people AS t USING (
          VALUES (5, 'Chuck', 'Norris'),
                 (6, 'John', 'Smith'),
                 (7, 'Abraham', 'Lincoln')
                 -- maybe more rows
        ) AS s (id, name, surname)
        ON t.id = s.id
        WHEN MATCHED THEN
            UPDATE SET t.name=s.name, t.surname=s.surname
        WHEN NOT MATCHED THEN
            INSERT (id, name, surname)
                    VALUES (s.id, s.name, s.surname)
    

    但是,您对全选的实际问题可能是您的查询中有一些拼写错误...例如 UPDATE SET t.name=s.name, t.surmane=s.surname 中的“surmane”

    【讨论】:

    • 非常感谢!它起作用了……显然括号有问题……正确的使用是你写的那个! :)
    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多