Polecenie
merge służy do wykonania w jednej instrukcji operacji insert i update dla tej
samej tabeli na podstawie danych porównawczych z innej tabeli. Na podstawie
zdefiniowanych warunków system ORACLE pobiera źródło danych i w przypadku
spełnienia warunków aktualizuje dane lub dodaje rekordy. Działanie procedury
postaram się przedstawić na przykładzie uzupełnienia różnic pomiędzy tabelami.
Przykładowo tworzymy 2 tabele:
CREATE TABLE TEST1 (POLE1 NUMBER, POLE2
VARCHAR(10));
-- Dodajemy pola do tablicy 1
INSERT INTO TEST1 VALUES(1,'ABC');
INSERT INTO TEST1 VALUES(2,'CDE');
INSERT INTO TEST1 VALUES(3,'EFG');
INSERT INTO TEST1 VALUES(1,'ABC');
INSERT INTO TEST1 VALUES(2,'CDE');
INSERT INTO TEST1 VALUES(3,'EFG');
CREATE TABLE TEST2 (POLE1 NUMBER, POLE2
VARCHAR(10));
-- Dodajemy testowe pole do tablicy 2
INSERT INTO TEST2 VALUES(1,'AB');
-- Dodajemy testowe pole do tablicy 2
INSERT INTO TEST2 VALUES(1,'AB');
Za pomocą
jednego polecenia dokonujemy aktualizacji lub dodania wartości w tablicy 2.
MERGE INTO TEST2 T1
USING (SELECT POLE1,POLE2 FROM TEST1) T2
ON (T1.POLE1=T2.POLE1) WHEN MATCHED THEN
UPDATE SET POLE2 = T2.POLE2 WHEN NOT MATCHED THEN
INSERT (T1.POLE1, T1.POLE2) VALUES (T2.POLE1,T2.POLE2)
USING (SELECT POLE1,POLE2 FROM TEST1) T2
ON (T1.POLE1=T2.POLE1) WHEN MATCHED THEN
UPDATE SET POLE2 = T2.POLE2 WHEN NOT MATCHED THEN
INSERT (T1.POLE1, T1.POLE2) VALUES (T2.POLE1,T2.POLE2)
Daje wynik...
SELECT * FROM TEST2;
POLE1 POLE2
---------- ----------
3 EFG
1 ABC
2 CDE
Począwszy do wersji 10g ORACLE można zastosować
klauzulę DELETE z własną klauzulą WHERE w celu kasowania zawartości tablicy
docelowej.
---------- ----------
3 EFG
1 ABC
2 CDE
Brak komentarzy:
Prześlij komentarz