我做了一些研究,找不到任何解决方案,因此在此发布。
我们有一个每天运行的dataload工作。我们有单独的DML语句来插入,更新等。我们希望避免插入语句多次运行。
是否可以选择在此方案中使用merge语句来更新记录是否存在或如果不存在则插入?
如果可能,请给我一个例子,因为我对sql语句很新。
我们正在使用Oracle db2 for dbms
提前致谢!
答案 0 :(得分:0)
使用IF EXISTS语句,如下所示:
IF EXISTS (SELECT 1 FROM #mytable# WHERE #column1# = #this# AND #column2# = #that)
BEGIN
#update statement#
END
ELSE
BEGIN
#insert statement#
END
编辑: 可以在此处找到此语法:https://www.toadworld.com/platforms/ibmdb2/w/wiki/7777.ifthenelse
这意味着我的一般情况将在DB2中成为现实:
IF (#count of value# = 1) THEN
#updatestatement#;
ELSEIF (#count of value# > 1) THEN
#throw an error, as you cannot update uniquely#
ELSE
#insertstatement#;
END IF;
我还注意到你可以在DB2上运行SQL命令,这对于这个任务也很有用
最后,看看这里,可能会给你进一步的想法:)
答案 1 :(得分:0)
通过Merge语句本身完成它:)
MERGE INTO table1(storeent_id, name, value) AS t1
USING (VALUES ((SELECT STOREENT_ID FROM STOREENT WHERE IDENTIFIER='test'), 'SOLR_SERVICEABILITY_URL',
'Sample')) AS t2(storeent_id, name, value)
ON t1.name = t2.name AND t1.storeent_id = t2.storeent_id
WHEN MATCHED THEN
UPDATE SET
t1.value = t2.value
WHEN NOT MATCHED THEN
INSERT
(name, storeent_id, value)
VALUES (t2.name, t2.storeent_id, t2.value);