Tipps & Tricks: Juli 2013 Bereich: SQL Erstellung: 07/2013 MP Versionsinfo: 12.1 Letzte Überarbeitung: 07/2013 MP Autoincrement Spalten in 12c (Identity) Lange haben wir darauf gewartet, endlich ist sie da! Oracle 12c! Das "c" steht für Cloud. Wir wollen in dieser Reihe einige neue Features vorstellen, die wir natürlich auch in unserem Oracle 12c Kurs ausführlich besprechen. Oracle 12c: Identity Spalten Der SQL Server kann es schon seit einiger Zeit, Oracle nun auch ab Version 12c. Eine Primärschlüsselspalte kann automatisch mit einem Wert gefüllt werden. Einfachster Fall, Sequenz soll bei 1 starten, Schrittweite 1: CREATE TABLE t ( id NUMBER GENERATED AS IDENTITY PRIMARY KEY, text VARCHAR2(10)); INSERT INTO t (text) VALUES ('X'); SELECT * from t; ID TEXT -- ---------1 X Oder etwas aufwendiger mit Startwert 100 und Schrittweite 10 (aber ohne Primärschlüssel): CREATE TABLE t ( id NUMBER GENERATED BY DEFAULT AS IDENTITY (START WITH 100 INCREMENT BY 10), text VARCHAR2(10)); Möchten Sie eine bestehende Identity löschen ? ALTER TABLE t MODIFY (id DROP IDENTITY); Auch ein nachträgliches Setzen der Identity ist möglich, mit neuer Spalte: ALTER TABLE T ADD (ID_NEU NUMBER GENERATED AS IDENTITY (START WITH 100)); Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 1 von 3 Wenn ein bestehender Sequenzwert um 100 erhöht werden soll, kann man die Identity auf der Spalte löschen und einfach neu setzen. Sie können pro Tabelle nur eine Identity Spalte festlegen. Wird die Identity Klausel verwendet, dann muss der Datentyp in der Spaltendefinition numerisch sein. Ein benutzerdefinierter Datentyp kann nicht spezifiziert werden. Sie müssen nicht zwingend eine Primärschlüsselspalte für die Identity verwenden. Das Setzen eines Defaultwertes in der Spaltendefinition ist bei der Verwendung der Identity Klausel nicht erlaubt. Wird die Identity Klausel verwendet, so wird automatisch ein NOT NULL Constraint auf die Spalte gesetzt. Wie funktionierts ? Oracle legt eine Sequenz im Schema der Tabelle an (z. B. mit Namen ISEQ$$_12345 und als Default mit Cache=20). Einen Insert-Trigger haben wir jedoch nicht entdeckt. Sie können feststellen, welche Tabelle Identity Spalten verwendet: SELECT owner, table_name, has_identity FROM all_tables WHERE table_name='T'; OWNER TABLE_ HAS_IDENTITY ------ ------ -----------SCOTT T YES Oder wenn Sie wissen wollen, welche Spalte vom Typ Identity ist: SELECT owner,table_name, column_name, identity_column FROM all_tab_columns WHERE table_name='T'; Ausführliche Optionssyntax: ( START WITH ( <int> | LIMIT VALUE ) | INCREMENT BY <int>| ( MAXVALUE integer | NOMAXVALUE ) | ( MINVALUE integer | NOMINVALUE ) | ( CYCLE | NOCYCLE ) | ( CACHE integer | NOCACHE ) | ( ORDER | NOORDER ) } Komplexes Beispiel: CREATE TABLE T (ID NUMBER GENERATED AS IDENTITY (START WITH 1000 INCREMENT BY 10 MAXVALUE 10000 CYCLE CACHE 1000 ORDER), text VARCHAR2(10)); >100 weitere neue Funktionen der Oracle 12c Version lernen Sie in unserem Oracle 12c Neuerungen Kurs kennen - schauen Sie doch einfach mal vorbei !! Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 2 von 3 Hinweis In den kommenden Tagen, Wochen, Monaten werden wir noch weitere interessante News betreffend 12c zur Verfügung stellen. Diese finden Sie in unserer Rubrik Oracle Neuerungen zu 12c Release 1. Also immer mal wieder schauen, ob es etwas Neues gibt!! ;-) Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 3 von 3