Db2 从 jdbc 合并动态值

2023-12-24

我想使用 db2 merge 语句将其作为来自 jdbc 的语句提交。 我处于以下场景。我正在使用专有的持久层,并且正在处理一个实体,我不知道它是否已经持久存在,并且我想使用合并语句来插入或更新数据库上的行。 是否可以? 假设我正在处理桌子people三列:身份证、姓名、姓氏我正在处理一个 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)

但它不起作用。任何帮助,将不胜感激。 此外,有人知道是否可以在准备好的语句中使用这样的语句,将 USING 部分中表达的实际值替换为“?”占位符以便使用 setXXX() 方法将它们设置为准备好的语句?

Thanks

谢谢 菲尔


语法为MERGE假设您使用的是 DB2 Linux/Unix/Windows (LUW),您的数据将是这样的。这VALUES条款如下insideUSING 部分的括号。

另外,如果您使用 LUW,则无法动态准备MERGE(即,您的查询不能有参数标记)在 LUW 9.5 或更低版本中。这是在 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)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Db2 从 jdbc 合并动态值 的相关文章

随机推荐