auto_increment mit Oracle

7 11 2007

Im MySQL gibt es das nette Attribut auto_increment, mit dem sich automatisch eindeutige IDs für neu eingefügte Zeilen vergeben lassen. Oracle bietet nichts vergleichbares, mit ein wenig Trickserei kann man sich diese Funktion aber selbst basteln.

Ich lege mir eine Test-Tabelle an mit einem Feld ID, das mit dem automatisch hochgezählten, numerischen Wert gefüllt werden soll. Außerdem noch eine Spalte TEXT, die von Hand gefüllt wird.

SQL> CREATE TABLE table_autoinc(
	id number,
	text varchar2(100)
);

TABLE created.

Jetzt benötige ich eine Sequence, die mit dem Wert 1 beginnend immer einen um 1 erhöhten Wert übergibt.

SQL> CREATE sequence sequence_autoinc
	start WITH 1
	increment BY 1
	nomaxvalue;

Sequence created.

Schließlich wacht ein Trigger über die Tabelle, der vor jedem INSERT angestartet wird und den Wert der Sequenz in das Feld ID einfügt.

SQL> CREATE TRIGGER trigger_autoinc
	before INSERT
	ON table_autoinc
	FOR each row
	begin
		SELECT sequence_autoinc.NEXTVAL INTO :new.id FROM dual;
	end;
/

TRIGGER created.

Nun wird das Feld TEXT mit Werten befüllt. Wie zu sehen ist, bleibt die ID hier unberücksichtigt.

SQL> INSERT INTO table_autoinc(text) VALUES ('text 1');

1 row created.

SQL> INSERT INTO table_autoinc(text) VALUES ('text 2');

1 row created.

SQL> INSERT INTO table_autoinc(text) VALUES ('text 3');

1 row created.

Wie erwartet bzw. erhofft hat der Trigger zugeschlagen und den autoincrement-Wert für die ID selbst vergeben.

SQL> SELECT * FROM table_autoinc;
ID         TEXT
------- ----------
1          text 1
2          text 2
3          text 3

3 rows selected.
Advertisements

Aktionen

Information

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s




%d Bloggern gefällt das: