Polecenie MARGE



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');

CREATE TABLE TEST2 (POLE1 NUMBER, POLE2 VARCHAR(10));
-- 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)
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.

Brak komentarzy:

Prześlij komentarz