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:
SQL> CREATE SEQUENCE sekvensnamn parameterlista;
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:

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:

  • Börjar räkna från 1.
  • Ökar med 1 för varje hämtat tal.
  • Inte har någon övre gräns.
  • Har bra prestanda.
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":

  1. seq_my_own.CURVAL: Returnerar nuvarnade värde utan att räkna upp sekvensen.
  2. seq_my_own.NEXTVAL: Räknar upp sekvensen och returnerar det nya värdet.

4. Exempel på en cyklisk sekvens

Följande sekvens är ett exempel på en cyklisk sekvens:
SQL> CREATE SEQUENCE countdown_20;
	STARTS WITH 20
	INCREMENT -1
	MAXVALUE 20
	MINVALUE 0
	CYCLE
	CACHE 2
	ORDER;
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.

5. DROP SEQUENCE

Man tar bort sekvensen "seq_my_own" med kommandot:
SQL> DROP SEQUENCE seq_my_own;