Můžete to zkusit
1 MERGE
2 INTO target_table tgt
3 USING source_table src
4 ON ( src.object_id = tgt.object_id )
5 WHEN MATCHED
6 THEN
7 UPDATE
8 SET tgt.object_name = src.object_name
9 , tgt.object_type = src.object_type
10 WHEN NOT MATCHED
11 THEN
12 INSERT ( tgt.object_id
13 , tgt.object_name
14 , tgt.object_type )
15 VALUES ( src.object_id
16 , src.object_name
17 , src.object_type );
Syntaxe na první pohled vypadá trochu skličující, ale pokud ji čteme odshora dolů, je docela intuitivní. Všimněte si následujících klauzulí:
•MERGE (řádek 1):jak bylo uvedeno dříve, toto je nyní 4. příkaz DML v Oracle. Jakékoli rady, které bychom mohli chtít přidat, následují přímo za tímto klíčovým slovem (např. MERGE /*+ HINT */);
•INTO (řádek 2):takto specifikujeme cíl pro MERGE. Cílem musí být buď tabulka, nebo aktualizovatelný pohled (zde nelze použít in-line pohled);
•USING (řádek 3):klauzule USING představuje zdrojovou datovou sadu pro MERGE. Může to být jedna tabulka (jako v našem příkladu) nebo zobrazení v řádku;
•ON () (řádek 4):klauzule ON poskytuje spojení mezi zdrojovou datovou množinou a cílovou tabulkou. Všimněte si, že podmínky spojení musí být v závorkách;
•WHEN MATCHED (řádek 5):tato klauzule je místem, kde instruujeme Oracle, co dělat, když již máme odpovídající záznam v cílové tabulce (tj. existuje spojení mezi zdrojovou a cílovou datovou množinou). V tomto případě samozřejmě chceme AKTUALIZACI. Jedním z omezení této klauzule je, že nemůžeme aktualizovat žádný ze sloupců použitých v klauzuli ON (ačkoli to samozřejmě nepotřebujeme, protože se již shodují). Jakýkoli pokus o zahrnutí sloupce spojení vyvolá neintuitivní výjimku neplatného identifikátoru; a
•WHEN NOT MATCHED (řádek 10):tato klauzule je místo, kam VLOŽÍME záznamy, pro které neexistuje žádná aktuální shoda.