Sequencing - o structură pentru a genera valori unice întregi. Doar o singură sesiune poate solicita valoarea următoare și astfel crește contorul. Prin urmare, toate valorile generate vor fi unice.
Mecanisme; de secvențe este independentă de tabele, mecanism și tranzacții de blocare. Acest lucru înseamnă că secvențierea poate genera mii de valori unice într-un minut - mult mai rapid decât metodele de eșantionare de actualizare a datelor și de a confirma modificările.
Figura 7-6 prezintă modul în care două sesiuni este selectat valori de secvențiere SEQ1. Vă rugăm să rețineți că fiecare interogare SEQ1.NEXTVAL generează un număr unic. Valoarea comenzii este creată, în funcție de timpul de tratament, iar valoarea crește la nivel global, mai degrabă decât pentru o singură sesiune.

crearea de secvențe
Sintaxa completă pentru a crea o secvențiere
CREATE SECVENȚE [schema.] Sequencename
[Incrementat cu numărul]
[START WITH numărul]
[Numărul MAXVALUE | NOMAXVALUE]
[Numărul MINVALUE | NOMINVALUE]
[Numărul CACHE | nocache]
Crearea de secventiere poate fi foarte simplu. De exemplu, secvențare utilizată în Figura 7-6 a fost creat cu comanda
crea seq1 secvență;
Listă de opțiuni disponibile

Directiva CICLU este foarte rar folosit, deoarece vă permite să generați duplicate. În cazul în care succesiunea este utilizată pentru a genera valori-cheie primare, CICLU are sens numai să aibă o funcție într-o bază de date care elimină înregistrările vechi mai repede decât secvențierea generează noi.
Caching valori critice pentru performanță. Prelevarea de probe de secventiere poate fi efectuată doar o singură sesiune, la un moment dat. Mecanismul de generare a valorilor ochent eficiente: este mult mai rapid decât blocajul liniei, rândurile de actualizare, sau gestionarea tranzacției. Dar chiar și în ciuda acestui fapt, eșantion secvențierea sesiunilor poate fi un punct de concurență. Directiva CACHE permite Oracle pentru a genera un bloc de camere. Valorile pregenerat sunt selectate mai repede decât generarea cererii.
Numărul implicit de valori în cache-ul este doar 20. Experiența arată că acest lucru nu este de obicei suficient. Dacă cererea dumneavoastră selectează din secvența de 10 de ori pe secundă, apoi setați valoarea cache la 50 mii. Nu fi timid despre acest lucru
Utilizarea secvențelor
Pentru a utiliza sesiune de secventiere poate solicita următoarele valori folosind un pseudocoloană NEXTVAL, ceea ce face secvențierea pentru a crește valoarea, sau pentru a solicita ultima valoare (curentă) pentru sesiunea curentă folosind pseudocoloană CURRVAL. Valoarea NEXTVAL să fie unice la nivel global: fiecare sesiune care solicită ca această valoare va primi diferite rezultate, la scară mărită pentru fiecare solicitare. Valoarea CURRVAL este constantă pentru fiecare sesiune, până când există o nouă cerere de NEXTVAL. Nu există nici o modalitate de a ști ce ultima valoare a fost segenrirovano secvențiere: puteți selecta doar următoarea valoare prin apelarea NEXTVAL, și pentru a găsi ultima utilizat pentru sesiunea folosind CURRVAL. Dar nu puteți găsi ultima valoare generată.
CURRVAL unei secvențe este ultima valoare emisă pentru sesiunea curentă, nu neapărat ultima valoare emise. Nu puteți selecta CURRVAL până după selectarea NEXTVAL.
Un exemplu tipic de secventiere este de a genera valorile cheie primare. Exemplul următor utilizează ORDER_SEQ secvențiere pentru a genera valori unice ale ordinea numerelor de secvență și LINE_SEQ pentru a genera o valoare unică pentru linia de comandă. Inițial creat de secvențiere (o dată)
a crea secvență order_seq începe cu 10;
a crea secvență line_seq începe cu 10;
Apoi, comanda și punctele de ordine se introduce într-o singură tranzacție
inserați în ordine de (ORDER_ID, ORDER_DATE, CUSTOMER_ID)
inserați în order_items (ORDER_ID, order_item_id, product_id)
inserați în order_items (ORDER_ID, order_item_id, product_id)
Prima comandă INSERT generează o comandă unică a numărului ORDER_SEQ secventiere pentru client cu numărul 1000. Apoi, a doua și a treia comenzi INSERT adăuga două elemente utilizând valoarea curentă a ORDER_SEQ ordine de secvențiere ca valoare pentru elementele de conectare externe comandă la cheia comandă și următoarea secvențierea valorii LINE_SEQ pentru a genera un unic identificatorul fiecărui element. În cele din urmă, tranzacția este confirmată.
Secvențierea nu este legat de orice masă. Exemplul anterior poate fi utilizat pentru a genera o secvențiere valori-cheie primare pentru tabelul de comenzi, iar elementele de masă ordine.
COMMIT nu este necesară pentru a crește contra podvterzhdeniya: creștere contor are loc o dată pentru totdeauna și este vizibil pentru toată creșterea timpului. Nu puteți anula creșterea contra. Secvența este actualizată indiferent de mecanismul tranzacțiilor de management. Prin urmare, va exista întotdeauna numerele care lipsesc. Pauzele pot fi mari în cazul în care baza de date este repornită și directiva CACHE este utilizată pentru contor. Toate camerele care au fost generate și nu sunt selectate vor fi pierdute atunci când opriți baza de date. După următoarea pornire valoarea curentă este generată ultima, nu este utilizat recent. Astfel, pentru fiecare 20 implicit a reporni pierderea cauze de 20 de numere.
Dacă BI a decis că pot exista lacune în numerele de secventa, atunci este posibil să se genereze un număr unic pe de altă parte. Pentru exemplu, comenzile anterioare numărul de ordine curente pot fi stocate în tabelul cu o valoare inițială de 10
crea current_on tabel (numărul ORDER_NUMBER);
inserați în valori current_on (10);
Apoi, codul pentru a crea ordinea va fi după cum urmează
actualizare current_on set ORDER_NUMBER = ORDER_NUMBER + 1;
inserați în ordine de (ORDER_NUMBER, ORDER_DATE, CUSTOMER_NUMBER)
Valorile ((selectați ORDER_NUMBER de la current_on), SYSDATE, '1000');
Acest lucru va lucra în ceea ce privește generarea unui număr unic de ordine, și ca fiind creșterea numărului de ordine are loc în interiorul unei tranzacții care creșterea poate fi anulată în cazul nebhodimo: nu vor exista lacune în secvența, până când ordinul nu vor fi șterse în mod deliberat. Dar este mult mai puțin eficace decât utilizarea secvențelor, deoarece codul este slab productiv într-un mediu multiutilizator. În cazul în care mai multe sesiuni încercați pentru a bloca și de a crește valoarea curentului în linia care conține numărul de ordine, aplicația va funcționa în continuare se blochează Posklku va aștepta rândul lor.
acesta poate fi modificat după crearea de secventiere. Sintaxa comenzii este următoarea
ALTER SEQUENCE sequencename
[Incrementat cu numărul]
[START WITH numărul]
[Numărul MAXVALUE | NOMAXVALUE]
[Numărul MINVALUE | NOMINVALUE]
[Numărul CACHE | nocache]
ALTER comandă este același ca și comanda CREATE cu o singură excepție: nu se poate seta valoarea inițială. Dacă doriți să actualizați valoarea inițială - singura cale este de a elimina succesiunea și de a crea unul nou. Pentru a modifica valoarea CACHE pentru a îmbunătăți performanța, aveți posibilitatea să executați următoarea comandă
modifica secvența order_seq cache de 1000;
Pentru a elimina secvențierea rula comanda
picătură order_seq secvență;