I gårsdagens blogindlæg skrev jeg om at lave en tabel med en IDENTITY-værdi. Men den nye Oracle 12c-funktion, som jeg bedre kan lide, tillader en sekvens at være talgeneratoren for standardværdien af en kolonne. For at se hvad jeg mener, se på dette eksempel:
SQL> create sequence test_seq; Sequence created. SQL> create table test_tab (id number default test_seq.NEXTVAL, val varchar2(20)); Table created.
Som du kan se, har ID-kolonnen i min testtabel en DEFAULT-klausul, som bruger NEXTVAL for den sekvens, jeg oprettede. Lad os nu indsætte nogle data i tabellen.
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
Som du kan se, blev Oracle-sekvensen brugt til at udfylde værdierne. Ved første øjekast ville dette gøre livet lettere for datamodellereren, fordi man ikke behøver at gå den traditionelle vej med at kode en trigger for at generere NEXTVAL og tildele denne værdi til kolonnen. Denne autopopulation af kolonneværdien med sekvensen virker dog kun, hvis du ikke angiver en værdi, hvis du lader den være standard. Hvis du udtrykkeligt angiver værdien, vil denne metode ikke bruge sekvensen. En trigger, hvis den er kodet korrekt, vil tvinge brugen af sekvensens næste værdi for kolonnen.