programmera.net -> oracle -> normal för utskrift | info@programmera.net |
Sekvenser i Oracle
1. Syftet med sekvenser 2. CREATE SEQUENCE 3. Hämta värden från en sekvens 4. Exempel på en cyklisk sekvens 5. DROP SEQUENCE |
1. Syftet med sekvenser
Med sekvenser kan man generera unika heltal som man vanligtvis placerar i en kolumn. Fördelen med unika heltal är att de kan användas för att identifiera en rad i tabellen och därför passar bra som primärnyckel för tabellen (se
Restriktioner ).
2. CREATE SEQUENCE
En sekvens skapas med kommandot:
Sekvensnamnet väljer du själv, kanske något som börjar med "SEQ_". Parameterlistan kan innehålla någon eller alla av följande parametrar:
SQL> CREATE SEQUENCE sekvensnamn parameterlista;
Parameter Default Beskrivning STARTS WITH n 1 n är första värdet som genereras av sekvensen. INCREMENTS BY n 1 n är hur många heltal man ska gå framåt när nästa heltal ska returneras. n kan vara negativt. MINVALUE n NOMINVALUE Minsta värde som sekvensen kan ha. Som default finns ingen begränsning. MAXVALUE n NOMAXVALUE Största värde som sekvensen kan ha. Som default finns ingen begränsning. CYCLE - Om du vill att värdena som genereras ska börja om i en loop efter att de nått maximum (eller minimum) ska du ha med parametern CYCLE. För att CYCLE ska fungera måste du definiera ett MAXVALUE (får ej vara NOMAXVALUE) och ett MINVALUE (får ej vara NOMINVALUE). CACHE n 20 Hur många tal som ska hämtas åt gången från sekvensen. Ett högt tal förbättrar prestandan. ORDER NOORDER Om denna parameter finns med kommer sekvensen att tilldela värden till förfrågningarna i samma ordning som förfrågningarna anländer. Denna funktion kostar litet i prestanda, därför är den avstängd per default.
Låt oss säga att vi vill skapa en sekvens "seq_my_own" som:
I detta fall duger defaultvärdena bra; sekvensen skapas så här:
SQL> CREATE SEQUENCE seq_my_own;
3. Hämta värden från en sekvens
Det finns två sätt att hämta värden ur sekvensen "seq_my_own":
4. Exempel på en cyklisk sekvens
Följande sekvens är ett exempel på en cyklisk sekvens:
Sekvensen "countdown_20" börar räkna från 20 och minskar tills den når 0, då börjar den om från 20 igen.
SQL> CREATE SEQUENCE countdown_20;
STARTS WITH 20
INCREMENT -1
MAXVALUE 20
MINVALUE 0
CYCLE
CACHE 2
ORDER;
5. DROP SEQUENCE
Man tar bort sekvensen "seq_my_own" med kommandot:
SQL> DROP SEQUENCE seq_my_own;