de.comp.lang.php FAQ

18.5. Gibt es auto_increment unter Oracle?

Antwort von Thomas Fromm

Nein. Jedoch kann auto_increment via Trigger emuliert werden.

Beispiel:

Wer von MySQL nach Oracle portiert vermisst wohl als erstes das auto_increment Feature von MySQL Spalten. Dieses läßt sich jedoch unter der Nutzung von Sequences und Triggern bei Oracle erstellen:

rem Wir brauchen zum einen einen Zähler,
rem der hochzählt (dazu die Sequence)

create sequence zaehler_der_tabelle_xy
       increment by 1 start with 1 cache 2;

rem Jetzt die eigentliche Tabelle

CREATE TABLE xy (
        id_xy NUMBER(20,0) PRIMARY KEY,
        bla_xy VARCHAR2(4000)
);

rem Nun ist noch ein Trigger vonnöten, der
rem die neue Id von der Sequence übergeben
rem bekommt und vor dem insert diesen Wert
rem auf die entsprechende Spalte überträgt:

CREATE TRIGGER trigger_primary_key BEFORE INSERT ON xy
       REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW
Begin
select zaehler_der_tabelle_xy.nextval into :NEW.id_xy from DUAL;
End;
/

Bei jedem insert wird nun der Wert von id_xy automatisch hochgesetzt. Zu beachten ist, dass es besser ist, für jede Tabelle eine eigene Sequence zu erstellen, denn sonst müssen sich alle Tabellen die fortlaufenden Zahlen teilen.

Alternativ kann auch ohne Trigger gearbeitet werden und die nächste Zahl per Hand selektiert werden:

$stmt=OCIParse($conn, "SELECT zaehler_der_tabelle_xy.nextval FROM DUAL");
OCIExecute($stmt);
OCIFetch($stmt);
$nextid=OCIResult($stmt, "NEXTVAL");
hosted by
schlund + partner

Valid HTML 4.01! Valid CSS!

18.5. Gibt es auto_increment unter Oracle?
http://www.dclp-faq.de/q/q-oracle-inkrement.html
de.comp.lang.php FAQ | (c) Copyright 2000-2003 Das dclp-FAQ-Team