Auto-increment in oracle (Sequence)

edit | delete

Autor: Vilma Plum

eingetragen: Mittwoch, 02. September 2009 um 15:52 Uhr (36/2009 Kalenderwoche)

geändert: Dienstag, 04. Februar 2020 um 15:03 Uhr (6/2020 Kalenderwoche)

Keywords: autoincrement ID sequence lastSequenceId()

Kategorien: PHP-ZF, DB: Oracle,

Text:

Oracle bietet leider nicht so komfortable Optionen an um eine auto-increment-Spalte für den Primary Key zu erzeugen wie andere DB-Systeme. Hierzu sind einige händische Einträge vorzunehmen.


Tabelle erzeugen mit der PK-Spalte.


Sequenz erzeugen (sinnige Namensgebung; über select sequencename from usersequences;
select triggername from usertriggers;
können bestehende sequenznamen abgefragt werden).


Trigger erzeugen (sinnige Namensgebung).


Vorsicht bei der Bennutzung in ZendFramework:
wie auch an anderer Stelle schon beobachtet, erlaubt ZendFramework nicht das zusammensetzen von Namen (heri der Sequenz) im Methodenaufruf.
So führte lastSequenceId(SCHEMADB.'.SNWRID') zu einer Fehlermeldung, da der Name des Schemas einfach ignoriert wurde; hingegen war
$seq = SCHEMADB.'.SNWRID';
lastSequenceId($seq); erfolgreich

Quellcode:  

Ein Beispiel:
create table test (id number, testdata varchar2(255)); 


create sequence test_seq 
start with 1 
increment by 1 
nomaxvalue;

create trigger test_trigger
before insert on test
for each row
begin
select test_seq.nextval into :new.id_test from dual;
end;
/


insert into test values(test_seq.nextval, 'eins');