Autoincrement: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
Zeile 2: Zeile 2:
  
 
Erst wird eine Sequenz erzeugt
 
Erst wird eine Sequenz erzeugt
CREATE SEQUENCE testtable_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE;
+
<code=sql>CREATE SEQUENCE testtable_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE;</code=sql>
  
 
Anschließend wird diese mit einem Trigger auf die Tabelle gelegt. Dieser erzeugt bei jedem Einfügen den nächsten Zahlenwert.
 
Anschließend wird diese mit einem Trigger auf die Tabelle gelegt. Dieser erzeugt bei jedem Einfügen den nächsten Zahlenwert.
 +
<code=sql>
 
  CREATE OR REPLACE TRIGGER testtable_inc_trigger  
 
  CREATE OR REPLACE TRIGGER testtable_inc_trigger  
BEFORE INSERT ON testtable FOR EACH ROW
+
  BEFORE INSERT ON testtable FOR EACH ROW
BEGIN
+
    BEGIN
SELECT testtable_seq.NEXTVAL INTO :NEW.id FROM DUAL;
+
    SELECT testtable_seq.NEXTVAL INTO :NEW.id FROM DUAL;
END;
+
    END;
 
+
</code=sql>
 
[[Kategorie:SQL]]
 
[[Kategorie:SQL]]
 
[[Kategorie:Oracle]]
 
[[Kategorie:Oracle]]

Version vom 11. März 2008, 20:19 Uhr

Da es bei Orcale kein Auto Increment wie bei MySQL oder einen extra Datentyp wie bei PostgreSQL (SERIAL), muss hier ein Umweg über Sequenzen gegangen werden.

Erst wird eine Sequenz erzeugt <code=sql>CREATE SEQUENCE testtable_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE;</code=sql>

Anschließend wird diese mit einem Trigger auf die Tabelle gelegt. Dieser erzeugt bei jedem Einfügen den nächsten Zahlenwert. <code=sql>

CREATE OR REPLACE TRIGGER testtable_inc_trigger 
  BEFORE INSERT ON testtable FOR EACH ROW
   BEGIN
    SELECT testtable_seq.NEXTVAL INTO :NEW.id FROM DUAL;
   END;

</code=sql>