gpt4 book ai didi

java - Db2 从具有动态值的 jdbc 合并

转载 作者:搜寻专家 更新时间:2023-11-01 02:31:01 24 4
gpt4 key购买 nike

我想使用 db2 merge 语句将其作为来自 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)

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

谢谢

谢谢填充

最佳答案

假设您使用的是 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”

关于java - Db2 从具有动态值的 jdbc 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9294614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com