CATEGORII DOCUMENTE |
CREAREA SI UTILIZAREA SECVENTELOR - ORACLE
Acest paragraf descrie cum se poate indexa o tabela pentru a imbunatati timpul de raspuns in cazul unei interogari.
Crearea si utilizarea accesului secvential este de asemenea discutata (aceasta permite atribuirea automata de numere de secventa unice in cadrul unei aplicatii.)
In server-ul Oracle, generatorul de numere de
secventa poate fi utilizat pentru a genera automat numere de secventa pentru
rinduri in cadrul tabelelor. De exemplu se poate
folosi generatorul pentru a produce cheii primare unice.
Pentru a genera automat numere de secventa, trebuie sa definiti o secventa
folosind comanda CREATE SEQUENCE. Sintaxa este urmatoarea:
CREATE SEQUENCE [user.] sequence_name
[ increment by n]
[ start with n]
[ maxvalue n | nomaxvalue ]
[ minvalue n | nominvalue ]
Toti parametrii comenzii sunt optionali si au urmatoarea semnificatie:
Urmatoarea comanda creaza o secventa pentru coloana DEPTNO a
tabelei DEPT.
CREATE SEQUENCE dept_sep
INCREMENT BY 10
START WITH 10
MAXVALUE 10000;
Dupa ce o secventa a fost creata ea poate fi folosita
pentru a genera numere unice de secventa.
NEXTVAL este utilizata pentru a extrage numere de secventa succesive dintr-o secventa specificata. Cind se acceseaza NEXTVAL on nou numar de secventa este generat.
SELECT dept_seq.NEXTVAL
FROM SYS.DUAL ;;
NEXTVAL
10
SELECT dept_seq.NEXTVAL
FROM SYS.DUAL ;;
NEXTVAL
20
Prima valoare obtinuta este 10 si aceasta se
incrementeaza apoi cu pasul 10.
Nota:
NEXTVAL este foarte folositoare in comenzi DML. De exemplu cind se completeaza o tabela se poate folosi o secventa
pentru a produce valori unice pentru coloana cu cheii primare a tabelei. Exemplul
urmator foloseste secventa dept_seq pentru a adauga
cheii primare unice in tabela DEPT.
INSERT INTO DEPT
VALUES
(dept_seq.NEXTVAL 'ACCOUNTING', `
1 record created
SQL> SELECT * FROM DEPT;
DEPTNO DNAME LOC
----- ----- ---- ----- ----- --------
10 ACCOUNTING
De exemplu, o modalitate obisnuita de implementare este de a forta fiecare tranzactie sa blocheze tabela cu numarul de secventa sa incrementeze secventa si apoi sa elibereze resursa. In aceasta implementare, numai un singur numar de secventa poate fi generat la un moment dat. Generatorul de numere de secventa ORACLE permite generarea simultana a multiple numere de secventa de catre useri diferiti.
Cind un astfel de numar este generat, secventa este incrementata indiferent de tranzactiile in desfasurare. Daca doi useri acceseaza aceeasi secventa in acelasi timp, atunci fiecare user poate sa obtina eroare deoarece numere de secventa sunt de asemenea generate de al doilea user. Doi useri nu vor genera niciodata acelasi numar de secventa utilizind aceiasi secventa. Numere de secventa pot fi 'sarite' daca un user nu-si termina o tranzactie sau daca aceasta sfirseste in mod anormal.
Pentru a accesa un numar de secventa care tocmai a fost generat (numarul de secventa curent ) se foloseste pseudo-coloana CURRVAL. CURRVAL reprezinta ultima valoare intoarsa unui program. Cind se adreseaza NEXTVAL pentru o secventa data, numarul de secventa curent este plasat in CURRVAL. NEXTVAL trebuie folosit pentru a genera numere de secventa in sesiunea curenta a unui user, inainte de a putea adresa CURRVAL.
INSERT INTO DEPT_HISTORY
VALUES (dept_seg.CURRVAL, 'ACCOUNTING' , `
1 record created.
SQL> SELECT * FROM DEPT_HISTORY
DEPTNO DNAME LOC
------------ ----- ----- -------
10 ACCOUNTING
NEXTVAL si CURRVAL pot fi folosite in cadrul:
NEXTVAL si CURRVAL nu pot fi folosite:
Secventele sunt tratate in mod similar cu tabelele si pot fi
modificate sau abandonate. Proprietarul unei
secvente poate de asemenea atribui privilegii si altor useri asupra secventei.
Se foloseste comanda ALTER SEQUENCE pentru a modifica o secventa existenta.
AKTER SEQUENCE [user.]sequence_name
[INCREMENT BY n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
De exemplu pentru a seta o noua valoare maxima pentru secventa dept_deq,
ALTER SEQUENCE dept_seq
maxvalue 100000
Pentru a modifica o secventa este necesar sa fii proprietarul eu sau sa ai
dreptul DBA sau sa fi primit dreptul ALTER pentru secventa din partea
proprietarului.
Nota:
Proprietarul unei secvente poate atribui altor
useri drepturi de ALTER sau SELECT asupra secventei, si WITH GRANT OPTION
ramine valida.
Detalii in UNIT-ul 17.
Folositi comanda DROP SEQUENCE
pentru a sterge o definitie de secventa.
Sintaxa este:
DROP SEQUENCE [user.]sequence_namel
Trebuie sa fii proprietarul secventei sau sa ai dreptul de DBA pentru a o
sterge.
Pentru
a sterge secventa dept_seq, tastati:
DROP SEQUENCE sept_seq;
Toate definitiile secventelor sunt memorate intr-o tabela de secvente. Pentru a vedea secventele la care ai access, interogheaza baza de date urmarind USER_SEQUENCES sau ALL_SEQUENCES.
Indexarea in sistemul ORACLE are doua principale scopuri:
Pentru a accelera afisarea liniilor cu o cheie particulara.
Pentru a forta unicitatea valorilor din coloane, de obicei valorile cheii principale.
Folosirea indexarii este puternic recomandata pentru a obtine performante mai
bune. Retineti ca ORACLE 7 creiaza automat INDEXI pentru coloanele care au
setate PRIMARY KEY sau UNIQUE.
Proprietarul unei tabele poate crea indexi pentru ea. Orice user ORACLE care detine dreptul de access INDEX poate creea un index.
Odata creat, ORACLE va folosi index-ul ori de cite ori este posibil pentru a accelera accesul datelor. Acest lucru se face in mod automat si deobicei nu este necesara interventia userului care poate sa nu stie de existenta acestul index.
ORACLE foloseste arbori B pentru indexare. Timpul de access este independent de volumul de date indexat. Fiecare index construit de ORACLE contine un numar de pagini memorate in arbore. Fiecare pagina contine un numar de cheii. ORACLE gestioneaza aceasta structura la fel cum sunt inserate sau sterse linii. Valorile NULL nu sunt memorate in index, si din fericire nu ocupa spatiu. -------- Aici se afla poza de la pagina 18-9 --------
TYPE DESCRIERE
UNIQUE asigura ca valorile din coloanele specificate sunt unice
NON UNIQUE asigura obtinerea cit mai repede a rezultatului (implicit)
SINGLE COLUMN exista numai o coloana in index
CONCATENATED mai mult de 16 coloane specificate in index.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1082
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved