fil*_*mac 4 java sql db2 merge jdbc
我想使用db2 merge语句将其作为来自jdbc的语句提交.我在以下场景中.我正在使用专有的持久层,我正在处理一个我不知道它是否已经存在的实体,我想使用merge语句来插入或更新数据库中的行.可能吗?假设我正在使用具有三列的表人: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)
Run Code Online (Sandbox Code Playgroud)
这样的声明?我试图这样做,但我收到了一个错误.我不认为在使用后允许使用选择:
USING (select '5' as id, 'chuck' as name, 'norris' as surname from SYSIBM.SYSDUMMY1)As s
Run Code Online (Sandbox Code Playgroud)
我也试着做:
USING VALUES('5','chuck','norris') AS s(id,chuck,norris)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.任何帮助,将不胜感激.此外,是否有人知道是否可以在准备好的声明中使用这样的声明,用'?'替换USING部分中表达的实际值 占位符是为了使用setXXX()方法将它们设置为预准备语句?
谢谢
谢谢Fil
MERGE假设您正在使用DB2 Linux/Unix/Windows(LUW),您的数据的语法将是这样的.该VALUES条款进入内部括号的使用零件.
此外,如果您使用LUW,则无法MERGE在LUW 9.5或更低版本中动态准备(IE,您的查询不能包含参数标记).这是在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)
Run Code Online (Sandbox Code Playgroud)
但是,您对全查询的实际问题可能是您的查询中存在一些拼写错误...例如"surmane"in UPDATE SET t.name=s.name, t.surmane=s.surname