Oracle
 sql >> Datenbank >  >> RDS >> Oracle

12c Spalte automatisch mit Sequenzwert füllen

Im gestrigen Blogbeitrag habe ich über das Erstellen einer Tabelle mit einem IDENTITY-Wert geschrieben. Aber die neue Funktion von Oracle 12c, die mir besser gefällt, erlaubt es, dass eine Sequenz der Zahlengenerator für den Standardwert einer Spalte ist. Sehen Sie sich dieses Beispiel an, um zu sehen, was ich meine:

SQL> create sequence test_seq;
Sequence created.
SQL> create table test_tab (id number default test_seq.NEXTVAL, val varchar2(20));
Table created.

Wie Sie sehen können, enthält die ID-Spalte meiner Testtabelle eine DEFAULT-Klausel, die das NEXTVAL der von mir erstellten Sequenz verwendet. Lassen Sie uns nun einige Daten in die Tabelle einfügen.

SQL> insert into test_tab (val) values ('first row');
1 row created.
SQL> insert into test_tab (val) values ('second row');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test_tab;
ID VAL
---------- --------------------
1 first row
2 second row

Wie Sie sehen können, wurde die Oracle-Sequenz verwendet, um die Werte aufzufüllen. Auf den ersten Blick würde dies dem Datenmodellierer das Leben erleichtern, da er nicht den traditionellen Weg gehen müsste, einen Trigger zu codieren, um das NEXTVAL zu generieren und diesen Wert der Spalte zuzuweisen. Dieses automatische Auffüllen des Spaltenwerts mit der Sequenz funktioniert jedoch nur, wenn Sie keinen Wert angeben, wenn Sie ihn standardmäßig belassen. Wenn Sie den Wert explizit angeben, verwendet diese Methode die Sequenz nicht. Ein richtig codierter Trigger würde die Verwendung des nächsten Werts der Sequenz für die Spalte erzwingen.