如果将新行插入表中,如果已存在重复行,我想将这两行合并为一行
表 TEST ( ID列定义为主键)
ID ITEM QUANTITY -- ---- -------- 1 KA1 5 2 KA2 2
如果使用值(KA1,6)将新行插入表测试,因为项目 KA1 已经存在新行应该插入总数量11和旧行应删除。
结果集应如下所示:
使用触发器和内联程序的ID ITEM QUANTITY -- ---- -------- 2 KA2 2 3 KA1 11
是:
CREATE OR REPLACE TRIGGER MERG_DUP
BEFORE INSERT ON TEST
FOR EACH ROW
BEGIN
FOR VAL IN(SELECT ID,ITEM,QUANTITY, FROM TEST)
LOOP
IF VAL.ITEM=:NEW.ITEM THEN
:NEW.QUANTITY:=:NEW.QUANTITY+VAL.QUANTITY;
XXI_MULTI_PR_REMOVE(VAL.ID);
EXIT;
END IF;
END LOOP;
end;
/
CREATE OR REPLACE PROCEDURE XXI_MULTI_PR_REMOVE(ID number)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
L_TID NUMBER;
BEGIN
L_TID:=ID;
DELETE FROM TEST WHERE ID=L_TID;
commit;
END;
/
答案 0 :(得分:1)
您无需使用PRAGMA AUTONOMOUS_TRANSACTION
,也不要在程序中使用COMMIT
内联。
对于您的情况, CREATE TABLE test
很好 ID
列定义为 {{ 1}}。
因此,可以使用以下顺序的语句:
number generated always as identity primary key