next Fundamentals
up Einführung in PL / SQL Oracle 8i/9i
previous Einführung in die PL/SQL-Programmierung
  Contents   Index

Subsections

Neuerungen in Oracle 9i


NULLIF()

Diese neue Funktion vergleicht zwei Werte oder Ausdrücke auf Gleichheit. Sind beide gleich, so wird NULL zurückgegeben, sonst der erste Wert.
SELECT ename, NULLIF(deptno, 20) FROM SCOTT.emp;


CASE

SELECT 
  CASE WHEN deptno = 20 
    THEN NULL 
  ELSE 
    deptno 
  END 
  FROM SCOTT.emp
;


COALESCE()

COALESCE ist eine generalisiertere Form von NVL. An COALESCE kann im Gegensatz zu NVL eine beliebig lange Liste von Argumenten übergeben werden, Minimum sind zwei Argumente. COALESCE gibt aus der Liste den ersten Wert zurück, der nicht NULL ist.
SELECT COALESCE(comm, sal) FROM SCOTT.emp;


JOIN

Die JOIN-Befehle sind FROM untergeordnet.


CROSS JOIN

Es wird ein Kreuzprodukt erstellt. Ein ON kommt in der Syntax nicht vor.
select e1.ename,e2.ename 
  from scott.emp e1 
    cross join scott.emp e2;


NATURAL JOIN

Alle gleichnamige Spalten mehrerer Tabellen werden automatisch verknüpft. Ein ON kommt in der Syntax nicht vor.
SELECT deptno, ename, dname 
  FROM emp 
    NATURAL JOIN dept;


USING JOIN

Beim USING JOIN wird der gemeinsame Spaltenname explizit angegeben. Dies ist bei mehreren, gleichnamigen Spalten notwendig. Ein ON kommt in der Syntax nicht vor.
SELECT deptno, ename, dname 
  FROM emp 
    JOIN dept USING (deptno)
;


LEFT OUTER JOIN

select d.deptno,e.ename 
  from scott.dept d 
    left outer join scott.emp e 
      on e.deptno = d.deptno
;


RIGHT OUTER JOIN

select d.deptno,e.ename 
  from scott.emp e 
    right outer join scott.dept d 
      on e.deptno = d.deptno
;


FULL OUTER JOIN

select d.deptno,e.ename 
  from scott.emp e 
    full outer join scott.dept d 
      on e.deptno = d.deptno
;


INNER JOIN

select d.deptno,e.ename 
  from scott.dept d 
    join scott.emp e 
      on e.deptno = d.deptno
;


MERGE - INSERT + UPDATE

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.
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))
  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


DEFAULT

Ab Version 9i kann nunmehr das Wort DEFAULT auch in Einfüge- und Aktualisierungsoperationen genutzt werden.

Umgang mit DEFAULT

create table test(Nummer int,city varchar2(100) default 'Berlin');


Einfügen von Datensätzen

insert into test(nummer,city) values(1,default);

Aktualisieren von Datensätzen

update test set city = default where nummer = 1;

Übungen 10

Übungen siehe Seite [*].
next Fundamentals
up Einführung in PL / SQL Oracle 8i/9i
previous Einführung in die PL/SQL-Programmierung
  Contents   Index


Stefan Hietel dama.go GmbH, Robert Warnke http://rowa.giso.de