一次操作即可插入和更新数据
您只需一次操作即可更新现有数据并插入新数据。 当您想要更新一个包含一组行的表时,此操作非常有用,其中一些行是对现有行的更改,而另一些则是新行。
关于本任务
使用MERGE语句,您只需一次操作即可更新现有数据并插入新数据。
例如,应用程序可能需要从数据库中获取一组行,让用户通过图形用户界面修改数据,然后将修改后的数据存储在数据库中。 其中一些修改的数据是对现有行的更新,而另一些数据则是新行。 您可以一步完成更新和插入操作。
过程
只需一次操作即可更新现有数据并插入新数据:
发出MERGE语句。
要更新现有数据并插入新数据,请指定带有“匹配”和“不匹配”子句的MERGE语句。 这些条款规定了 Db2 如何处理匹配和不匹配的数据。 如果 Db2 找到匹配的行,则更新该行。 如果 Db2 没有找到匹配的行,则会插入新行。
示例
你可以用以下一系列语句来做出这些更改:
UPDATE INVENTORY
SET QUANTITY = QUANTITY + :hv_delta
WHERE MODEL = :hv_model;
--begin pseudo code
if sqlcode >= 0
then do
GD
if rc = 0 then INSERT..
end
-- end pseudo code
GET DIAGNOSTICS :rc = ROW_COUNT;
IF rc = 0 THEN
INSERT INTO INVENTORY VALUES (:hv_model, :hv_delta);
END IF;MERGE语句将更新和插入操作简化为一条语句:
MERGE INTO INVENTORY
USING ( VALUES (:hv_model, :hv_delta) ) AS SOURCE(MODEL, DELTA)
ON INVENTORY.MODEL = SOURCE.MODEL
WHEN MATCHED THEN UPDATE SET QUANTITY = QUANTITY + SOURCE.DELTA
WHEN NOT MATCHED THEN INSERT VALUES (SOURCE.MODEL, SOURCE.DELTA)
NOT ATOMIC CONTINUE ON SQLEXCEPTION;