Académique Documents
Professionnel Documents
Culture Documents
Les 13
Les 13
Obiective:
Scopul lectiei:
În aceasta lectie, se va prezenta crearea si modul de utilizare a catorva dintre cele mai folosite
obiecte ale bazelor de date. Acestea includ secvente, indecsi si sinonime.
Obiect Descriere
Tabel Unitatea principala de stocare a datelor; alcatuita din linii si
coloane
Vizualizare Reprezentare logica a seturilor de date din una sau mai multe
baze de date
Secventa Generator ale valorii cheii primare
Index Îmbunatateste performantele anumitor interogari
Sinonim Un alt nume dat pentru un obiect
1
Ce este o secventa?
Un generator de secvente poate fi folosit pentru a crea automat valori pentru liniile din tabel. O
secventa este un obiect creat de un utilizator ce poate fi folosit de unul sau mai multi utilizatori.
Secventa este generata si incrementata (sau decrementata) de o procedura interna Oracle. Acest
obiect înlocuieste partea de cod, fiind economisit timpul necesar implementarii rutinei de generare a
secventei.
Numerele secventei sunt retinute si generate independent de tabelele de date existente. Prin
urmare, aceeasi secventa poate fi folosita în mai multe baze de date.
INCREMENT BY n specifica intervalul dintre numerele secventei, unde n este un întreg. Daca
aceasta clauza lipseste, n este implicit 1
CYCLE | NOCYCLE specifica daca secventa continua sa genereze valori dupa ce s-a atins valoarea
maxima sau minima, sau nu genereaza în continuare nici o valoare.NOCYCLE
este optiunea implicita
CACHE n | NOCACHE specifica serverului Oracle pentru cate valori sa aloce spatiu în memorie.
Implicit este 20
2
Crearea unei secvente
Crearea unei secvente numita DEPT_DEPTNO pentru a fi folosita drept cheie primara a bazei de
date DEPT.
Nu se foloseste optiunea CYCLE
Confirmarea secventelor
Confirmarea secventelor
Odata creata propria secventa, ea este înscrisa în dictionarul de date. Odata ce secventa devine
obiect al bazei de date, ea poate fi identificata cu ajutorul dictionarului de date USER_OBJECTS, care
este de asemenea un tabel al bazei de date.
De asemenea, se pot confirma setarile unei secvente prin selectarea acestora din dictionarul de
date USER_SEQUENCES.
Odata creata secventa, ea poate fi folosita pentru a genera numere folosite ulterior în tabele.
Referirea valorilor secventei se face cu NEXTVAL si CURRVAL.
Pseudocoloana NEXTVAL este folosita pentru a extrage numere succesive dintr-o anumita
secventa. Referirea lui NEXTVAL se face împreuna cu numele secventei. La referirea lui
sequence.NEXTVAL, un nou numar al secventei este generat iar numarul curent este plasat în
CURRVAL.
Pseudocoloana CURRVAL este folosita pentru a referi numarul unei secvente pe care
utilizatorul abia l-a creat. NEXTVAL trebuie folosita pentru a genera un numar înainte ca referirea lui
CURRVAL sa aiba loc. Referirea lui CURRVAL se face împreuna cu numele secventei. Cand
sequence.CURRVAL este referita, este afisata ultima valoare returnata spre acel proces al
utilizatorului.
Pentru mai multe informatii, vezi Oracle Server SQL Reference, Release 8.0, “Pseudocolomns” si
“CREATE SEQUENCE”.
Utilizarea unei secvente
CURRVAL
--------------
91
Nota: Exemplul anterior presupune existenta unei secvente EMP_EMPNO pentru generarea de numere
noilor angajati.
Stocarea secventelor în memorie permite o accesare mai rapida a valorilor secventei. Stocarea
se realizeaza la prima referire a secventei. Fiecare cerere pentru urmatoarele valori este regasita în
secventa stocata. Dupa ce s-a folosit ultima secventa, urmatoarea cerere pentru secventa determina o
alta stocare a secventei în memorie.
Evitarea golurilor din secvente
Desi generatorul de secvente determina numere consecutive, fara goluri, aparitia golurilor se
petrece independent de rollback. De aceea daca se revine asupra aceleasi declaratii de secventa,
numarul este pierdut.
Un alt eveniment ce poate provoca goluri în secventa este o cadere a sistemului. Daca valorile
secventei sunt stocate în memorie, acestea se pierd daca are loc o cadere a sistemului.
Deoarece secventele nu sunt legate direct de bazele de date, aceeasi secventa poate fi folosita
pentru mai multe baze de date. Daca se întampla acest lucru fiecare baza de date poate contine goluri în
secventa.
Este posibila o vizualizare a urmatoarei valori disponibile pentru secventa, fara a o incrementa,
doar daca secventa a fost creata cu NOCACHE, prin interogarea bazei de date USER_SEQUENCES.
Schimbarea valorii incrementului, valorii maxime, minime, optiuni de ciclu sau de stocare.
Modificarea secventei
Daca se atinge MAXVALUE în cazul unei secvente, nu va mai fi atribuita nici o valoare în plus
secventei si se va primi o eroare ce va indica faptul ca secventa a atins valoarea MAXVALUE. Pentru a
putea folosi în continuare aceasta secventa, ea necesita o modificare cu ajutorul instructiunii ALTER
SEQUENCE.
Sintaxa
ALTER SEQUENCE sequence
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
unde: sequence este numele generatorului de secventa.
Modificarea o realizeaza numai cel care a creat secventa sau cel ce detine privilegiul ALTER.
Sunt afectate doar numerele ce urmeaza a fi generate.
Secventa trebuie întrerupta si recreata pentru a începe secventa cu un alt numar decat cel initial.
Sunt efectuate cateva validari.
Sfaturi:
Numai cel ce a creat o secventa sau cel ce detine un privilegiu ALTER pot modifica secventa.
Doar numerele ce urmeaza a fi generate sunt afectate de instructiunea ALTER SEQUENCE.
Numarul cu care începe secventa (cel din optiunea START WITH) nu poate fi modificat cu
ALTER SEQUENCE, secventa trebuie întrerupta si recreata pentru a reîncepe cu alt numar.
Sunt realizate cateva validari. De exemplu, nu poate fi fixata o noua valoare MAXVALUE care
este mai mica decat valoarea curenta a numarului generat de secventa.
Stergerea unei secvente din dictionarul de date folosind instructiunea DROP SEQUENCE
Odata stearsa, secventa nu mai poate fi referita
SQL> DROP SEQUENCE dept_deptno;
Sequence dropped.
Sintaxa
DROP SEQUENCE sequence;
unde: sequence este numele generatorului de secventa.
Ce este un index?
Un index este un obiect schema care îmbunatateste regasirea înregistrarilor folosind un pointer.
Indecsii pot fi creati explicit sau automat.
Un index furnizeaza un acces direct si rapid la înregistrarile unei baze de date. Scopul utilizarii
indecsilor este reducerea numarului de citiri/scrieri pe disc, prin folosirea unei cai indexate pentru a
localiza mai rapid datele. Indexul este automat folosit si întretinut de serverul Oracle. Odata creat
indexul, nu este necesara nici o interventie din partea utilizatorului.
Indecsii sunt logic si fizic si sunt independenti de bazele de date pe care le indexeaza. Acest
lucru înseamna ca indecsii pot fi creati sau stersi oricand fara nici un efect asupra bazelor de date sau a
altor indecsi.
Nota: Cand este sters un tabel, indecsii corespunzatori sunt de asemenea stersi.
Automat
- cand este definita o cheie primara (PRIMARY KEY) sau unica (UNIQUE KEY) în definitia
unui tabel.
Manual
- utilizatorii pot crea indecsi mecanic pentru a accelera accesul la înregistrarile bazelor de date.
Pot fi create doua tipuri de indecsi. Un tip îl reprezinta indexul unic. Serverul Oracle creeaza
automat acest index cand este definita o cheie primara sau una unica. Numele indexului este numele dat
acestui camp.
Alt tip de indecsi este indexul mecanic. De exemplu, se poate crea o cheie straina (FOREIGN
KEY) pentru a realiza o eficienta mai buna la interogari.
Mai multi indecsi într-o baza de date nu înseamna o optimizare a interogarilor. Fiecare operatie DML
ce se realizeaza într-o baza de date ce contine indecsi implica o actualizare a indecsilor. Cu cat sunt mai
multi indecsi asociati tabelului, cu atat va dura mai mult pana cand serverul Oracle va actualiza indecsii
dupa DML.
Confirmarea indecsilor
Exemplul urmator afiseaza toti indecsii creati anterior, numele campurilor afectate si unicitatea
în baza de date EMP.
Sinonime
Simplifica accesarea obiectelor prin crearea unui sinonim (un alt nume pentru un obiect anume).
Refera o baza de date detinuta de un alt utilizator.
Scurteaza numele lungi ale obiectelor.
În sintaxa:
PUBLIC creeaza un sinonim accesibil tuturor utilizatorilor.
synonym este numele sinonimului creat.
object identifica obiectul pentru care este creat sinonimul.
Sfaturi:
Obiectul nu trebuie sa fie continut în “package”.
Numele unui sinonim privat trebuie sa fie diferit de numele celorlalte obiecte detinute de acelasi
utilizator.
Exemplul anterior creeaza un sinonim pentru DEPT_SUM_VU pentru o referire mai rapida.
DBA poate crea un sinonim public accesibil tuturor utilizatorilor. Exemplul urmator creeaza un
sinonim public numit DEPT pentru baza de date DEPT a utilizatorului Alice:
Pentru stergerea unui sinonim se foloseste instructiunea DROP SYNONYM. Numai DBA poate sterge
un sinonim public.
SQL> DROP SYNONYM dept;
Synonym dropped.
Rezumat
Secvente
Generatorul de secvente poate fi folosit pentru a genera automat numere pentru înregistrarile bazelor de
date. Aceasta facilitate poate salva timp si reduce din codul necesar aplicatiei.
O secventa este un obiect al bazelor de date care poate fi folosit si de alti utilizatori în afara celui care a
creat-o. Informatii despre secvente pot fi gasite în baza de date USER_SEQUENCES.
Pentru a folosi o secventa, referirea ei se face cu pseudocampurile NEXTVAL si CURRVAL.
Referirea urmatorului numar din secventa prin sequence.NEXTVAL.
Returnarea numarului curent disponibil prin sequence.CURRVAL.
Indecsi
Indecsii sunt folositi pentru a optimiza interogarile.
Utilizatorii pot vizualiza definitiile indecsilor în USER_INDEXES.
Un index poate fi sters de cel care l-a creat sau de un utilizator cu privilegiul DROP ANY INDEX prin
instructiunea DROP INDEX.
Sinonime
DBA pot crea sinonime publice si utilizatorii pot crea sinonime private prin folosirea instructiunii
CREATE SYNONYM. Sinonimele reprezinta nume mai scurte sau nume alternative pentru obiecte.
Stergerea sinonimelor se realizeaza prin instructiunea DROP SYNONYM.
Lucrare practica
Se va crea o secventa pentru a fi folosita împreuna cu baza de date DEPARTMENT.
Se vor crea de asemenea indecsi impliciti si expliciti.
4. Sa se creeze un index neunic pentru campul FOREIGN KEY în baza de date EMPLOYEE.
5. Sa se afiseze indecsii si unicitatile ce exista în dictionarul de date pentru baza de date EMPLOYEE.
Fisierul creat se va numi p13q5.sql.