Zu Oracle

Bereich:
Versionsinfo:
SQL
9.2, 10.2, 11.1
Erstellung:
Letzte Überarbeitung:
01/2005 MM
06/2009 EF
 Als PDF Downloaden!

Merge

Ab Version 9.0 bietet Oracle die Möglichkeit, Insert- und Update-Statements zu kombinieren. Werden beispielsweise ständig neue Daten in eine Hilfstabelle eingespielt, anhand derer Einträge in Tabellen zum Teil ergänzt (bei komplett neuen Datensätzen), zum Teil aber auch geändert werden müssen (bei bereits vorhandenen Datensätzen), so kann dies mit MERGE in einem Schritt erfolgen.
Ab Version 10g kann auch ein Delete-Statement integriert werden.

Syntax:

     MERGE INTO [schema .] table [t_alias]
     USING [schema .] { table | view | subquery } [t_alias]
     ON ( condition )
     WHEN MATCHED THEN UPDATE SET column = { expr | DEFAULT }
         [, column = { expr | DEFAULT }....]
     DELETE WHERE <bedingung>
     WHEN NOT MATCHED THEN INSERT ( column [, column...]) VALUES ( expr [, expr...]);

Die Verknüpfungsbedingung muss in Klammern stehen, sonst erhält man die nicht besonders erhellende Fehlermeldung ORA-00969: Schlüsselwort ON fehlt

Beispiel:

CREATE TABLE annsal(empno NUMBER, peryear NUMBER); 
INSERT INTO annsal (empno)
SELECT empno FROM emp WHERE deptno = 10; 

SELECT * FROM annsal;

EMPNO  PERYEAR
------ ----------
7782 
7839 
7934 

MERGE INTO annsal a USING emp e ON (a.empno = e.empno)
 WHEN MATCHED THEN
   UPDATE SET a.peryear =  (e.sal *12 + NVL(e.comm,0))
 DELETE WHERE empno = 7934
 WHEN NOT MATCHED THEN
  INSERT (a.empno, a.peryear) VALUES (e.empno, e.sal *12 + NVL(e.comm,0));

SELECT * FROM annsal; 

 EMPNO   PERYEAR
 ------  --------
 7782    29400
 7839    60000
 7934    15600
 7902    36000
 7900    11400
 7521    15500
 7654    16400
 7566    35700
 7844    18000
 7499    19500
 7698    34200
 7788    36000
 7369    9600
 7876    13200

Suche

Kontakt

Telefon:
  089 6228 6789-0

Telefon (noch gültig):
  089 679090-40

E-Mail Verteiler Monatstipps

Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.