если новая строка вставлена в таблицу, если дублирующие строки уже присутствуют, я хочу объединить две строки в одну
таблица ТЕСТ ( столбец идентификатора, определенный как первичный ключ )
ID ITEM QUANTITY
-- ---- --------
1 KA1 5
2 KA2 2
если новая строка вставлена в таблицу test со значениями (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;
/