有谁知道通过调用 INSERT 来使 HSQLDB 更新列的解决方案。我希望我的代码能够插入,如果已经有数据,则更新该数据。我知道 MySQl,我相信,有'ON DUPLICATE KEY UPDATE'。我似乎找不到任何关于此的最新文档。
问问题
4326 次
2 回答
10
一个好的样本有时比关于 MERGE 声明的正式文档更好:)
样品 1
对于MY_TABLE
具有列 (COL_A
和COL_B
) 的表 ( ),其中第一列是主键:
MERGE INTO MY_TABLE AS t USING (VALUES(?,?)) AS vals(a,b)
ON t.COL_A=vals.a
WHEN MATCHED THEN UPDATE SET t.COL_B=vals.b
WHEN NOT MATCHED THEN INSERT VALUES vals.a, vals.b
样品 2
让我们在表中添加另一列 ( COL_C
):
MERGE INTO MY_TABLE AS t USING (VALUES(?,?,?)) AS vals(a,b,c)
ON t.COL_A=vals.a
WHEN MATCHED THEN UPDATE SET t.COL_B=vals.b, t.COL_C=vals.c
WHEN NOT MATCHED THEN INSERT VALUES vals.a, vals.b, vals.c
样品 3
现在让我们将主键更改为由前两列 (COL_A
和COL_B
) 组成:
MERGE INTO MY_TABLE AS t USING (VALUES(?,?,?)) AS vals(a,b,c)
ON t.COL_A=vals.a AND t.COL_B=vals.b
WHEN MATCHED THEN UPDATE SET t.COL_C=vals.c
WHEN NOT MATCHED THEN INSERT VALUES vals.a, vals.b, vals.c
享受!
于 2015-08-16T11:28:31.730 回答
4
HSQLDB 为此提供了 MERGE 语句。
http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_merge_statement
或者,您可以编写一个简短的存储过程来插入,然后捕获任何违反约束的异常并执行更新。
http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#src_psm_handlers
更新:从 2.3.4 版开始,HSQLDB 还支持 ON DUPLICATE KEY 的 MySQL 语法
于 2013-01-28T16:17:18.590 回答