Sunteți pe pagina 1din 131

UNIVERSITATEA TEHNIC A MOLDOVEI

B. MIRONOV

GESTIONAREA BAZELOR DE DATE

ndrumar de laborator

Schema extern 1

Schema extern i
Schema conceptual Schema intern

Schema extern n

Chiinu 2001

Prezentul ndrumar de laborator se adreseaz studenilor facultii Calculatoare, Informatic i Microelectronic, care studiaz cursul aprofundat de "Baze de date", grupelor de studii n cadrul magistraturii, care studiaz limbajul SQL i n special sistemul Oracle. El poate fi consultat i de studenii altor faculti n cadrul cursurilor de informatic. Ciclul conine 11 lucrri de laborator, consacrate crerii i gestionrii bazelor de date relaionale. Fiecare lucrare este prefaat de un material amplu teoretic necesar pentru nelegerea principiilor de operare cu bazele de date. Lucrrile de laborator sunt axate pe sistemul Oracle considerat cel mai utilizat sistem de gestiune a bazelor de date relaionale din ntreaga lume.

Autor: conf. univ. dr. Bettin Mironov

Redactor responsabil: prof. univ. dr. hab. Teodor iianu

Recenzent: conf. univ. dr. Leonid Carcea

U.T.M., 2001
1

CUPRINS LUCRAREA DE LABORATOR NR. 1 Introducere n bazele de date relaionale 3 LUCRAREA DE LABORATOR NR. 2 Structuri logice de stocare a bazelor de date 11 LUCRAREA DE LABORATOR NR. 3. Proiectarea unei baze de date 19 LUCRAREA DE LABORATOR NR. 4 Tipuri de date. Tabele 1 25 LUCRAREA DE LABORATOR NR. 5. Crearea tabelelor 36 LUCRAREA DE LABORATOR NR. 6. Integritatea datelor 42 LUCRAREA DE LABORATOR NR. 7. Selectarea si ntreinerea datelor 54 LUCRAREA DE LABORATOR NR. 8. SQL (limbaj structurat de interogare) 63 LUCRAREA DE LABORATOR NR. 9. Reuniunile i uniunile 77 LUCRAREA DE LABORATOR NR. 10. Vederi 88 LUCRAREA DE LABORATOR NR. 11. Sigurana bazei de date 94 ANEXE Lista cuvintelor rezervate Oracle SQL: 122 Cuvintele rezervate pentru SQL*Plus. 127 Simboluri 129 Bibliografie 123

LUCRAREA DE LABORATOR Nr. 1


Introducere n bazele de date relaionale
Bazele de date relaionale n prezent sunt cele mai utilizate pentru modelarea i gestionarea ntreprinderilor. Modelul relaional de date este modelul cu cea mai larg acceptare si utilizare. Modelul de date relaional utilizeaz cuvntul relaional deoarece n acest model se pot construi cu uurin relaii ntre tabele multiple. Un model relaional are trei caracteristici eseniale: - structuri - obiecte definite care conin date i sunt accesibile utilizatorilor; - operaii - aciuni definite care manipuleaz datele sau obiectele schemei; - reguli - legi care reglementeaz cum i de ctre cine pot fi manipulate datele. O baz de date relaional este definit pur i simplu ca un model de date care este vizualizat de utilizatorii lui exclusiv sub forma unor tabele. Un tabel este o matrice bidimensional format din linii i coloane. Ori de cte ori sunt modificate date ntr-o baz de date, se modific i tabelul sau datele acestuia. n sfrit, ntr-o baz de date relaional, orice date care sunt rezultatul unei interogri sunt prezentate utilizatorului n format coloan-linie. Modelul de date relaional prezint urmtoarele avantaje fa de modelele de date tradiionale: - un model de date uor de neles i de vizualizat; - legi de integritate uor de neles i de dezvoltat, destinate protejrii datelor i structurilor; - spaiu de stocare a datelor i redundan reduse; - independena structurii logice a bazelor de date de modul de stocare fizic a datelor. n sistemele de baze de date relaionale se utilizeaz limbajul de interogare SQL (Structured Query Language - limbaj structurat de interogare). n 1985 dr. Codd a definit modelul relaional ca pe o colecie de tabele, el a stabilit urmtoarele 13 reguli, care definesc ce este o baz de date. 1. Toate informaiile din baza de date sunt reprezentate n mod explicit sub form de valori ntr-un tabel. 3

2. Toate datele individuale dintr-un tabel sunt ntotdeauna accesibile prin furnizarea numelui tabelului, a coloanei i a liniei. 3. Valorile nule sunt tipuri de date valide n baza de date relaional. Ele reprezint inexistena informaiilor. 4. Baza de date relaional reprezint descrierea bazei de date ntr-un format logic simplificat de genul tabelelor. 5. Modelul relaional poate suporta mai multe limbaje, ns SQL este limbajul principal de nterfaare. 6. Toate vederile sunt actualizabile, dac vederea curent este un tabel. 7. Modelul relaional trateaz toate relaiile de baz i relaiile derivate ca un singur operand pentru operaiile update (actualizare), insert (inserare) i delete (eliminare) efectuate asupra datelor, precum i asupra datelor recuperate. 8. Aspectele logice ale bazei de date sunt complet separate de aspectele fizice ale bazei de date. 9. Datele sunt conservate atunci cnd bazei de date i se aduc modificri ilogice. 10. Restriciile de integritate pentru o baz de date relaional sunt create n sublimbajul de baze de date (SQL) i sunt stocate n catalogul bazei de date i nu n aplicaiile individuale. 11. Distribuia datelor ctre programele de aplicaie are loc continuu. Distribuia datelor este procesul de copiere a datelor ntr-o baz de date situat la distan. 12. Regulile i restriciile de integritate nu pot fi evitate de nici un limbaj de acces. 13. Un SGBDR trebuie s fie capabil s gestioneze bazele de date exclusiv pe baza caracteristicilor sale relaionale.

Noiuni despre sistemul de gestiune a bazelor de date


Pentru realizarea i funcionarea bazei de date este necesar un sistem de gestiune a bazelor de date relaionale (SGBDR). n prezent cel mai popular sistem de gestiune a bazelor de date relaionale este considerat Oracle. El reprezint nucleul liniei de produse oferite de Oracle Corporation, care include, printre altele, un set de instrumente de dezvoltare a aplicaiilor din a patra generaie, instrumente de raportare i utilitare. n afar de sistemul Oracle exist i alte sisteme, de exemplu Microsoft SQL Server, ndrumarul prezentat este axat n jurul sistemului Oracle, dar rezultatele pot fi uor extinse i asupra altor SGBDR. 4

nelegerea celor ce urmeaz, este legat de dou concepte: baza de date i instana. O baz de date este o colecie de date. Programul Oracle stocheaz aceste date folosind modelul relaional. Acest termen se refer att la datele fizice ct i la structurile logice de memorie i la procesele din fundal. Instana se refer la acea parte a memoriei pe care programul Oracle a alocat-o pentru baza de date, precum i la procesele din fundal necesare pentru susinerea bazei de date. Utilizarea programului Oracle prezint urmtoarele avantaje semnificative: - este un sistem deschis" i respect standardele industriale n vigoare referitoare la limbajele de accesare a datelor (SQL); - suport baze de date de orice dimensiuni, ncepnd de la civa octei pn la civa gigaoctei; - suport un mare numr de utilizatori simultan, minimizeaz conflictele de acces la date i garanteaz simultaneitatea datelor; - suport un mediu client/server real. El permite mprirea procesrii ntre baza de date server i programele de aplicaie ale clientului; - ofer caracteristici de siguran total pentru limitarea i monitorizarea accesului la date i a utilizrii acestora; - se comport identic pe toate platformele (Windows, UNIX, Macintosh i sisteme mainframe). Aceasta deoarece peste 80 la sut din codul su este identic pe toate platformele i sistemele de operare. Sistemul Oracle poate fi instalat pe o mare varietate de platforme hardware i de sisteme de operare, inclusiv pe calculatoarele personale. Capacitatea de procesare a sistemului Oracle este dat de structurile de memorie i de procesele acestuia. Toate structurile de memorie rezid n memoria principal a calculatorului. Procesele sunt sarcini i aciuni ale programului i ale utilizatorului care se desfoar n memoria acestor calculatoare. n funcionare, Oracle folosete dou structuri de memorie principale. Zona global a sistemului (SGA - System Global Area) este o structur de memorie care conine datele i controleaz informaiile pentru o instan Oracle. Structura SGA mpreun cu procesele din fundal ale serverului constituie o instan Oracle. Cea de-a doua structur principal de memorie este zona global a programului (PGA - Program Global Area). Aceast structur conine datele i controleaz informaiile 5

pentru un proces server. Structura PGA este creat la declanarea unui proces server. O baz de date Oracle nu este n mod necesar disponibil oricnd tuturor utilizatorilor. Atunci cnd baza de date este deschis, utilizatorii pot accesa informaiile acesteia. Atunci cnd baza de date este nchis, numai administratorul bazei de date are acces la ea. Administratorul bazei de date - sau utilizatorii posesori ai unui privilegiu DBA (Data Base Administrator) sunt singurii care pot s porneasc i s opreasc baza de date. Pornirea bazei de date i punerea ei la dispoziia utilizatorilor din ntregul sistem presupune parcurgerea urmtoarelor trei etape: - pornirea unei instane; - montarea bazei de date; - deschiderea bazei de date. Pornirea unei instane este sinonim cu pornirea bazei de date. Cnd survine acest lucru, programul Oracle aloc o poriune a memoriei partajate i a proceselor din fundal. Aceast poriune alocat a memoriei partajate este cunoscut sub numele de zon global a sistemului (SGA). Dac tocmai a fost pornit o instan, nici o baz de date nu este asociat cu aceast structur de memorie. n consecin, nici un utilizator nu poate accesa informaiile bazei de date. Montarea bazei de date este procesul de asociere a unei baze de date cu o instan pornit anterior. Dup montarea bazei de date, aceasta este nchis tuturor utilizatorilor pn n momentul n care administratorul bazei de date deschide baza de date. Deschiderea bazei de date este procesul prin care baza de date este pus la dispoziia utilizatorilor pentru operaii obinuite de baze de date. Orice utilizator autorizat se poate conecta la o baz de date Oracle deschis i poate accesa informaiile acesteia. Oprirea bazei de date Oracle presupune parcurgerea urmtoarelor trei etape: - nchiderea bazei de date; - demontarea bazei de date; - oprirea bazei de date. nchiderea bazei de date determin scrierea tuturor datelor bazei de date n fiierele de date. Demontarea bazei de date reprezint disocierea bazei 6

de date de instan. n sfrit, oprirea bazei de date duce la ncheierea tuturor proceselor server, iar SGA este eliminat din memorie.

Accesarea bazei de date


O instan Oracle care este pornit i posed o baz de date deschis poate fi accesat de utilizatori. Un utilizator este orice persoan care posed un cont utilizator nregistrat n serverul Oracle i creia i-au fost acordate privilegiile corespunztoare pentru accesul la date. Accesarea bazei de date se poate face prin intermediul urmtoarelor aplicaii: - aplicaia utilizatorului ntr-un mediu client/server prin intermediul SQL*NET; - prin intermediul SQL*PLUS, una dintre cele mai rspndite metode de acces; - instrumente Oracle, cum ar fi Developer 2000; - prin intermediul unui apel OCI sau al unui alt apel de funcie n care sunt ncorporate instruciuni SQL, ntr-un limbaj de programare de nivel sczut, cum ar fi C sau COBOL. Lista care urmeaz ilustreaz accesarea de ctre un utilizator a unui SGBDR Oracle, ntr-un mediu client/server. Sunt descrise numai operaiile cele mai elementare pe care le efectueaz Oracle. 1. Un server Oracle posed o instan pornit i o baz de date montat i deschis utilizatorilor. 2. Aplicaia utilizatorului ncearc s stabileasc o legtur cu serverul Oracle. 3. Serverul recunoate cererea de conectare a clientului i creeaz un proces n numele utilizatorului. 4. Aplicaia utilizatorului recepioneaz o confirmare privind succesul conectrii i transmite instruciuni SQL pentru a accesa i a actualiza baza de date. 5. Procesul serverului recepioneaz instruciuni SQL i verific privilegiile de acces ale utilizatorului. 6. Dac tranzacia SQL a decurs cu succes, procesul server transmite un mesaj aplicaiei client. Dac tranzacia nu s-a ncheiat cu succes, serverul transmite clientului mesajul de eroare corespunztor. 7. n timpul acestei tranzacii, serverul previne conflictele de acces la date cu alte tranzacii care solicita aceleai date. De asemenea, serverul 7

gestioneaz celelalte tranzacii i urmrete situaiile care necesit intervenie.

Dicionarul de date Oracle


Nucleul bazei de date Oracle este dicionarul de date. Acest instrument read-only" furnizeaz tuturor utilizatorilor bazei de date informaii despre baza de date asociat. Dicionarul de date este creat automat atunci cnd este creat baza de date. Oracle actualizeaz dicionarul de date ca rspuns la orice comand DDL (Data Dictionary Language - limbaj al dicionarului de date) emis. Dicionarul de date furnizeaz urmtoarele informaii: - numele tuturor obiectelor bazei de date inclusiv tabele, vederi, instantanee, indeci, sinonime, proceduri, funcii i a. m. d.; - numele utilizatorilor bazei de date Oracle, privilegiile i rolurile acordate fiecrui utilizator, informaii referitoare la restriciile de integritate, valori prestabilite pentru coloane, gradul de utilizare i alocarea spaiului, informaii de auditare. Dicionarul de date al bazei de date relaionale Oracle este compus din dou componente fundamentale: - Tabele de baz. -Aceste tabele reprezint nucleul dicionarului care stocheaz informaiile despre baza de date. Aceste tabele sunt accesate direct de nsui mediul Oracle i sunt rareori accesate de utilizatorii Oracle. In aceste tabele, datele sunt stocate n formatul intern al mediului Oracle, pe care utilizatorul final nu-1 poate citi. - Vederi accesibile utilizatorilor. -Aceste vederi sintetizeaz i prezint informaiile stocate n tabelele de baz ale dicionarului de date. Aceste vederi decodific pentru utilizator informaiile stocate n tabelele de baz. Majoritatea utilizatorilor au acces la aceste vederi i nu la tabelele de baz. Dicionarul de date este proprietatea utilizatorului Sys al sistemului Oracle i, prin urmare, nici un utilizator nu are privilegiul de a modifica direct dicionarul de date. De obicei, pentru multe dintre vederile bazei de date sunt create sinonime publice astfel, nct acestea sunt uor accesibile utilizatorilor finali. Administratorul bazei de date are responsabilitatea de a crea aceste sinonime. Accesul la dicionarul de date este ntotdeauna permis atunci, cnd baza de date este deschis. Dac baza de date este nchis, toate vederile corespunztoare dicionarului de date devin inaccesibile. 8

Dicionarul de date reprezint o colecie logic de tabele i de vederi. Ele pot fi accesate prin interogri ale utilizatorilor n vederea obinerii de informaii despre baza de date. Dicionarul de date const dintr-un set de vederi, care sunt accesate prin intermediul limbajului SQL. Anumite vederi sunt accesibile tuturor utilizatorilor n timp ce altele sunt destinate numai administratorilor bazei de date. Urmeaz o scurt trecere n revist a ctorva dintre vederile disponibile tuturor utilizatorilor care posed privilegiul de sistem create session. all_col_coinments Comentarii n legtur cu coloanele tabelelor i vederilor accesibile. all_constraints Definiiile restriciilor asociate tabelelor accesibile. all_db_links Legturile bazei de date accesibile utilizatorului. all_errors Erori curente referitoare la toate obiectele accesibile utilizatorului. all_indexesDescrierea indecilor tabelelor accesibile utilizatorului. all_objectsObiectele accesibile utilizatorului. all_sequencesDescrierea secvenelor accesibile utilizatorului. all_snapshotsToate instantaneele accesibile utilizatorului. all_synonymsToate sinonimele accesibile utilizatorului. all_tablesDescrierea tabelelor accesibile utilizatorului, all_triggersInformaii referitoare la toi declanatorii accesibili utilizatorului. all_usersInformaii despre toi utilizatorii bazei de date. all_viewsTextul vederilor accesibile utilizatorului.

Mersul lucrrii:
1. Activai comanda SQL*PLUS n dependen de sistemul de operare instalat pe calculator (Unele sisteme cer introducerea comenzii n registrul de jos). SQL*PLUS va afia Enter user-name: 2. Introducei numele SCOTT i apsai [Enter]. SQL*PLUS va afia "Enter password:". 9

3. Introducei parola TIGER i apsai [Enter] din nou. Parola nu se afieaz pe ecran. SQL*PLUS va arta versiunea ORACLE, i pachetele disponibile (ex., PL/SQL). Dup aceea, SQL*PLUS va afia: SQL> Ceea ce nseamn c SQL*PLUS este gata de a accepta comenzile. 4. Pentru a putea analiza ulterior activitatea n SQL, nainte de a ncepe lucrul se recomand crearea fiierului-spuller, de exemplu: spool c:/aa/trace1 aici: c:/aa/ - traseul spre fiierul-spuller; trace1 denumirea fiierului-spuller 5. Introducei comanda: describe all_tables; i apsai [Enter]. Care va fi rezultatul? 6. Repetai punctul 5 cu ali operatori din lista vederilor i nregistrai rezultatul. 7. Ieirea din SQL*PLUS, se face cu ajutorul comenzii exit. exit;

Rezumat
n acest capitol, v-ai familiarizat cu sistemul de baze de date relaionale Oracle. Modelul de baze de date relaionale este definit ca o matrice bi-dimensional compus din linii i coloane. Accesul la o anumit dat se realizeaz prin cunoaterea numelui tabelului, coloanei i liniei n care se afl data. Sistemul de baze de date relaionale Oracle pune la dispoziie o baz de date care este uor de neles, de utilizat i suficient de flexibil pentru a satisface toate cerinele bazei de date. Aceast baz de date este un sistem deschis i respect standardele industriale referitoarele la limbajele de accesare a bazelor de date (SQL). n aceast lucrare, au fost prezentate etapele necesare pentru pornirea i oprirea bazei de date Oracle. De asemenea, ai aflat semnificaia termenului relaional, i anume: o colecie de tabele care sunt asociate ntre ele pe baza unei coloane comune.

10

LUCRAREA DE LABORATOR Nr. 2


Structuri logice de stocare a bazelor de date
Structurile logice de stocare dicteaz modul n care este utilizat spaiul fizic al bazei de date, ele se pot manipula pentru a ajusta utilizarea spaiului de pe disc. O structur logic de stocare este o unitate alocat a spaiului de stocare. Scopul ei principal este de a defini modul n care va fi utilizat spaiul fizic de stocare a bazei de date. Este utilizat pentru a crea modelul de date relaional pornind de la structura fizic a bazei de date. Structurile logice de stocare includ spaii tabel, segmente, extinderi, blocuri si fiiere de date. Oracle aloc spaiul bazei de date pentru toate datele bazei de date. Unitile de stocare sunt blocurile de date, extinderile i segmentele. Aceste structuri pot fi manipulate prin operaii de baze de date. Structurile logice de stocare dicteaz modul n care va fi utilizat spaiul fizic al bazei de date. Obiectele schemei i relaiile dintre ele formeaz profilul relaional al bazei de date. Aceast configuraie logic a bazei de date are influen asupra performanelor bazei de date. O baz de date Oracle posed att o structur logic, ct i o structur fizic. Structura fizic conine fiierele de date, fiierele de control i fiierele jurnal curente. Prin separarea celor dou tipuri de structuri, fiecare poate fi gestionat independent de cealalt fr a afecta accesul reciproc. Atunci cnd sunt create structurile logice de stocare, spaiul este alocat n baza de date conform unor criterii predefinite. Administratorul bazei de date are dreptul s ignore sau s reconfigureze criteriile bazei de date pentru a optimiza utilizarea spaiului discului. Pentru a ti s alocai spaiu n mod eficient i performant, trebuie s nelegei cum este utilizat spaiul bazei de date. Structura logic a unei baze de date Oracle este definit prin urmtoarele caracteristici: spaii-tabel, segmente, extinderi, blocuri de date.

Spaii-tabel
Atunci cnd o baz de date este creat de administratorul bazei de date, este mprit n uniti logice multiple numite spaii-tabel. Datele bazei de date sunt stocate logic n spaiul-tabel, iar fizic sunt stocate n fiierele de date care sunt asociate cu spaiul-tabel. 11

n afar de stocarea logic a datelor, administratorul bazei de date poate folosi spaii-tabel pentru a realiza urmtoarele: - controlul consumrii spaiului fizic de pe disc de ctre baza de date; - alocarea anumitor cote de disc utilizatorilor individuali; - stabilete repartiia stocrii datelor ntre dispozitive fizice multiple de stocare. Atunci cnd este creat un spaiu-tabel, sunt create automat spaiultabel System i fiierele de date. Spaiul-tabel System conine ntregul dicionar de date al bazei de date. Se recomand s fie creat cel puin un spaiu-tabel suplimentar pentru a pstra informaiile dicionarului de sistem separat fa de date. Utilizarea spaiilor-tabel multiple asigur flexibilitate n executarea operaiilor asupra bazei de date. Printre avantajele utilizrii spaiilortabel multiple se numr urmtoarele: - separarea datelor de sistem fa de datele utilizatorului; - permite separarea aplicaiilor ntre ele; - posibilitatea dezactivrii anumitor spatii-tabel individuale i meninerea celorlalte active; - posibilitatea de a stoca spaii-tabel diferite pe uniti de disc distincte n vederea mbuntirii performanelor i reducerii conflictelor de acces la date. Spaiul-tabel System conine, de asemenea, segmente de revenire si uniti de program PL/SQL cum ar fi funcii-procedur, declanatori i pachete. Dac pentru o anumit baz de date este creat o asemenea unitate PL/SQL, administratorul bazei de date trebuie s aib n vedere necesitile de spaiu aferente. Prin urmare, administratorul bazei de date va aloca mai mult spaiu pentru baza de date. Spaiul-tabel System trebuie s fie ntotdeauna pstrat activ, deoarece Oracle trebuie s aib oricnd acces la dicionarul de date. Un spaiu-tabel Oracle este pstrat de obicei activ (online) astfel, nct datele pe care le conine s fie accesibile tuturor utilizatorilor bazei de date. Administratorul bazei de date poate s dezactiveze spaiul-tabel (offline) pentru oricare dintre urmtoarele motive: - pentru a efectua operaiuni de ntreinere sau copii de siguran (backup) ale bazei de date; - pentru a interzice accesul la un grup de tabele n timpul actualizrii sau modificrii unei aplicaii; 12

- pentru a interzice accesul la o poriune a bazei de date n timp ce restul bazei de date rmne activ (online). Oracle mpiedic executarea instruciunilor SQL care fac referire la spatiile-tabel dezactivate. Orice tranzacie SQL activ care face referire la spatiile-tabel dezactivate va fi finalizat normal. Integritatea datelor se pstreaz n segmentele de revenire (rollback segments) pentru aceste segmente SQL active. Un spaiu-tabel nu poate fi dezactivat dac exist un segment de revenire activ care face referire la el. Segmentul de revenire trebuie rezolvat nainte ca spaiul-tabel s poat fi trecut n stare inactiv. Un spaiu-tabel dezactivat nu poate fi citit sau manipulat de nici o alt aplicaie sau utilitate alta dect Oracle. Spaii-tabel i fiiere de date Fiecare spaiu-tabel conine cel puin un fiier fizic de date. Fiierul de date asociat cu un spaiu-tabel conine datele pentru spaiul-tabel respectiv. Fiierele de date sunt asociate cu un singur spaiu-tabel i o singur baz de date. Fiierul de date iniial al fiecrei baze de date este destinat pstrrii spaiului-tabel System. Acest fiier este necesar pentru pstrarea dicionarului de date i a segmentului de revenire ce trebuie s aib o dimensiune iniial de cel puin 2KB. Pe msur ce dimensiunea bazei de date crete, putei aduga spaiului-tabel fiiere de date suplimentare. n general, ideal este s adugai mai degrab puine fiiere de date de dimensiuni mari dect mai multe fiiere de date de dimensiuni mai mici. Spaiul-tabel i fiierul de date asociat sunt goale n momentul n care sunt create. Cu toate acestea, ele posed spaiu alocat n vederea pstrrii datelor viitoarei baze de date. n vederea pstrrii acestor date, n spaiul-tabel sunt create segmente de date. Atunci cnd este creat un segment ntr-un spaiu-tabel sau cnd dimensiunea acestuia crete, programul Oracle utilizeaz spaiul liber din fiierul de date asociat pentru a aloca extinderi pentru segmentul respectiv. Remarcai faptul c un obiect logic de stocare nu corespunde unui anumit fiier de date. n schimb, un fiier de date este depozitarul datelor oricrui obiect dintr-un anumit spaiu-tabel.

13

Segmente Segmentele sunt omoloagele fizice ale obiectelor bazei de date care stocheaz datele. Un segment este format din extinderi. Spaiul alocat segmentelor nu este eliberat dect atunci cnd segmentul este abandonat sau trunchiat. Oracle definete patru tipuri de segmente: - segmentul tabel; - segmentul index; - segmentul de revenire; - segmentul temporar Segmentul tabel Segmentul tabel, cunoscut i sub numele de segment de date, stocheaz datele din tabele, clustere i instantanee. Acest tip de segment este creat indirect prin intermediul comenzilor create table/cluster/snapshot De obicei, segmentul tabel este foarte activ deoarece aici sunt pstrate datele. Aceste date sunt manipulate de un mare numr de tranzacii SQL. Pentru obinerea unor performane corespunztoare, este important ca administratorul bazei de date s aloce cantitatea adecvat de spaiu de stocare pentru fiecare segment. Dac segmentul acumuleaz continuu noi extinderi, datele devin fragmentate, iar performanele scad. Baza de date nu poate garanta alocarea contigu a extinderilor. Comanda pctfree poate fi folosit pentru a monitoriza cantitatea de spaiu liber pe care o posed un segment. Acest spaiu liber poate fi utilizat intern pentru spaiul-tabel sau poate fi eliberat i returnat bazei de date. Segmentul index Segmentul index este creat pentru a pstra datele unui index al bazei de date. Sintaxa: create index Aceast comand v permite s definii parametrii extinderilor segmentului index i spaiului-tabel n care va fi creat indexul. Segmentul de revenire Segmentul de revenire este o poriune a bazei de date care nregistreaz aciunile unei tranzacii SQL n vederea derulrii napoi a acestora dac se dorete acest lucru. Un segment de revenire restabilete 14

baza de date n starea n care se gsea la ultimul punct de salvare sau la ultima acceptare. Fiecare tranzacie are un segment de revenire asociat. De obicei, acest segment este atribuit automat de ctre baza de date. Avei totui posibilitatea s asociai o tranzacie cu un segment de revenire corespunztor. Segmentul de revenire conine mai multe informaii. Printre acestea se numr numele fiierului i identificatorul blocului pentru datele care au fost modificate i pentru datele existente naintea ultimei tranzacii. Aceste segmente de revenire pot fi citite i scrise exclusiv de ctre programul Oracle. Segmentul temporar Un segment temporar este un spaiu de lucru destinat prelucrrii unui tabel utilizat pentru pstrarea rezultatelor intermediare ale unei tranzacii SQL. De exemplu, pentru o operaie de sortare va fi creat un segment temporar reprezentnd zona de lucru pentru aceast operaie. Urmtoarele comenzi SQL pot necesita crearea unui segment temporar: Create index Select order by Select distinct Select minus Select intersect Extinderi O extindere este o structur logic de stocare compus dintr-un numr de blocuri contigue. Fiecare tip de segment este compus din una sau mai multe extinderi. Atunci cnd un segment epuizeaz spaiul de stocare care i-a fost alocat, programul Oracle i aloc o nou extindere. Atunci cnd este creat, fiecare segment posed cel puin o extindere. La alocarea unei noi extinderi pentru un segment, se parcurg urmtoarele etape: 1. Programul Oracle parcurge spaiul-tabel n cutarea primului set contiguu de blocuri de date libere care au mpreun dimensiunea incrementului stabilit pentru o extindere. 2. Programul Oracle gsete spaiul liber necesar i aloc extinderii respective o poriune a acestui spaiu liber egal cu incrementul unei extinderi. 3. Dicionarul de date este actualizat pentru a reflecta alocarea noii extinderi i faptul c spaiul alocat nu mai este liber. 15

Extinderile segmentelor pot fi returnate atunci cnd nu mai sunt necesare. n general, extinderile nu sunt returnate spaiului-tabel ca spaiu liber pn cnd segmentul nu este returnat ca un ntreg. Acest lucru survine, de exemplu, atunci cnd un tabel este abandonat, iar segmentele i extinderile sunt eliberate. Atunci cnd sunt eliberare segmente, dicionarul de date este actualizat pentru a reflecta extinderile recuperate ca reprezentnd spaiu disponibil. Datele din blocurile extinderilor eliberate nu mai sunt accesibile. Blocuri de date Blocul de date reprezint cea mai mic unitate de stocare utilizat de programul Oracle pentru stocarea datelor. Un bloc de date corespunde unui bloc fizic de octei de pe disc. n interiorul fiierelor de date spaiul de stocare este compus din blocuri de date. Formatul blocurilor de date Oracle este identic, indiferent dac blocul de date conine un tabel, un index sau clustere de date. Blocurile de date includ urmtoarele componente: - antetul - conine informaii referitoare la bloc cum ar fi adresa blocului i tipul segmentului; - catalogul de tabele - conine informaii despre tabele care posed linii n blocul respectiv; - catalogul de linii - conine informaii despre liniile din bloc; - spaiu liber - folosit pentru inserarea noilor linii i pentru actualizarea liniilor care necesit spaiu suplimentar. - linii de date - conine date aparinnd unor tabele sau unor indeci. Programul Oracle permite liniilor de date s se ntind pe spaiul mai multor blocuri. Spaiul alocat liniilor de date nu este eliberat de server atunci cnd sunt terse linii. Acest spaiu este reutilizat numai atunci, cnd sunt inserate noi linii n blocul respectiv. Pentru controlul utilizrii spaiului liber al blocului de date, proiectantul aplicaiei are la dispoziie doi parametri, pctfree i pctused. Ambii parametri pot fi specificai numai n momentul crerii sau modificrii tabelelor i clusterelor. Parametrul pctfree este folosit pentru a defini procentajul blocului de date care urmeaz s fie pstrat liber pentru eventualele actualizri ale liniilor care exist deja n blocul de date respectiv. Parametrul din exemplul urmtor, atunci cnd este folosit mpreun cu 16

comanda create table, va rezerva 35 de procente din blocul de date utilizat pentru tabelul respectiv ca spaiu liber pentru eventualele actualizri viitoare: pctfree 35 Parametrul pctused este folosit pentru a defini procentul din spaiul existent n blocul de date pe care programul Oracle va ncerca s-1 completeze nainte de a aloca o nou extindere. Parametrul din exemplul care urmeaz, atunci cnd este folosit mpreun cu comanda create table, specific programului Oracle s nu insereze alte linii n blocul de date dac nu sunt libere cel puin 40 de procente din acesta: pctused 40 Parametrii pctfree i pctused sunt folosii mpreun pentru a optimiza utilizarea spaiului din blocurile de date i extinderile unui segment de date.

Mersul lucrrii:
1. Activai comanda SQL*PLUS 2. Introducei numele de sistem SYSTEM i apsai [Enter]. SQL*PLUS va afia "Enter password:". 3. Introducei parola MANAGER i apsai [Enter] din nou. 4. Introducei comanda pentru a avea fiierul spooller: spool c:\1\trace2 Crearea noilor spaii-tabel i a fiierelor de date Pentru a crea un nou spaiu-tabel trebuie s posedai privilegiul de sistem create tablespace. Instruciunea care urmeaz creeaz un spaiu-tabel numit dbt_user_01. create tablespace dbt_user_01 datafile 'c:\1/datafile_01' size 256k default storage ( initial 50k next 40k minextents 10 maxextents 50 pctincrease 0) ; Rezultatul: Tablespace created. 17

Urmtorul exemplu va aduga un nou fiier de date la un spaiu-tabel existent numit dbt_user_01: alter tablespace dbt_user_01 add datafile 'c:\1/new_file_name_2' size 512k; Rezultatul: Tablespace altered. Afiarea informaiilor spaiilor-tabel i ale fiierelor de date Oracle prevede mai multe vederi predefinite care v permit s obinei informaii despre spaiile-tabel i fiierele de date. Iat numele acestor vederi: Dba_tablespaces user_tablespaces dba_data_files user_extents user_segments dba_extents Urmtorul exemplu utilizeaz vederea dba_tablespace pentru a obine informaiile de stocare prestabilite pentru spaiul-tabel dbt_user_0l: select tablespace_name tablespace, initial_extent extent, next_extent next_ext, min_extents min_ext, max_extents max_ext, pct_increase pct_incr, status status from sys.dba_tablespaces; Rezultatul:
tablespace extent next_ext min_ext max_ext pct_incr status -------------------- -------- ---------------- -------- -----SYSTEM 10240 10240 1 121 50 ONLINE USER_DATA 10240 10240 1 121 50 ONLINE ROLLBACK_DATA 10240 10240 1 121 50 ONLINE TEMPORARY_DATA 10240 10240 1 121 50 ONLINE DBT_USER_01 51200 40960 10 50 0 ONLINE

18

Privii aceste vederi, pentru a dobndi o impresie de ansamblu a spaiilor-tabel i fiierelor dumneavoastr de date curente.

Rezumat
Structurile logice de stocare creeaz modelul de date relaional n baza de date fizic. Aceste structuri definesc modul n care va fi utilizat baza de date fizic. Structurile logice de stocare sunt necesare pentru ca administratorul i proiectantul bazei de date s maximizeze eficiena bazei de date. De asemenea, aceste structuri sunt folosite pentru a optimiza utilizarea spaiului de pe disc prin reducerea redundanei datelor. Baza de date Oracle este mprit n uniti logice numite spaiitabel. Datele bazei de date sunt stocate n fiiere de date. Un spaiu-tabel posed cel puin un segment pentru stocarea datelor bazei de date. Fiecare segment este compus din extinderi. O extindere este format din uniti contigue de spaiu de stocare numite blocuri de date.

LUCRAREA DE LABORATOR Nr. 3


Proiectarea unei baze de date.
Proiectarea unei baze de date reprezint procesul pe care l parcurgei n vederea pregtirii crerii fizice a unei baze de date Oracle. Etapele acestui proces includ identificarea operaiunilor pe care le va gestiona baza de date, precum i crearea proiectului fizic al bazei de date. n lipsa proiectrii corecte a bazei de date, aceasta poate prezenta urmtoarele deficiene: - Integritatea datelor este compromis deoarece restriciile de integritate nu pot fi proiectate corect. - Datele devin redundante. - Performanele sunt afectate deoarece pentru finalizarea unei instruciuni select pot s fie necesare interogri suplimentare. Pentru a crea o baz de date Oracle este necesar parcurgerea urmtoarelor etape: 1. Crearea unui model al activitii companiei. 2. Crearea unui model al datelor. 3. Crearea unui proiect de baz de date. 4. Crearea definiiei tabelelor. 19

5. Crearea bazei de date relaionale. Crearea unui model activitii companiei Aceast etap presupune strngerea de informaii despre activitatea companiei pe care le va susine baza de date Oracle. Pentru a dobndi o bun cunoatere a activitii companiei, vei ntreprinde urmtoarele: Vei lua interviuri: a. Managerilor i supervizorilor activitilor companiei. b. Potenialilor utilizatori. c. Potenialilor beneficiari. Descoperii obiectivul declarat al activitii. Este util s cunoatei scopurile activitii unei companii astfel, nct baza de date s fie conceput n vederea deservirii acestora. Colaborai cu utilizatorii i supervizorii pentru a defini obiectivul aplicaiei. Este obligatoriu s definii preteniile companiei referitoare la ceea ce urmeaz s fac baza de date i aplicaia. Analizai specificaiile de sistem curente. Identificai viitoarele specificaii de sistem pentru baza de date. n acest moment, vei fi n posesia unor cantiti mari de date. Este necesar s nelegei toate aceste informaii i s le ordonai nainte de a trece la etapa urmtoare. Crearea unui model al datelor Dup ce ai strns informaiile precedente, trebuie s construii un model sau o reprezentare grafic a necesitilor i regulilor companiei. De exemplu, s presupunem c ai aflat urmtoarele informaii despre activitatea companiei n timpul interviurilor anterioare: Compania are nevoie s tie ce agent de vnzri deservete fiecare client. De asemenea, trebuie s cunoasc numele i telefonul clientului. Vor s aib posibilitatea de a gsi rapid informaii despre un anumit client. O tehnic de modelare verificat pentru reprezentarea grafic a activitilor companiilor este modelul ERD (Entity Relationship Diagram - diagrama relaiei dintre entiti). Acest model este format din trei componente: entitate - un element relevant n legtur cu care sunt necesare informaii; atribut - ceva care descrie sau explic o entitate; 20

relaie - o asociere ntre dou entiti. Numai elementele relevante pentru activitatea companiei devin entiti. Orice descrieri ale unei entiti devin atributele acesteia. Informaiile pe care le-ai obinut privitor la activitatea companiei trebuie s descrie relaiile ntre entiti. Ducnd acest exemplu mai departe, vom crea o diagram ERD simpl. Consultai fig. 3.1 pentru un exemplu de diagram a relaiilor dintre entiti. Informaii obinute n prima etap
... Trebuie

s tim care sunt clienii arondai agenilor de vnzri...

Trebuie, de asemenea, s tim numele si numrul de telefon al fiecrui client

Un client va avea doar un singur reprezentant de vnzri arondat...

Client -Nume -Nr. telefon

Agent vnzri -Nume -ID

Fig. 3.1. O diagrama simpl a relaiilor dintre entiti. Dup ce ai creat diagram ERD iniial, analizai-o mpreun cu responsabilii de compartimente pentru a v asigura c ea este corect i a o mbunti dac este cazul. Printre avantajele utilizrii diagramei ERD se numr urmtoarele: diagrama ERD documenteaz cerinele informaionale ale companiei ntr-un format clar i precis; aceast abordare grafic a modelrii o face uor de neles; simplitatea modelului l face uor de utilizat.

Crearea unui proiect de baz de date


Acum cnd diagrama ERD este complet, acest model, mpreun cu informaiile referitoare la activitatea companiei culese n Etapa 1, poate fi utilizat pentru crearea unui proiect de baz de date. Figura 3.2 21

ilustreaz modul n care diagrama ERD poate fi convertit n schema unei instane a unei baze de date standard. Client Nume telefon

Vnzri Rep -Nume, -ID

Column Name Key Type Nulls? FK Datatype Max.lungime Exemple Data

ID PK NN nbr 7 1

Nume NN

telefon vnzri_rep_id

s emp.id char 30 char 12 23 nbr 7

Vasile 5551231

Fig. 3.2 Conversia diagramei ERD n schema instanei. Crearea definiiei unui tabel Schema instanei este compus din rnduri care definesc caracteristicile critice ale bazei de date. Entitile din diagrama ERD devin tabele; atributele devin coloane ale acestor tabele; iar relaiile devin chei externe. Dup finalizarea acestei scheme, analizai-o din nou cu responsabilii de compartimente pentru a v asigura c este complet i corect. n Oracle, pentru crearea tabelelor fizice, este folosit instruciunea SQL create table. Mulimea acestor tabele, mpreun cu consideraiile privind securitatea, reprezint fundamentul bazei de date relaionale. Figura 3.3 ilustreaz ct de uor poate fi modelat instruciunea create table pornind de la tabelul schemei de instan. 22

Column Name Key Type Nulls? FK

ID PK NN

nume NN

telefon

rep_vanzari_id

s_emp.id char 30 char 12 nbr 7 23

Datatype nbr Max.lungime 7 Exemple Data 1

Vasile 5551231

create table client_vanzari (id number(7), nume varchar2(30) constraint s_client_nume_nn not null, tel varchar2(12), rep_vanzari_id number(7) constraint s_client_pk_id pirimary key(id)); Fig. 3.3. Utilizarea schemei de instan ca baz pentru instruciunea create. Crearea unei baze de date relaionale Acum este momentul pentru a crea tabelul. Crearea unui tabel se realizeaz prin definirea numelui tabelului, precum i a numelor coloanelor tabelului i a descrierii acestora folosind o instruciune SQL. Urmtoarea instruciune creeaz tabelul prezentat n figurile anterioare: create table client_vanzari( id number(7,0), nume varchar2(30) constraint s_client_nume_nn not null, tel varchar2(12), rep_vanzari_nr_marca number(7), constraint s_client_pk_id primary key (id)); 23

Odat ce aceast instruciune a fost lansat prin intermediul programelor SQL*PLUS sau SQL*DBA, tabelul exist fizic n baza de date relaional Oracle.

Normalizarea datelor
Normalizarea este procesul prin care eliminai problemele legate de redundana datelor n proiectul bazei de date i construii un model de date care susine diverse cerine funcionale i structuri alternative ale bazei de date. Normalizarea este un proces ordonat n care aplicai urmtoarele trei reguli referitoare la date: Toate atributele trebuie specificate o singur dat. Aceasta este forma 1 normal. Aceasta nseamn c atributele nu trebuie s se repete. Un atribut trebuie s depind n ntregime de identificatorul (ID) unic al entitii pe care o descrie. Aceasta este forma normal 2. Mutai atributele ntr-un tabel n care depind exclusiv de o cheie principal. Nu utilizai tabele n care atributele s nu depind exclusiv de o singur cheie. Pentru a fi n forma normal 3, o relaie trebuie s fie n forma normal 2, iar atributele ID nu trebuie s depind tranzitiv de cheia primar. Atunci cnd normalizarea este complet, fiecare tabel trebuie s posede o singur cheie primar, iar datele din tabel trebuie s depind exclusiv de cheia primar a tabelului. Repetai de sine stttor procedura de creare a unui tabel pornind de la un model propriu , explicai fiecare operator utilizat.

Rezumat
Proiectarea bazei de date presupune parcurgerea mai multor etape pentru a colecta, a analiza i a modela informaiile referitoare la activitatea companiei. In acest capitol, au fost prezentate etapele necesare analizrii i modelrii datelor. Proiectarea judicioas a bazei de date este necesar deoarece n lipsa ei performanele ar avea de suferit, integritatea datelor ar fi n pericol, iar baza dumneavoastr de date ar deveni prea mare datorit acumulrii de date duplicate. nsuirea artei de a proiecta o baz de date presupune acumularea unei experiene ndelungate. Cu toate acestea, parcurgnd etapele 24

prezentate n acest capitol, putei construi o baz de date solid i bine conceput.

LUCRAREA DE LABORATOR Nr. 4


Tipuri de date. Tabele 1
Toate datele, care sunt stocate n baza de date Oracle sunt caracterizate prin tip i lungime. Aceast caracterizare este definit ca tipul de date al obiectului. Tabelele sunt dispozitive de stocare ntr-o baz de date relaional. Coloanele tabelului definesc caracteristicile datelor i n acelai timp atribuie un nume datelor din coloana respectiv. Coloanele, precum i variabilele, i constantele sunt caracterizate din tipul i lungimea datelor. Aceste proprieti fac ca serverul Oracle s trateze n mod difereniat tipurile de date diferite. Oracle recunoate tipuri de date interne i externe. Tipurile de date interne sunt cele care descriu coloanele tabelelor, clusterele i argumentele procedurilor. Precompilatorul Oracle recunoate i alte tipuri de date care se gsesc n programe SQL ncapsulate. Aceste tipuri de date sunt numite tipuri de date externe i sunt asociate variabilelor gazd. Tipurile interne de date ale programului Oracle sunt: Char; varchar2; varchar; number; date; raw; long raw; rowid; long; mlslabel Utilizarea tipurilor de date n baze de date ofer urmtoarele avantaje: Restrng domeniul valorilor pe care le pot lua diverse entiti. De exemplu, o entitate de tip date nu poate lua valoarea JIM. Permit conservarea spaiului de stocare prin adaptarea tipului la datele stocate. Permit conversia automat a datelor n anumite condiii. Urmtoarele paragrafe descriu fiecare dintre tipurile de date ale serverului Oracle care pot fi utilizate pentru definirea coloanelor, variabilelor i constantelor. Tipul char Tipul char este utilizat pentru a defini o coloan care conine iruri de caractere de lungime fix, cuprins n domeniul 1-255. Acest tip de date stocheaz date alfanumerice. Atunci cnd este utilizat tipul char, Oracle efectueaz urmtoarele operaii: 25

La definirea coloanei i atribuie lungimea fix specificat de dumneavoastr, iar la inserarea unei valori aceasta este ajustat pentru a o aduce la lungimea respectiv. Dac valoarea introdus este mai scurt dect lungimea de definiie a coloanei, valorii i sunt adugate spaii. Dac valoarea introdus este mai lung dect lungimea de definiie a coloanei, Oracle returneaz un cod de eroare. Dac valoarea care depete lungimea coloanei posed spaii la sfrit, acestea sunt eliminate pentru a aduce data la lungimea fixat, iat un exemplu de definire a unei coloane de tip char: Nr Articol char(15) Exemplu: "RX22723Y1 " Tipul varchar2 Tipul varchar2 este utilizat pentru a defini o coloan care conine iruri de caractere de lungime variabil, n domeniul 1-2000 octei. Pentru o coloan definit ca fiind de tip varchar2, fiecare dat este stocat ca dat de lungime variabil. Atunci cnd utiliznd tipul varchar2 pentru a defini o coloan, Oracle efectueaz urmtoarele operaii: La definirea coloanei i atribuie lungimea maxim specificat de dumneavoastr, iar la inserarea unei valori aceasta este de lungime variabil. Dac valoarea introdus este mai scurt dect lungimea de definiie a coloanei, nu sunt adugate spatii la sfritul valorii. Acesta este un tip de date n care valorile nu sunt completate cu spaii. Dac valoarea introdus este mai lung dect lungimea de definiie a coloanei, programul Oracle returneaz un cod de eroare. Dac valoarea care depete lungimea coloanei posed spaii la sfrit, acestea sunt eliminate pentru a aduce data la lungimea maxim fixat. n exemplul care urmeaz, coloana Nr_Articol este definit ca fiind de tip varchar2 i avnd o lungime maxim de 15 octei: Nr_Articol varchar2(15) Exemplu: "RX22723Y1" Tipul varchar n versiunea Oracle 7.1, tipul varchar este sinonim cu tipul varchar2. 26

Tipul number Datele de tip number stocheaz numere n virgul fix i n virgul mobil. Practic pot fi stocate numere orict de mari. Tipul number permite definirea preciziei i a scalei. Precizia este egal cu numrul total de cifre ale numrului; scala se refer la numrul de cifre din dreapta punctului zecimal. Aceste numere pot fi stocate cu o precizie de pn la 38 de cifre. Exemplul urmtor ilustreaz definirea unei date de tip number: Nr_Articol number Exemplu: '336100' sau Nr_Articol number(6,2) Exemplu: '3361.00' In acest exemplu, (6,2) reprezint urmtoarele: 6 este precizia. Precizia este sinonim cu numrul total de cifre permise. Acest numr include numrul total de cifre din ambele pri ale punctului zecimal. 2 este scala, sau numrul de cifre din dreapta punctului zecimal. Este recomandabil s specificai ntotdeauna precizia i scala datei. n acest fel se asigur verificarea integritii datei atunci, cnd aceasta este introdus. Tipul date Tipul date stocheaz data calendaristic si ora n coloanele unui tabel cu precizie de o secund. Acest tip de dat stocheaz cele patru cifre ale anului, luna, ziua, ora, minutele i secundele scurse de la miezul nopii. Pentru operaiile de intrare/ieire de date, formatul prestabilit este DD-MON-YY. Ora este stocat n format HH:MM:SS. Nu putei specifica data n litere. Dac nu specificai componenta pentru or ntr-o valoare de tip dat, ora prestabilit este 12:00:00 AM. n mod similar, dac omitei componenta corespunztoare datei calendaristice a unei valori de tip dat, data prestabilit este prima zi a lunii curente. Domeniul valid pentru date calendaristice este 1 Ianuarie 4712 .E.N - 1 Ianuarie 4712 E.N. Pentru alte informaii despre: Formate pentru date calendaristice; Modificatori de format, Sufixuri de formatare a datelor; Operaii 27

aritmetice cu date calendaristice, consultai literatura de specialitate, subiectul fiind prea amplu pentru a fi expus aici. Tipul long Coloanele, variabilele i constantele de tip long stocheaz date caracter cu lungime variabil coninnd pn la 2 gigaoctei de informaie. Dei tipul de date long este util n numeroase situaii, el prezint urmtoarele limitri: ntr-un tabel este permis cel mult o coloan de tip long Coloanele de tip long nu pot fi indexate Coloanele de tip long nu pot aprea n restricii de integritate Nu se pot face referiri la coloane de tip long n funcii SQL cum sunt substr, length i aa mai departe Coloanele de tip long nu pot fi utilizate n clauzele where, group by, order by i connect by n uniti de program PL/SQL nu pot aprea variabile sau argumente de tip long Tipurile raw i longraw Aceste tipuri de date sunt destinate datelor binare. Ele nu trebuie utilizate atunci cnd datele urmeaz s fie interpretate de Oracle. Aceste tipuri de date sunt ideale pentru stocarea datelor multimedia sau a altor fiiere binare. Tipul raw este similar cu tipul varchar2, iar long raw este similar cu tipul long. Singura deosebire este c datele de tip raw nu fac obiectul operaiunilor de conversie la atribuire. Datele de tip raw pot fi indexate, n timp ce datele de tip long raw nu pot fi indexate. Tipul rowid Tipul de date rowid corespunde adresei fizice a unei linii dintr-un tabel Oracle care nu aparine unui cluster. El este un identificator unic al fiecrei linii. Fiecare tabel al unei baze de date Oracle posed propria coloan rowid, pe care ns nu o vei vedea afiat atunci cnd executai o instruciune select * from sau describe. Adresa fiecrei linii poate fi citit prin intermediul unei interogri SQL n care este folosit cuvntul rezervat rowid drept nume de coloan. Exemplul urmtor 28

ilustreaz o instruciune SQL care utilizeaz tipul de date rowid, precum i valorile de ieire ale acesteia: SELECT rowid, nume_ang FROM ang; Rezultatul: rowid NUME_ANG -----------------------------000C0B7.0000.0001 'WHITE' Aceast adres rowid se traduce n felul urmtor: 000C0B7 Acesta este blocul de date care conine linia. Numerele blocurilor sunt relative la fiierul de date la care aparin i nu la spaiul-tabel. 0000 Acesta este numrul de secven al liniei n bloc. Numrul primei linii este ntotdeauna 0. 0001 Acesta este numrul fiierului de date care conine linia. Tipul mlslabel Tipul mlslabel este utilizat pentru stocarea formatului binar al unei etichete a sistemului de operare. Lungimea maxim pentru datele de acest tip este de 255 octei.

Conversii de tip
n anumite situaii, programul Oracle convertete automat datele de la un tip la altul. Pe de alta parte, pentru a converti datele n mod explicit putei folosi urmtoarele funcii Oracle: to_char() to_date() to_number() to_label() chartorowid() rowidtochar() Pentru atribuiri, programul Oracle efectueaz n mod implicit urmtoarele conversii de tip: varchar2 sau char la number number la varchar2 varchar2 sau char la date date la varchar2 varchar2 sau char la rowid rowid la varchar2 Conversia la atribuire reuete dac Oracle poate converti tipul valorii care urmeaz s fie atribuit la tipul destinaiei atribuirii. Pentru 29

evaluarea expresiilor, Oracle efectueaz n mod implicit urmtoarele conversii de tip: varchar2 sau char la number varchar2 sau char la date Conversiile char la number reuesc numai dac rezultatul de tip ir de caractere reprezint un numr valid. Conversiile char la date reuesc numai dac rezultatul de tip ir de caractere are formatul de dat prestabilit DD-MON-YY. Tipul null null nu este un tip de dat Oracle, ns este un concept important legat de valoarea datelor. Valorile null pot aprea n coloanele tabelelor i n expresii SQL. null se definete ca o valoare care este necunoscut, fr sens sau irelevant. Valorile null pot aprea n orice coloan att timp ct aceasta nu este supus restriciilor de integritate not null sau primary key. Nu confundai valoarea zero cu null. Zero este un numr i are o semnificaie. Exemplul urmtor ilustreaz o instruciune select care va selecta orice nregistrare n care valoarea coloanei sold nu este null. SELECT nr_cont, nume_cont, sold FROM conturi WHERE sold IS NOT null;

Tabele 1
Tabelele reprezint structurile fundamentale de stocare a bazelor de date relaionale Oracle. Tabelele sunt compuse din linii i coloane. O coloan conine date de un singur tip despre o anumit entitate. Un exemplu de coloan ar putea fi nume sau ora. O linie este o colecie de date pentru fiecare coloan a unui tabel. De exemplu, o linie a unui tabel care conine coloanele nume_oras i nume_stat ar putea fi Chisinau" i Moldova". Un tabel are un numr fixat de coloane predefinite i mai multe linii. Numrul de linii poate varia de la 0 la un numr practic nelimitat. Tabelul Oracle poate fi folosit pentru pstrarea informaiilor despre o singur entitate. Un asemenea tabel ar putea s conin o list a numelor salariailor sau o list a numerelor departamentelor din 30

companie. De asemenea, un tabel poate ilustra relaia dintre un angajat i numrul departamentului la care aparine. O baz de date relaional stocheaz datele n uniti logice de stocare numite tabele. Utilizarea tabelelor prezint urmtoarele avantaje: - baza de date devine mai uor de neles datorit structurii simple a tabelelor; - relaiile dintre datele situate n diverse tabele sunt uor de stabilit; - regulile de integritate se pot construi rapid; - tabelele reduc necesarul de spaiu de stocare i redundana datelor; - putei da nume sugestive pentru tabele i coloane, mbuntind claritatea bazei de date. Dup ce ai creat un tabel, putei s inserai linii de date n el folosind instruciuni SQL. n continuare, informaiile stocate n tabel sunt disponibile n vederea interogrii, actualizrii i eliminrii.

Utilizarea tabelelor
Planificarea tabelelor
De obicei, stabilirea parametrilor de stocare i definirea clusterelor pentru tabele cad n sarcina administratorului bazei de date. Acesta trebuie s utilizeze informaiile provenind de la creatorul aplicaiei, privind modul de utilizare a aplicaiei i tipurile de date necesare efecturii diverselor sarcini. n continuare sunt enumerate aspectele generale care trebuie avute n vedere atunci, cnd intenionai s creai un nou tabel. Tabelele trebuie s fie normalizate. Coloanele care permit valori nule vor fi definite ultimele pentru a conserva spaiul de stocare. Grupai tabelele n clustere ori de cte ori este posibil. Specificai valori adecvate pentru parametrii pctfree i pctused n momentul crerii tabelului. Specificai parametrii initrans i maxtrans n momentul crerii tabelului. Specificai spaiul-tabel n care vor fi pstrate tabelele. Estimai dimensiunea tabelului i specificai parametrii de stocare. Folosii, aceste estimri pentru a stabili resursele necesare de procesare i de spaiu de stocare pe disc. 31

n cazul n care constatai c vei avea tabele foarte mari, de genul celor cu milioane de linii, trebuie s luai anumite msuri de precauie. Dac tabelul urmeaz s creasc n timp ajungnd la dimensiuni foarte mari, asigurai-v c extinderile acestuia sunt suficient de mari astfel, nct segmentul s nu aib prea multe extinderi. n cazul tabelelor foarte mari trebuie avute n vedere nc dou aspecte: pe de o parte, specificai parametrii de stocare astfel, nct tabelul i indecii lui s se gseasc n spaii-tabel diferite; pe de alt parte, alocai suficient spaiu temporar pentru aciuni, cum ar fi sortarea.

Calcularea dimensiunii tabelului


Parcurgei urmtoarele ase etape pentru a calcula dimensiunea proiectat a unui tabel. Aceste etape fumizeaz o valoare estimativ rezonabil i nu un numr precis. 1. Determinai spaiul necesar pentru antetul blocului de date folosind urmtoarea formul: antet bloc = (antet fix + antet de tranzacie variabil) + (catalog de tabele + catalog de linii) antet fix = 57 octei antet de tranzacie variabil = 23*valoarea parametrului initrans catalog de tabele = 4 catalog de linii = 2*numrul de linii dintr-un bloc 2. Determinai spaiul disponibil pentru date per bloc de date, folosind urmtoarea formul: Spaiu disponibil pentru date = (dimensiune bloc - total antet bloc) -((dimensiune bloc - (antet fix + antet de tranzacie variabil)) * (pctfree/100)) Putei obine dimensiunea blocului curent prin lansarea comenzii show parameters db_block_size. 3. Calculai spaiul de date combinat pe baza valorilor unei linii tipice. Acest lucru se realizeaz prin evaluarea numrului de linii din tabel, a tipului coloanelor i a mediei dimensiunilor coloanelor de lungime variabil. Utilizai funcia avg pentru fiecare linie pentru a-i afla dimensiunea medie. 4. Calculai dimensiunea medie global a unei linii folosind urmtoarea formul: dimensiunea medie global a liniei = antet linie +A + B + C 32

A = totalul lungimii tuturor coloanelor care stocheaz 250 de octei sau mai puin. B = totalul lungimii tuturor coloanelor care stocheaz 250 de octei sau mai mult. C = spaiul de date combinat al tuturor coloanelor (calculat n etapa 3). 5. Determinai numrul mediu de linii per bloc cu urmtoarea formul: numr mediu de linii/bloc = spaiu disponibil/dimensiunea medie a liniei. Spaiul disponibil este cel calculat n etapa 2, iar dimensiunea medie a liniei este cea calculat n etapa 4. 6. Calculai numrul de blocuri cu urmtoarea formul: numr de blocuri = numr de linii/numrul mediu de linii per bloc. Numrul mediu de linii per bloc a fost determinat n etapa 5.

Proiectarea tabelelor
Prima etap pentru crearea unui nou tabel Oracle o reprezint proiectarea tabelului. Iat cteva aspecte care trebuie avute n vedere la proiectarea unui tabel: - folosii nume sugestive pentru tabel i pentru coloane; - selectai tipul de date adecvat pentru fiecare coloan; - normalizai tabelele atunci cnd este posibil; - definii la sfrit coloanele care accept valori nule pentru a conserva spaiul de stocare; - nu uitai s documentai numele tabelului i scopul acestuia folosind comanda comment; - creai un tabel pentru relaii i un tabel distinct pentru date. nainte de a crea un tabel, trebuie s stabilii dac sunt necesare restricii de integritate. Putei defini restriciile de integritate pentru coloanele unui tabel pentru a impune automat anumite reguli de utilizare pentru baza de date. De exemplu, dac avei un tabel care conine informaii referitoare la angajai, putei folosi restricia de integritate not null pentru coloana nume_ang. Prezena acestei restricii va obliga utilizatorul s insereze o valoarea n aceast coloan pentru fiecare linie a tabelului. Not. n exemplul urmtor procedurile de Planificare a tabelelor i Calcularea dimensiunii tabelului nu sunt utilizate fiind utilizat spaiul predefinit al sistemului. 33

Crearea tabelelor
Pentru a crea un tabel, creai un script SQL folosind comanda create table. Sintaxa general a comenzii pentru a crea un tabel este urmtoarea: create table tablename (nume_coloana tip_data restrictie, (nume_coloana tip_data restrictie) Numele tabelelor i ale coloanelor pot fi formate din 1 pn la 30 de caractere. Primul caracter trebuie s fie o liter. Numele tabelului nu poate fi numele unui alt obiect deinut de acelai utilizator al serverului Oracle. O restricie este o regul care limiteaz valorile datelor pentru una sau mai multe coloane ale unui tabel.

Mersul lucrrii:
1. Activai comanda SQL*PLUS 2. Introducei numele parola de SCOTT 3. Introducei parola TIGER i apsai [Enter]. 4. Introducei comanda pentru a avea fiierul spooller: c:\1\trace4 5. Introducei urmtorul script: /* crearea tablei Angajati */ drop table Angajati;

spool

create table Angajati( nas char(9), nume varchar2(9), prenume varchar2(9), sexe char(1) not null constraint c_constraint_sexe check(sexe in ('F', 'M')), ani number(2,0) null constraint c_constraint_ani check (ani >18 and ani < 65), angajat Date not null, nr_usinei char(3), nr_postului varchar2(6) not null );

34

Rezultatul: Table created. Descrierea tabelei describe Angajati; Rezultatul: Name Null? Type ----------------- -------- ---NAS CHAR(9) NUME VARCHAR2(9) PRENUME VARCHAR2(9) SEXE NOT NULL CHAR(1) ANI NUMBER(2) ANGAJAT NOT NULL DATE NR_USINEI CHAR(3) NR_POSTULUI NOT NULL VARCHAR2(6) Explicai fiecare rnd introdus i returnat.

Rezumat
n aceast lucrare, ai fcut cunotin cu tipurile de date Oracle ca reprezentnd caracteristicile datelor i cu tabelele, care sunt structurile logice de stocare fundamentale ale bazei de date relaionale Oracle. Aceste caracteristici sunt un set predefinit de informaii care definesc felul i lungimea datei. Programul Oracle trateaz difereniat datele de tipuri diferite. Tipurile de date permit sistemului Oracle s economiseasc spaiu de stocare prin adaptarea tipului datelor la datele care urmeaz a fi stocate. n plus, utilizarea tipurilor de date v permite s restrngei domeniul de valori pe care le poate conine o dat, contribuind astfel la asigurarea integritii datelor. Ai nvat s utilizai tipurile de date la definirea coloanelor, variabilelor i constantelor. n primul rnd stabilii tipul datelor pe care le vor conine, dup care definii lungimea acestora. Oracle efectueaz conversii de tip fie implicit, fie explicit. Aceste conversii sunt permise numai pentru anumite tipuri de date.

35

LUCRAREA DE LABORATOR Nr. 5


Crearea tabelelor 2 Mersul lucrrii:
1. 2. 3. 4. Activai comanda SQL*PLUS Introducei numele parola de SCOTT. Introducei parola TIGER i apsai [Enter]. Introducei comanda pentru a avea fiierul spooller: spool c:\1\trace4 Exemplul care urmeaz prezint un script SQL care va crea un tabel de angajai Ang cu cinci coloane. Tabelul va conine numrul de marc al angajatului, numele i prenumele angajatului, numrul departamentului de care aparine angajatul i data angajrii.

Culegei: drop table Ang; create table ang( marca_ang number(15) primary key, prenume varchar2(20) not null, nume varchar2(40) not null, nr_dept varchar2(12), data_ang date not null); marca_ang este definit drept cheie primar a tabelului. Scopul definirii unei chei primare este identificarea univoc a liniilor tabelului (coloana pentru care s-a definit o cheie primar nu poate conine valori duplicate). Restriciile not null impuse unora dintre coloane indic faptul c aceste coloane trebuie s conin o valoare pentru fiecare linie. Descrierea tabelului ang: Describe ang; Rezultatul: Name Null? Type ---------------- -------- ---MARCA_ANG NOT NULL NUMBER(15) 36

PRENUME NUME NR_DEPT DATA_ANG

NOT NULL VARCHAR2(20) NOT NULL VARCHAR2(40) VARCHAR2(12) NOT NULL DATE

Distrugerea tabelelor
Pentru a elimina din baza de date un tabel mpreun cu toate datele acestuia, folosii comanda drop table. De exemplu, urmtoarea comand distruge tabelul ang: drop table ang; Pentru a distruge un tabel, acesta trebuie s se gseasc n schema dumneavoastr, n caz contrar, trebuie s posedai privilegiul de sistem drop any table. Distrugerea unui tabel are urmtoarele efecte: - definiia tabelului este eliminat din dicionarul de date, tabelul si datele devenind inaccesibile. Acest lucru este echivalent cu eliminarea efectiv a liniilor tabelului; - toi indecii i declanatorii asociai cu tabelul sunt distrui, indiferent dac sunt creai de dumneavoastr sau de alt utilizator; - vederile i sinonimele care fac referire la tabel nu sunt distruse ns devin invalide; - toate blocurile care au fost alocate tabelului sunt returnate spaiuluitabel ca spaiu liber i pot fi utilizate de orice alt obiect care necesit noi extinderi.

Trunchierea tabelelor
O metod eficient de a elimina toate liniile dintr-un tabel este s utilizai comanda truncate table. Aceast comand elimin toate nregistrrile din tabel i elibereaz spaiul alocat care era folosit pentru pstrarea nregistrrilor eliminate. Comanda truncate table este mai eficient i mai rapid dect comanda delete from. De obicei, utilizatorii ntmpin dou probleme atunci cnd ncearc s elimine volume mari de nregistrri cu comanda delete from. n primul rnd, ei risc s primeasc un mesaj de eroare prin care sunt avertizai c segmentul lor de revenire este prea mic. Aceasta este o fals eroare deoarece de obicei segmentul lor de 37

revenire este corect dimensionat, ns tranzacia este prea mare. n al doilea rnd, obiectul tabel pstreaz ntregul spaiu alocat atunci, cnd comanda delete from este finalizat. Programul Oracle nu elibereaz acest spaiu dup executarea acestei comenzi, deci ctigul de spaiu este nul. Comanda truncate table rezolv ambele probleme. Ea nu folosete segmentul de revenire n timp ce este executat. Prin urmare, este mai rapid i nu este limitat de spaiul segmentului. Folosirea comenzii truncate table duce la eliberarea spaiuluitabel imediat dup execuia acesteia. Comanda truncate table nu poate fi derulat napoi; prin urmare, trebuie s o folosii cu precauie n aplicaiile dumneavoastr. Pentru a folosi comenzile truncate table sau truncate cluster, tabelul, respectiv grupul trebuie s se gseasc n schema dumneavoastr sau trebuie s posedai privilegiul de sistem delete any table. n exemplul urmtor, comanda truncate table este folosit pentru a elimina toate liniile din tabelul DEPT: truncate table ang;

ncrcarea unui tabel


Culegei: /* crearea tablei Angajati */ drop table Angajati; create table Angajati( nas char(9), nume varchar2(9), prenume varchar2(9), sexe char(1) not null constraint c_constraint_sexe check(sexe in ('F', 'M')), ani number(2,0) null constraint c_constraint_ani check (ani >18 and ani < 65), angajat Date not null, nr_usinei char(3), nr_postului varchar2(6) not null 38

); Rezultatul: Table created.

Descrierea tabelei
Culegei: describe Angajati; Rezultatul: Name Null? Type --------------- -------- ---NAS CHAR(9) NUME VARCHAR2(9) PRENUME VARCHAR2(9) SEXE NOT NULL CHAR(1) ANI NUMBER(2) ANGAJAT NOT NULL DATE NR_USINEI CHAR(3) NR_POSTULUI NOT NULL VARCHAR2(6)

Inserarea datelor (tuplelor)


Culegei: /* Inserarea datelor in tabelul Angajati */ insert into Angajati values ('199073432', 'Rusu', 'Maria', 'F', 35, to_date('20-oct-95', 'DD-MON-YY'),'u12', 'ps272'); insert into Angajati values ('198029823', 'Dionis','Pavel', 'M', 42, to_date('17-nov-98', 'DD-MON-YY'), 'u12', 'ps275'); insert into Angajati values ('199549525', 'Bucatru', 'Felix', 'M', 25, to_date( '8-jan-95', 'DD-MON-YY'), 'u14', 'ps71'); insert into Angajati values ('199579013', 'Gurau', 'christina','F',35, to_date('27-jan-94', 'DD-MON-YY'), 'u12', 'ps175'); insert into Angajati values ('199571002', 'Ionescu', 'Ilie', 'M', 35, to_date('19-sep-95', 'DD-MON-YY'), 'u14', 'ps75'); 39

insert into Angajati values ('199487815', 'Dusca', 'Lucia', 'F', 38, to_date('12-mar-95', 'DD-MON-YY'), 'u18', 'ps410'); insert into Angajati values ('199665972', 'Vasilescu', 'Ion', 'M', 32, to_date('10-jan-95', 'DD-MON-YY'), 'u10', 'ps235'); insert into Angajati values ('199623961', 'Scutaru', 'Maria', 'F', 35, to_date('26-jan-96', 'DD-MON-YY'), 'u16', 'ps410'); /* */ /*************Sfarsitul datelor***************/ Observaie. Se acord o deosebit atenie formatului datei, dat fiind c el este legat de versiunea lingvistic a sistemului de operare. Afiarea (returnarea) tabelei Angajati Culegei: select * from Angajati; Rezultatul:
NAS --------199073432 198029823 199549525 199579013 199571002 199487815 199665972 199623961 NUME PRENUME S ANI ANGAJAT NR_ NR_POS --------- --------- - ---- --------- --- ----Rusu Dionis Bucatru Gurau Ionescu Dusca Vasilescu Scutaru Maria Pavel Felix christina Ilie Lucia Ion Maria F M M F M F M F 35 42 25 35 35 38 32 35 20-OCT-95 17-NOV-98 08-JAN-95 27-JAN-94 19-SEP-95 12-MAR-95 10-JAN-95 26-JAN-96 u12 u12 u14 u12 u14 u18 u10 u16 ps272 ps275 ps71 ps175 ps75 ps410 ps235 ps410

8 rows selected.

Modificarea tabelelor
Sistemul Oracle v permite s modificai orice tabel existent. Motivele pentru care ai putea dori s modificai un tabel sunt urmtoarele: - pentru a aduga una sau mai multe coloane unui tabel; - pentru a aduga sau a distruge restricii asociate unui tabel; - pentru a modifica parametrii pctused i pctfree; 40

- pentru a modifica definiia unei coloane existente (tipul de date i lungimea). Atunci cnd modificai definiiile coloanelor unui tabel, acesta trebuie s fie gol pentru a putea face urmtoarele operaii: - micorarea lungimii unei coloane; - modificarea tipului de date ale unei coloane. Mrirea lungimii unei coloane de tip char poate dura destul de mult. Aceasta deoarece tipul de date char face ca programul Oracle s completeze cu blancuri fiecare linie pentru coloana modificat. Pentru a modifica un tabel existent, folosii comanda alter table. Codul care urmeaz adaug o nou coloan tabelului dept: alter table dept add (profil_dept varchar2(35)); Urmtorul exemplu modific tabelul ANG, indicnd faptul c trebuie completat cmpul salariu: alter table emp modify (sal not null); Acest exemplu modific tabelul ANG prin adugarea unei restricii de tip cheie extern: alter table ang add constraint s_dept_man_id_fk foreign key (nr_dept) references dept; Acest exemplu elimin o restricie din tabelul DEPT: change dept to ang alter table dept drop constraint s_dept_man_id_fk; alter table emp Pentru a modifica un tabel, acesta trebuie s se gseasc n schema dumneavoastr; n caz contrar, trebuie s posedai fie privilegiul alter pentru tabelul respectiv, fie privilegiul de sistem alter any table.

Rezumat
n acest capitol, ai fcut cunotin cu tabelele, care sunt structurile logice de stocare fundamentale ale bazei de date relaionale Oracle. Tabelele pot fi privite ca matrice bi-dimensionale care conin un numr predeterminat de coloane i linii multiple. 41

Folosirea tabelelor este componenta esenial a utilizrii bazei de date relaionale Oracle. Tabelele furnizeaz o structura logic simplificat uor de neles i suficient de flexibil pentru a satisface cerinele bazei dumneavoastr de date. Ai parcurs etapele necesare crerii i modificrii tabelelor. Cu comanda create table, putei s optimizai spaiul de stocare, precum i s stabilii diverse restricii.

LUCRAREA DE LABORATOR Nr. 6


Integritatea datelor
O problem critic n gestionarea bazelor de date este asigurarea respectrii unui set predefinit de reguli n concordan cu activitile, pe care le susine sistemul. Administratorul bazei de date, programatorul aplicaiei i reprezentantul de zon sunt responsabili pentru definirea si crearea acestor reguli. n esen, integritatea datelor presupune definirea regulilor care restrng valorile valide pentru o coloan a unui tabel. Restriciile de integritate sunt definite pentru tabele i prin urmare toate vederile i sinonimele tabelelor sunt supuse restriciilor de integritate. Dac o instruciune de manipulare a datelor ncearc s efectueze o aciune care violeaz o restricie de integritate, este generat o eroare i tranzacia este derulat napoi. Restriciile de integritate a datelor reprezint mijloacele utilizate de programul Oracle pentru a preveni introducerea datelor invalide n tabelele bazei de date. Programul Oracle nu permite nclcarea acestor reguli, asigurnd astfel integritatea datelor. Restriciile de integritate sunt definite asupra tabelelor bazei de date. Vederile i sinonimele tabelelor sunt supuse restriciilor de integritate definite asupra tabelelor de baz. n acest capitol sunt trecute n revist tipurile de restricii de integritate i modul de utilizare a lor. Este recomandabil s definii regulile de integritate a datelor n baza de date i nu n aplicaii. Este mai eficient s o facei la nivelul bazei de date dect s creai rutinele echivalente n aplicaie. Integritatea datelor la acest nivelul bazei de date asigur viteza maxim. Toate 42

aplicaiile pot beneficia de aceste restricii globale, deci nu este necesar s repetai structurile logice echivalente n fiecare aplicaie. Toate restriciile au un nume. Putei denumi o restricie n timp ce o creai. Dac nu o facei, programul Oracle i va atribui un nume. Numele furnizat de utilizator trebuie s fie diferit de toate celelalte restricii care v aparin.

Tipuri de restricii de integritate


n baza de date relaional Oracle, exist urmtoarele tipuri de restricii de integritate a datelor: Null; Unique; Primary key; Referential; Check. Restricia de integritate pentru un tabel este stabilit atunci cnd tabelul este creat sau modificat. Pentru a stabili o restricie de integritate, putei include clauza constraint n comenzile create table sau alter table. Exemplul urmtor ilustreaz sintaxa general a clauzei constraint: CONSTRAINT nume_restricie tip_restricie Tipurile de restricii sunt tratate n paragrafele care urmeaz. Restricia de integritate null n mod prestabilit, toate coloanele unui tabel accept valori nule adic, este permis absena unei valori n coloan. Prin stabilirea restriciei not nuil, impunei coloanei specificate s posede o valoare pentru fiecare linie a tabelului. Pentru a afia restriciile null dintr-un tabel, folosii comanda describe dup care urmeaz numele tabelului. Restricia de integritate unique Restricie de integritate unique impune ca toate valorile dintr-o coloan s fie distincte, nu pot exista valori duplicate n coloana respectiv. Oracle v permite s plasai aceast restricie pe mai multe coloane, definind astfel o aa numit restricie de unicitate compus. O restricie de unicitate compus cere ca o combinaie a coloanei cu cheie unic s nu se repete. Instruciunea urmtoare creeaz o restricie de unicitate asupra coloanei marca_ang a tabelului ANG: create table ang (marca ang number(7) constraint s_ang_marca_ang_uk unique, 43

nume varchar2(20) constraint s_ang_nume_nn not null, prenume varchar2 (20), nr_dept varchar2(5)); n exemplul anterior a fost folosit comanda describe pentru a confirma restricia null. Pentru a afia alte restricii definite pentru un tabel, trebuie s folosii o alt abordare. Consultai paragraful Afiarea restriciilor de integritate" care urmeaz mai jos pentru a vedea care sunt metodele de confirmare a restriciilor unui tabel. Restricia de integritate unique este respectat de coloanele cu valori nule deoarece toate valorile nule sunt considerate unice i distincte din punctul de vedere al acestei restricii. In consecin, este recomandabil s plasai restricia not null pe coloanele cu valori unice. n acest fel forai introducerea unei valori pentru coloana respectiv si v asigurai c valorile sunt .cu adevrat distincte. In declaraia tabelului urmtor sunt adugate restriciile unique i not nuli pe coloana marca_ang: create table ang (marca_ang number(7) constraint s_ang_marca_ang_uk unique constraint s_ang_marca_ang_nn not null, nume varchar2(20) constraint s ang nume nn not null, prenume varchar2 (20) , nr_dept varchar2(5)); Restricia de integritate primary key Restricia de integritate primary key desemneaz o coloan sau o combinaie de coloane drept cheie principal a tabelului. Cheia principal identific n mod univoc fiecare linie a tabelului. De asemenea, aceast restricie creeaz n mod implicit restriciile not null i unique pe coloana respectiv. Dei Oracle nu impune existena unei chei principale pentru fiecare tabel, este bine s v obinuii s o creai. De asemenea, este recomandabil s desemnai drept cheie principal o coloana sau o combinaie de coloane ale cror valori nu se modific niciodat. 44

Instruciunea urmtoare creeaz o restricie primary key pentru cmpul marca_ang al tabelului ANG: create table ang (marca_ang number(7) constraint s_ang_marca_ang_pk primary key, nume varchar2(20) constraint s ang nume nn not null, prenume varchar2 (2'0'), nr_dept varchar2(5)); Pentru a crea restricii asupra tabelelor, putei folosi o a doua sintax, cunoscut sub numele de sintaxa restricie_tabel. Cu aceast sintax, restriciile sunt plasate la baza instruciunii create table. Exemplul urmtor creeaz acelai tabel ca n exemplul anterior, folosind sintaxa restricie_tabel: create table ang (marca_ang number(7), nume varchar2(20), prenume varchar2(20), nr_dept varchar2(5), constraint s_ang marca_ang_pk primary key (marca ang)); Sistemul Oracle impune existena a maxim o cheie principal pentru fiecare tabel. Cheia principal nu poate fi de tip long sau long raw. Nu putei desemna aceeai coloan sau combinaie de coloane att drept cheie principal ct i drept cheie unic sau att drept cheie principal ct i drept cheie de grup. Dac ncercai s facei acest lucru, programul Oracle genereaz o eroare. Exemplul urmtor adaug o cheie principal compus pe coloanele nume i prenume ale tabelului ANG: alter table ang add primary key (nume, prenume); alter table ang enable primary key; Restricia de integritate prin referin Restriciile de integritate prin referin sunt folosite pentru a impune regulile care dicteaz relaiile dintre coloanele diverselor tabele, 45

ntre tabele se creeaz o relaie printe-fiu. Tabelul printe conine cheia referit iar tabelul fiu conine cheia extern. De exemplu, s presupunem c avei un tabel printe care conine o list de 50 de state. Tabelul fiu poate fi un tabel de adrese care conine numele i adresa cunoscuilor dumneavoastr. Tabelul de adrese are o restricie prin referin care stabilete c singurele adrese valide sunt cele n care statul se regsete n tabelul printe de state. Dac ncercai s adugai o nou adres n care prescurtarea statului este ZZ, inserarea va eua, deoarece ZZ nu exist printre cele 50 de state ale tabelului printe. Exemplul urmtor creeaz aceast restricie de integritate prin referin asupra tabelului de adrese: alter table adrese add constraint fk abr stat foreign key (abr_stat) references abr_stat(abr_stat); Iat o list a principalilor termeni folosii la stabilirea unei restricii de integritate prin referin: Cheie extern - coloana sau setul de coloane incluse n definiia restriciei de integritate prin referin. Cheie referit - cheia unic sau cheia principal a aceluiai tabel sau a unui alt tabel la care face referire cheia extern. Tabel dependent - tabelul care conine cheia extern. Tabel referi - Tabelul care este referit de cheia extern. Sistemul Oracle impune cteva restricii n legtur cu manipularea cheilor prin referin. Nu putei s modificai sau s eliminai cheia referit dac cheia rezultant ar viola restriciile de integritate prin referin. De exemplu, nu putei elimina o valoare a cheii referite, deoarece acest lucru ar duce la violarea restriciilor prin referin. Totui, putei elimina valorile cheii referite dac nu exist nici o linie dependent. Eliminarea n cascad a cheilor externe Exist totui cazuri cnd este necesar s eliminai o valoare a cheii referite. Atunci cnd nu exist valori ale cheii externe care s fac referire la valoarea respectiv, putei elimina valoarea cheii referite. Dac ns, exista linii avnd asociat restricia foreign key ea va mpiedica s eliminai valoarea cheii referite. 46

Pentru a rezolva aceast problem, stabilii asupra cheii referite restricia on delete cascade. Restricia on delete cascade permite eliminarea din tabelul printe a oricror valori ale cheii referite care au linii dependente n tabelul fiu. Atunci cnd este eliminat o asemenea valoare n tabelul printe, programul Oracle elimin automat liniile corespunztoare din tabelul fiu. Restricia de integritate check Restricia de integritate check definete n mod explicit o condiie care trebuie s fie adevrat. Fiecare linie a tabelului trebuie s respecte condiia. Condiia poate fi evaluat i la valoarea Unknown pentru a permite prezena valorii null. Dac se ncearc executarea unei instruciuni care ar duce la nerespectarea condiiei, instruciunea este derulat napoi. Restricia check prezint urmtoarele limitri: Nu poate s conin subinterogri Nu poate s conin funciile sysdate, uid, user i userenv Nu poate utiliza pseudo-coloanele currval, nextval, level i rownum Exemplul urmtor creeaz o restricie check asupra coloanei ora din tabelul adresa_filiala: create table adresa_filiala (nr_filiala number(5), nume_filiala varchar2(50), oras varchar2(50) constraint verificare_oras check oras in ("chisinau","balti","tigina"), stat varchar2(50)); O singur coloan poate avea mai multe restricii check.

Afiarea restriciilor de integritate


In paragrafele anterioare, a fost utilizat comanda describe pentru afiarea restriciilor nuil impuse coloanelor. Tabelul USER_CONSTRAINTS conine informaii complete despre toate restriciile impuse unui tabel: owner - Utilizatorul care este proprietarul definiiei restriciei. constraint_name - Numele definiiei restriciei. 47

constraint_type - Tipul restriciei. Tipurile sunt C pentru check, P pentru cheie principal, U pentru cheie unic i R pentru cheie extern. table_name - Numele tabelului asociat cu definiia restriciei. search_condition - Textul condiiei de cutare pentru o condiie check. r_owner - Proprietarul tabelului la care se face referire ntr-o restricie prin referin. r_constraint_names - Numele restriciei de integritate primary key pentru coloana referit de o restricie prin referin. delete_rule - Modul de tratare a cheilor externe care fac referire la o cheie principal sau la o cheie unic eliminat. Cele dou opiuni sunt delete cascade i no action. Status - Valoare utilizat intern de serverul Oracle. Pentru a afia restriciile asociate unui anumit tabel, efectuai o operaiune select asupra tabelului USER_CONSTRAINTS pentru tabelul vizat. De exemplu, instruciunea urmtoare afieaz restriciile asociate tabelului LST_ARTICOLE: select constraint name "Nume" constraint_type "Tip" from user constraints where table name = 'lst_articole'; Date de ieire: Nume Tip S_COD_ARTICOLE_FK R S_NR_ARTICOLE_UK U S_ID_ARTICOLE_PK P Tabelul USER_CONS_COLUMN furnizeaz informaii suplimentare n legtur cu restriciile impuse unui tabel. n continuare sunt prezentate coloanele tabelului USER_CONS_COLUMN: Owner Utilizatorul care este proprietarul definiiei restriciei. constraint_name Numele definiiei restriciei. table_name Numele tabelului asociat cu definiia restriciei. column_name Numele coloanei specificate n definiia restriciei. Position Poziia iniial a coloanei n definiia restriciei. 48

Instruciunea urmtoare afieaz informaiile referitoare la restriciile impuse coloanelor tabelului client: select constraint_name "Restricie", colmnn_name "Coloana" from user_cons_coluinn where table_name = "client"; Date de ieire: Restrictie Coloana --------------S_CLIENT_ID_PK CLIENT_ID S_ZONA_VANZARI_CLIENT_FK ZONA_VANZARI

Afiarea excepiilor de la restriciile de integritate


Pentru a obine asisten la depanarea excepiilor de la restricii, includei opiunea exceptions n clauza enable a comenzilor create table sau alter table. Opiunea exceptions depune identificatorul liniei (rowid), proprietarul tabelului, numele tabelului i numele restriciei, pentru toate liniile care fac excepie de la restricii, ntr-un tabel predefinit, EXCEPTIONS. Sistemul Oracle dispune de un script, numit utlexcpt.sql, care creeaz tabelul EXCEPTIONS. Instruciunea urmtoare modific un tabel i adaug o nou restricie cu opiunea exceptions: alter table personal, enable primary key exceptions into exceptions; Odat creat tabelul EXCEPTIONS, putei efectua asupra lui o operaie de selectare pentru a obine liniile care violeaz o anumit restricie. Exemplul urmtor folosete o reuniune pentru a afia liniile de date care intr n conflict cu regulile tabelului. n acest exemplu, n tabelul dept exist o valoare duplicat a cheii unice. Select nr_dept, nume_dept, dir_dept from dept, exceptions where exceptions=constraint = "s_nume_dept_uk" and dept.rowid = exceptions.row_id; Date de ieire: NR_DEPT MUME_DEPT DIR_DEPT ----------------11 Ambalare Riley 49

11

Ambalare

Riley

Activarea i dezactivarea restriciilor de integritate


O restricie de integritate definit asupra unui tabel se poate afla n dou stri: activ i inactiv. Dac se ncearc activarea unei restricii asupra unui tabel care nu respect regulile restriciei de integritate, programul Oracle genereaz o eroare de excepie iar instruciunea n cauz este derulat napoi. Dac exist o excepie, nu putei activa restricia pn cnd excepia nu este actualizat sau eliminata. Pentru activarea i dezactivarea restriciilor se folosesc comenzile create table si alter table. Exemplul urmtor dezactiveaz excepiile impuse tabelului LST.ARTICOLE: alter table lst_articole disable constraint s_cod_articole_fk; Exist momente cnd este cu adevrat necesar dezactivarea temporar a restriciilor. Acest lucru este necesar pe parcursul ncrcrii datelor prin intermediul SQL*Loader i pe parcursul proceselor de import i export. In ambele cazuri, dezactivarea temporar a restriciilor poate mbunti eficiena operaiei.

Vederi predefinite pentru afiarea restriciilor de integritate


Toate informaiile referitoare la restriciile de integritate sunt stocate n dicionarul de date. Sistemul Oracle v pune la dispoziie mai multe vederi pe care le putei folosi pentru a vedea definiiile curente ale restriciilor de integritate din dicionarul de date. Aceste vederi sunt urmtoarele: all_constraints - Definiiile restriciilor pentru toate tabelele accesibile all_cons_columns - Informaii n legtur cu coloanele accesibile care apar n definiiile restriciilor user_constraints - Definiiile restriciilor asociate tabelelor utilizatorului user_cons_columns - Informaii n legtur cu coloanele care apar n definiiile restriciilor aparinnd utilizatorului dba_constraints - Definiiile restriciilor pentru toate tabelele bazei de date 50

dba_cons_columns - Informaii n legtur cu toate coloanele care apar n definiiile restriciilor Distrugerea restriciilor de integritate Pentru a distruge o restricie de integritate, lansai comanda alter table cu clauza drop. n instruciunea urmtoare, este distrus restricia din tabelul lst articole: alter table lst_articole drop constraint s_cod_articole_fk;

Mersul lucrrii:
1. Distrugei eventualele tabele cu aceleai nume: drop table studenti; drop table dates; 2. Creai tabelul "studenti": create table studenti ( nr number(2) not null, nume char(7), prenume char(7), sex char(1) not null, oras char(8), adresa char(10), ani number(2) not null, grupa char(6), constraint studenti_primary_key primary key(nr)); Explicai fiecare operator din procedura de mai sus. 3. Introducei datele n tabelul "studenti":
insert into studenti values (00001,'Ricu','Slavic', 'M','chisinau','Studenti,21','AST961'); insert into studenti values (00002,'Odagiu','Silviu', 'M','chisinau','Studenti,22','AST951'); insert into studenti values (00004,'Mamulat','Rodica', 'F','Orhei','V_Lupu,23','C-962'); insert into studenti values (00005,'Bugaian','Vasile', 'M','Balti','Indepenta,23','TI-971'); insert into studenti values (00006,'Lupu','Maria', 'F','Ungheni','Florilor,20','AI-971');

51

4. Vizualizai tabelul "studenti": select * from studenti; Rezultatul:


NR NUME PRENUME S ORAS ADRESA ANI GRUPA --- ------- ------- - -------- -------------- -----1 Ricu Slavic M chisinau Studenti 21 AST961 2 Odagiu Silviu M chisinau Studenti 22 AST951 4 Mamulat Rodica F Orhei V_Lupu 23 C-962 5 Bugaian Vasile M Balti Indepenta 23 TI-971 6 Lupu Maria F Ungheni Florilor 20 AI-971

5. Creai tabelul "dates": create table dates ( nr number(5) not null, nr_matr number(6) not null, an_inmatr number(4) not null, grupa char(6), nota_med number(4,2), bursa char(1), constraint studenti_foreign_key foreign key(nr) references studenti(nr)); 6. Introducei datele n tabelul "dates": insert into dates values (00001,961801,1996,'AST962',8.9,'y'); insert into dates values (00002,961352,1995,'AST951',9.0,'y'); insert into dates values (00004,971253,1971,'TI-972',8.0,'n'); insert into dates values (00005,971651,1971,'AI-972',8.9,'y'); 7. Vizualizai tabelul "dates": select * from dates; Rezultatul: NR NR_MATR AN_INMATR GRUPA NOTA_MED B --- --------- ------------ ------ ---------- 1 961801 1996 AST962 8.9 y 2 961352 1995 AST951 9 y 52

4 971253 1971 TI-972 5 971651 1971 AI-972 8. Introducei urmtorul rnd n tabelul "dates": insert into dates values (00006, 971651,1971,'AI-973',8.9,'y'); 9. Vizualizai din nou tabelul "dates": select * from dates;

8 n 8.9 y

Rezultatul: NR NR_MATR AN_INMATR GRUPA NOTA_MED --- --------- ------------ ------ ---------1 961801 1996 AST962 8.9 2 961352 1995 AST951 9 4 971253 1971 TI-972 8 5 971651 1971 AI-972 8.9 6 971651 1971 AI-973 8.9 10. Introducei nc un rnd n tabelul "dates": insert into dates values (00003,961352,1995,'AST952',9.0,'y');

B y y n y y

Rezultatul: ERROR at line 1: ORA-02291: integrity constraint (SCOTT.STUDENTI_FOREIGN_KEY) violated - parent key not found Explicai acest rezultat, comparai cu operaia din punctul 8. Introducei drop table studenti; drop table dates; Rezultatul: ERROR at line 1: ORA-02266: unique/primary keys in table referenced by enabled foreign keys drop table dates; Table dropped. Explicai acest rezultat Introducei din nou: 53

drop table studenti; Rezultatul: Table dropped.

Rezumat
Integritatea datelor asigur respectarea de ctre baza de date a unui set predefinit de reguli stabilite de administratorul bazei de date i de programatorul aplicaiei. Att administratorul ct i programatorul preiau aceste reguli din zona de activitate a companiei pe care o susine baza de date. Practic, activitatea comercial este cu adevrat cea care impune i definete integritatea datelor. Integritatea datelor i restriciile de integritate sunt mecanismele folosite de serverul Oracle pentru a preveni introducerea datelor invalide n baza de date. Aceste restricii asupra datelor asigur respectarea cu strictee a regulilor companiei. n acest capitol, ai fcut cunotin cu diverse tipuri de restricii de integritate i ai nvat s le aplicai la nivel de tabel. De asemenea, au fost prezentate modurile de gestionare a restriciilor.

LUCRAREA DE LABORATOR Nr. 7


Selectarea i ntreinerea datelor
Oracle stocheaz datele n tabele pe care unii utilizatori le pot citi; ali utilizatori au ns privilegiul de a actualiza, de a elimina i de a insera noi date n baza de date. Acest capitol trece n revist tehnicile utilizate pentru a efectua aceste aciuni. Selectarea datelor din baza de date Oracle este sinonim cu adresarea unei ntrebri bazei de date. Scopul dumneavoastr este s primii informaii din baza de date ca rspuns la ntrebrile pe care le punei sistemului Oracle. Putei pune tipuri diferite de ntrebri sistemului Oracle, care sunt tratate n acest capitol. ntreinerea datelor n baza de date este o sarcin predominant fa de alte sarcini n server. ntreinerea datelor din baza de date Oracle implic eliminarea datelor nedorite, modificarea datelor existente i inserarea 54

noilor date. Aceste aciuni sunt necesare pentru pstrarea intact a integritii i preciziei datelor. Baza de date ar fi inutil i nu i-ar justifica existena dac utilizatorii nu ar avea ncredere n datele acesteia. Selectarea datelor din baza de date reprezint aciunea de interogare a serverului i de obinere a unui rspuns la aceast interogare. Utilizatorii, proiectanii, administratorii bazei de date i alii au cu toii nevoie s selecteze date din baza de date. Utilizatorilor le este necesar accesul la date pentru efectuarea sarcinilor zilnice legate de activitile comerciale ale companiei. Proiectanii i administratorii bazei de date trebuie s poat accesa datele pentru a dezvolta noi aplicaii, pentru a valida aplicaii existente i pentru a acorda asisten utilizatorilor finali. Activitile curente ale unei companii necesit ntreinerea continu a datelor. De exemplu, o companie poate aduga noi comenzi n baza de date prin inserarea n server a unor linii noi coninnd comenzile. In plus, aceast companie poate s modifice cantitile din comenzile existente prin modificarea liniilor din server corespunztoare acestor comenzi. Acest capitol trateaz diversele metode de a accesa datele bazei de date cu comanda select. De asemenea, sunt descrise i comenzile folosite pentru ntreinerea datelor bazei de date.

Mersul lucrrii:
Afiarea coloanelor tabelelor
Pe parcursul acestui capitol, este esenial s tii exact ce tabele i coloane dorii s selectai sau s ntreinei. Comanda describe v poate ajuta s stabilii daca ntr-adevr accesai tabelul, vederea sau sinonimul dorit. Comanda describe afieaz structura tabelului, incluznd numele coloanelor, tipul, lungimea i precizia datelor i starea null sau not null a acestora. Creai tabelul Angajati, din Lucrarea de laborator Nr. 5, pentru aceasta putei utiliza fiierul-spuller al lucrrii precedente. Exemplul cu utilizarea comenzii describe pentru a afia structura tabelului a fost demonstrat n Lucrarea de laborator Nr. 5. n coloana Name din tabelul anterior sunt enumerate numele coloanelor. Acestea sunt numele la care facei referire n instruciunile dumneavoastr de selectare i de manipulare a datelor. Coloana Null? specific dac o coloan trebuie s conin date. O coloan trebuie s 55

conin datele numai dac n dreptul ei apare cuvntul cheie Not Null. n coloana Type apare tipul datelor din fiecare coloan a tabelului.

Selectarea datelor din tabele


Pentru interogarea i afiarea datelor din baza de date Oracle, se folosete instruciunea SQL select. Sintaxa general a instruciunii select este urmtoarea: select nume_coloana(e) from tabel (sau vedere sau instantaneu) Programul Oracle aliniaz la stnga toate datele de tip caracter returnate de instruciunea select, respectiv la dreapta datele de tip numeric. Afiarea (returnarea) unei coloane a tabelei Angajati Culegei: select NUME from Angajati; Rezultatul: NUME --------Rusu Dionis Bucatru Gurau Ionescu Dusca Vasilescu Scutaru 8 rows selected.

Afiarea tuturor liniilor


Pentru a afia toate liniile unui tabel, folosii asteriscul (*) n instruciunea se1ect. Exemplul urmtor selecteaz toate liniile din tabelul ANG: select * from Angajati; Putei, de asemenea, s afiai toate coloanele unui tabel prin enumerarea numelor tuturor coloanelor n instruciunea select.

56

Selectarea anumitor linii de date


Pentru a selecta anumite linii de date dintr-un tabel, folosii clauza where n instruciunea select. Clauza where este compus din nume de coloane, operatori de comparaie, constante i expresii. Putei folosi oricare dintre operatorii de comparaie (=, <, >, <=, >=, like, between, in sau null). Clauza where accept muli operatori diferii. n exemplul urmtor, instruciunea select folosete operatorul like pentru a returna numai codurile de articole care ncep cu CKl. Caracterul de nlocuire (%) e folosit mpreun cu operatorul like, pentru a indica faptul c se face comparaia cu tiparul numai pentru primele caractere ale fiecrei date din coloan. Oracle caut coincidenele ntre caracterul D i primul caracter din coloana de date. Semnul procent este folosit pentru a indica faptul c nu va fi comparat cu tiparul nici un caracter trecut de ultima poziie menionat. Culegei: Select * from Angajati where NUME like 'D%'; Rezultatul:
NAS --------198029823 199487815 NUME ------Dionis Dusca PRENUME --------Pavel Lucia S ANI ANGAJAT NR_ - ----- --------- --M 42 17-NOV-98 u12 F 38 12-MAR-95 u18 NR_POS -----ps275 ps410

Selectarea liniilor folosind condiii complexe


Sistemul Oracle permite utilizarea unor condiii complexe n instruciunea select. Acest lucru nseamn c putei folosi orice numr de condiii n clauza where a instruciunii select. Culegei: select NAS,NUME,PRENUME,SEXE, ANI, ANGAJAT, NR_POSTULUI from Angajati where SEXE='M'; Rezultatul:
NAS --------198029823 199549525 NUME PRENUME --------- -------Dionis Pavel Bucatru Felix S ANI ANGAJAT NR_POS - ----- --------- ----M 42 17-NOV-98 ps275 M 25 08-JAN-95 ps71

57

199571002 Ionescu Ilie 199665972 Vasilescu Ion

M M

35 19-SEP-95 ps75 32 10-JAN-95 ps235

Ordonarea liniilor selectate


Putei ordona liniile afiate de o interogare n ordine cresctoare sau descresctoare. n mod prestabilit, programul Oracle afieaz liniile n ordinea n care acestea apar n baza de date. Aceasta nseamn c de obicei liniile nu vor fi n nici o ordine. Pentru a ordona liniile rezultatului, folosii clauza order by n instruciunea select. Putei include urmtoarele clauze mpreun cu clauza order by pentru a obine rezultatul dorit: ascordoneaz liniile n ordine cresctoare. Acesta este modul prestabilit pentru clauza order by. descordoneaz liniile n ordine descresctoare. Exemplul urmtor afieaz liniile rezultante ale unei interogri n ordine cresctoare: Culegei: select NUME "Nume" from Angajati order by NUME asc; Rezultatul: Nume --------Bucatru Dionis Dusca Gurau Ionescu Rusu Scutaru Vasilescu 8 rows selected. Instruciunea urmtoare afieaz liniile interogrii ordonate nti dup sex i apoi dup prenume. Culegei: select prenume,sexe, ani from Angajati order by sexe, prenume asc; 58

Rezultatul: PRENUME --------Lucia Maria Maria christina Felix Ilie Ion Pavel

S ANI - --------F 38 F 35 F 35 F 35 M 25 M 35 M 32 M 42

Interogarea condiionat
Culegei: select NUME,PRENUME,ANI from angajati where ANI<35; Rezultatul: NUME PRENUME ANI --------- --------- --------Bucatru Felix 25 Vasilescu Ion 32

Manipularea datelor
Comenzile SQL insert, update i delete sunt folosite n instruciuni SQL pentru ntreinerea datelor din baza de date. NOT. Exemplele, care urmeaz mai jos, transformai-le n aa fel ca s poat fi valabile pentru tabelul utilizat, i probai-le practic.

Inserarea datelor
Comanda insert adaug o singur linie de date ntr-un tabel Oracle sau n tabelele de baz ale unei vederi. Datele care urmeaz s fie adugate n linia respectiv sunt specificate n clauza values a instruciunii insert. Exemplul urmtor folosete o instruciune insert simpl pentru a aduga o linie la tabelul ANG. Remarcai faptul c, pentru a genera automat numere secveniale unice pentru prima coloan, n instruciune se folosete generatorul de secven s_marca_ang. insert into ang values (s_marca_ang.nextval,'Ion','Petrescu', '23-B'); 59

Putei specifica anumite coloane n care vor fi introduse datele; coloanele nespecificate vor avea valoarea null. De exemplu, n tabelul lista_articole, n toate coloanele sunt inserate n mod explicit date cu excepia coloanei comentarii. Coloana comentarii rmne goal, cu alte cuvinte are valoarea null. insert into lista articole (cod_articol, nr_articol, nume_articol) values (s_cod_articol.nextval,'19832003",'Ventilator'); Comanda urmtoare folosete o subinterogare pentru generarea valorilor de intrare pentru instruciunea insert. Acest exemplu copiaz informaiile referitoare la angajai din tabelul uk_ang n tabelul ang: insert into ang select * from uk_ang where nume_regiune = 'UK';

Actualizarea datelor
Programul Oracle v permite s modificai valoarea datelor din orice coloan pe care o specificai. Instruciunea update este cea care efectueaz aceast sarcin. Aceast parte a capitolului descrie instruciunea update i diversele ei clauze. Exemplul urmtor actualizeaz toate liniile din tabelul VANZARI prin stabilirea unui comision de 0.25 pentru toi agenii de vnzri: update financiar.vanzari set comision = '.25'; Instruciunea urmtoare modific valoarea coloanei nr_dept pentru angajatul cu numar_marca egal cu 10923: update ang set nr_dept = '982-C' WHERE marca_ang = 10923; Putei de asemenea s efectuai mai multe actualizri simultan pe aceeai linie. De exemplu: update ang set nr_dept = '982-C', data_incepere = 'l-JUN1995' where marca_ang = 10923;

60

Exemplul urmtor actualizeaz mai multe linii ale unui tabel. n acest exemplu, numrul departamentului pentru toi angajaii departamentului Livrri va fi nlocuit cu 883: update ang set nr_dept = '883' where nume_dept = 'Livrari';

Eliminarea datelor
Pentru a elimina date dintr-un tabel sau din tabelele de baz ale unei vederi, folosii comanda SQL delete. Nu putei s eliminai linii dintr-o vedere dac interogarea de definire a vederii conine una dintre urmtoarele construcii: join operatorii set sau distinct clauza group by o funcie de grup Instruciunea urmtoare elimin toate liniile din tabelul CALIFICARE_1: delete from calificare_l; Pentru a elimina toate liniile dintr-un tabel, este recomandabil s folosii comanda SQL truncate. Aceasta este mai eficient dect comanda delete. Uneori dorii s eliminai numai anumite linii ale unui tabel. Pentru a face acest lucru, folosii comanda delete cu clauza where. De exemplu, instruciunea urmtoare elimin numai acele linii ale cror cantiti vndute sunt mai mici dect 100: delete from comenzi where cant_vanzari < 100;

Trunchierea tabelelor
Prin trunchierea unui tabel sunt eliminate toate liniile acestuia. Comanda truncate este mai rapid dect comanda delete din urmtoarele motive: truncate este o comand DDL si prin urmare nu genereaz informaii de revenire. Aceast comand trebuie folosit cu precauie deoarece ea nu poate fi derulat napoi. 61

Trunchierea unui tabel nu activeaz nici unul dintre declanatorii delete ai tabelului. Dac trunchiai un tabel principal al unui instantaneu, comanda truncate nu nregistreaz nici un fel de informaii n jurnalul de instantanee al tabelului. De asemenea, comanda truncate v permite s reinei spaiul eliberat spre a fi utilizat n continuare de tabelul respectiv. n mod prestabilit, sistemul Oracle returneaz serverului spaiul alocat eliberat.

Manipularea interactiv a datelor


Programul Oracle v permite s scriei un script SQL care s solicite utilizatorului informaiile care urmeaz s fie folosite ntr-o aciune ulterioar asupra bazei de date. De exemplu, putei solicita utilizatorului valorile care urmeaz s fie folosite ntr-o instruciune insert. Alternativ, scriptul poate solicita utilizatorului valorile care urmeaz s fie folosite ntr-o instruciune select. Acest paragraf folosete comanda accept i valoarea de substituie (&). Comanda accept foreaz serverul s defineasc valoarea unei variabile ca fiind egal cu valoarea introdus ntr-o instruciune accept. Caracterul & cere programului Oracle s nlocuiasc valoarea variabilei cu valoarea care a fost introdus de utilizator. Exemplul urmtor folosete instruciunea accept pentru a solicita utilizatorului valoarea nr_dept care va fi utilizat n instruciunea select. accept dept prompt 'Introduceti numarul departamentului:' select from lista_dept where nr_dept = &dept; Exemplul urmtor folosete comanda accept i caracterul & pentru a indica programului Oracle s foloseasc valorile introduse n instruciunea insert: accept ang nume prompt 'Introduceti numele angajatului:' accept ahg_prenume prompt 'Introduceti prenumele angajatului:' accept ang_salariu prompt 'Introduceti salariul angajatului:' insert into ang (prenume, nume, salariu) values (&ang_prenume, &ang_nume, &ang_salariu); 62

Rezumat
Selectarea datelor din baza de date nseamn interogarea bazei de date i obinerea unor linii de date drept rspuns. ntreinerea datelor din baza de date implic actualizarea, inserarea i eliminarea datelor din baza de date pentru a asigura integritatea i caracterul complet al datelor. Unul dintre motivele fundamentale ale existenei bazelor de date este ca oamenii s le acceseze i s citeasc datele stocate n ele. Pentru satisfacerea cerinelor acestor utilizatori, datele trebuie pstrate actuale i precise. ntreinerea datelor este o condiie esenial a eficienei bazei de date. Afiarea structurii tabelelor este un aspect important al selectrii i ntreinerii tabelelor Oracle. Trebuie s cunoatei numele, tipul i lungimea datelor unei coloane pentru a reui s selectai i s ntreinei datele.

LUCRAREA DE LABORATOR Nr. 8


SQL (limbaj structurat de interogare)
SQL (limbaj structurat de interogare) este limbajul standard pentru sistemele de gestionare a bazelor de date relaionale, definit de ANSI (American National Standards Institute). SQL este un limbaj neprocedural. Operaiile executate n baza de date Oracle sunt efectuate folosind instruciuni SQL. SQL posed un set cuprinztor de comenzi pentru o mare diversitate de sarcini, printre care: - interogarea datelor; - actualizarea, inserarea i eliminarea datelor; - crearea, modificarea i eliminarea obiectelor bazelor de date; - controlul accesului la baza de date; - asigurarea integritii i consistenei datelor. O instruciune SQL este un set de cuvinte rezervate cu o sintax determinat, care specific serverului Oracle s efectueze o aciune. O instruciune SQL incomplet nu poate fi executat; programul Oracle returneaz o eroare. Instruciunile SQL se mpart n urmtoarele categorii: Instruciuni DML (Data Manipulation Language - limbaj de manipulare a datelor), interogheaz sau manipuleaz obiecte existente n schem. 63

De exemplu, ele v permit s inserai noi linii ntr-un tabel sau ntr-o vedere. Instruciuni DDL (Data Definition Language - limbaj de definire a datelor), definesc sau modific structura obiectelor din schem. De exemplu, pentru crearea unui tabel, vei folosi instruciuni DDL. Instruciuni pentru controlul tranzaciilor, gestioneaz toate modificrile efectuate de instruciunile DML. De exemplu, instruciunile pentru controlul tranzaciilor salveaz datele. Instruciuni SQL ncapsulate, ncorporeaz instruciuni DML, DDL i instruciuni pentru controlul tranzaciilor ntr-un program scris ntr-un limbaj procedural. De exemplu, o instruciune SQL ncapsulat v permite s creai i s eliberai cursori. Instruciunea pentru controlul sistemului alter session este utilizat pentru a termina execuia proceselor i pentru a gestiona ali parametri de sistem. Instruciuni pentru controlul sesiunii, gestioneaz proprietile sesiunii unui utilizator. De exemplu, vei folosi instruciuni pentru controlul sesiunii pentru a activa i dezactiva roluri. SQL este un limbaj utilizat de: - administratorii bazei de date; - creatorii de aplicaii; - administratorii de securitate ai bazei de date; - utilizatorii finali. Limbajul SQL permite s dezvoltai programe performante, s lucrai cu grupuri mari de date, v scutete de efortul de a stabili metoda corect de acces, determin cele mai rapide i eficiente mijloace de accesare a datelor. n plus, SQL permite utilizarea rezultatelor unei interogri ca date de intrare pentru o alt instruciune de interogare, Limbajul SQL este folosit pentru a crea i a manipula toate obiectele Oracle. Aceste obiecte includ tabele, vederi, grupuri, instantanee, secvene, sinonime, roluri i spaii-tabel.

Stilul i structura limbajului SQL


Limbajul SQL reprezint mijlocul principal de comunicare cu baza de date Oracle. Trebuie nelese cteva stiluri i structuri, printre care: Programul SQL*Plus trateaz comenzile dumneavoastr n mod nedifereniat indiferent dac sunt tastate cu majuscule sau cu litere 64

mici. Singura excepie o reprezint cazul n care se efectueaz o comparaie. Instruciunile SQL ncep cu comanda SQL, urmat de restul instruciunii. De exemplu, urmtoarea instruciune SQL folosete comanda SQL drop table pentru a elimina din baza de date obiectul-tabel ang: drop table ang; Atunci cnd serverul Oracle genereaz un cod de eroare, acesta are urmtoarea structur: error: cod_ eroare: descriere eroare Denumirea obiectelor Multe dintre obiectele Oracle sunt compuse din pri pe care trebuie s le denumii atunci cnd creai obiectul. De exemplu, coloanele tabelelor i secvenele sunt denumite n timp ce sunt create. Limbajul SQL impune o serie de reguli privind denumirea obiectelor. Regulile urmtoare sunt valabile pentru numele obiectelor, precum i cele ale utilizatorilor bazei de date: 1. Numele trebuie s aib ntre 1 i 30 de octei. Numele bazelor de date sunt limitate la opt octei; legturile bazelor de date pot avea pn la 128 de octei. 2. Numele nu pot fi ncadrate ntre ghilimele simple (apostrofe). 3. Nu se face distincie ntre majuscule i litere mici. 4. Numele pot conine numai caractere alfanumerice i caracterele _, $ i #. Numele legturilor bazelor de date pot conine i caracterele . i @. Numele trebuie s nceap cu un caracter alfabetic. 5. Un nume nu poate fi un cuvnt rezervat Oracle sau SQL. 6. Numele trebuie s fie unic n propriul spaiu al numelor. Toate obiectele enumerate ntr-un anumit aliniat sunt coninute n respectivul spaiu al numelor. Aceasta nseamn, de exemplu, ca un tabel i o vedere se gsesc n acelai spaiu al numelor drept pentru care nu pot avea nume identice. Spaiile-tabel se gsesc n alt spaiu al numelor dect indecii i prin urmare pot avea nume identice. Fiecare dintre urmtoarele aliniate reprezint un singur spaiu al numelor. Tabele, vederi, secvene, instantanee, pachete, sinonime private, proceduri de sine stttoare i funcii Indeci Restricii 65

Grupuri Declanatori Legturi private de baze de date Legturi publice de baze de date Spaii-tabel Segmente de revenire Sinonime publice Rolurile utilizatorilor 7. Un nume poate fi ncadrat ntre ghilimele duble. Iat cteva motive pentru folosirea ghilimelelor duble: Dac numele conine blancuri Dac vrei ca programul s fac deosebirea ntre majuscule i literele mici Dac vrei s ncepei numele cu orice altceva dect un caracter alfabetic Pentru a descrie acelai element, este bine s folosii acelai nume de coloan n toate tabelele. Referirea obiectelor Oracle Sintaxa general pentru referirea unui obiect sau a unei pri a unui obiect este: schema.nume_obiect.nume_parte_obiect @legatura_baza_de_date Schema este locul n care se gsete obiectul. Acest identificator v permite s facei referire la un obiect situat n baza de date a altui utilizator. Dac omitei acest identificator, Oracle consider c obiectul se gsete n schema dumneavoastr. nume_obiect este numele obiectului la care se face referire. nume_parte obiect v permite s facei referire la o parte a unui obiect, cum ar fi o coloan a unui tabel. Acest parametru este opional. legatura_baza_de_date este numele bazei de date care conine obiectul. Aceasta nu poate fi baza dumneavoastr de date - este baza de date a altui utilizator, pe care vrei s o accesai. Dac este omis acest parametru, programul Oracle presupune c facei referire la un obiect din propria dumneavoastr baz de date. ntr-o instruciune SQL care face referire la un obiect Oracle, programul evalueaz contextul instruciunii SQL i localizeaz obiectul n spaiul numelor corespunztor. Dac programul Oracle nu reuete s 66

gseasc obiectul n spaiul numelor corespunztor, returneaz o eroare. Programul Oracle ncearc ntotdeauna s localizeze obiectul n schema dumneavoastr nainte de a lua n considerare spaiile numelor din afara schemei dumneavoastr. Dac obiectul nu se gsete n schema dumneavoastr, programul Oracle caut n spaiul numelor care conine sinonimele publice. Dac obiectul nu este gsit, Oracle returneaz un mesaj de eroare. Analiza instruciunilor SQL Atunci cnd o aplicaie lanseaz o instruciune SQL, reprezentarea analizat sintactic a instruciunii SQL este ncrcat n zona SQL partajat din server. Analiza presupune efectuarea urmtoarelor operaii: - verificarea corectitudinii sintactice i semantice a instruciunilor SQL; - stabilirea faptului dac procesul care a lansat instruciunea SQL posed privilegiile necesare pentru executarea ei; - consultarea dicionarului de date n vederea analizrii definiiilor tabelului i ale coloanelor; - instituirea de blocaje asupra obiectelor necesare astfel, nct definiiile acestora s nu se modifice n timpul execuiei; - determinarea planului optim de execuie care urmeaz s fie utilizat n momentul executrii instruciunii. Analiza are loc numai dac nu exist nici o alt instruciune SQL identic n zona SQL partajat. Dac n aceast zon exist deja o copie, sistemul Oracle folosete copia din memorie n loc s analizeze copia codului surs, pe care ncercai s o executai. n cazul n care nu exist nici o copie, sistemul Oracle trece la analiza instruciunii. Analiza instruciunii are loc o singur dat, indiferent de cte ori este executat instruciunea. Programul Oracle re-execut instruciunea analizat la fiecare referire ulterioar a instruciunii respective. Validarea sintactic i semantic efectuat n timpul analizei detecteaz numai erorile care pot fi gsite naintea execuiei instruciunii. Exist ns erori pe care analiza nu le poate detecta. De exemplu, erorile legate de conversia datelor nu pot fi depistate nainte de execuia instruciunii. Procesarea interogrilor Procesarea interogrilor este puin diferit de a altor tipuri de instruciuni SQL, deoarece interogrile returneaz date sub form de 67

rezultate daca execuia instruciunii s-a ncheiat cu succes. Instruciunile non-interogative returneaz fie succesul" fie eecul", ns o interogare returneaz linii multiple de date. Aceste date sunt prezentate utilizatorului n format tabelar. Interogrile pot deveni interogri implicite n anumite instruciuni SQL. De exemplu, fiecare dintre instruciunile urmtoare necesit o interogare ca parte a execuiei: - update - delete from - create table as Execuia instruciunilor SQL Lista urmtoare specific fazele execuiei unei instruciuni SQL: 1. Este creat automat un cursor n ateptarea execuiei instruciunii SQL. 2. Programul Oracle analizeaz instruciunea SQL. 3. n cazul n care rezultatele unei interogri nu sunt cunoscute, programul Oracle determin caracteristicile (tipul datelor i lungimea) datelor rezultatului. 4. Programul Oracle definete domeniile datelor de ieire. Acestea includ locaia, dimensiunea i tipul de date ale variabilelor care urmeaz s primeasc fiecare dintre valorile preluate. 5. Programul Oracle efectueaz legarea tuturor variabilelor, cu alte cuvinte, definete valoarea fiecrei variabile. De exemplu, programul Oracle stabilete valoarea ang_nume n timpul procesului de legare. 6. n sfrit, programul Oracle execut instruciunea SQL. 7. Liniile de date sunt selectate (i ordonate dac este necesar) i fiecare preluare succesiv citete o nou linie a rezultatului pn n momentul citirii tuturor liniilor. SQL i SQL*Plus SQL este limbajul folosit pentru comunicarea cu baza de date relaionale. SQL*Plus este un instrument al serverului Oracle care recunoate i execut instruciuni SQL. SQL*Plus nu este o extensie sau un superset al limbajului SQL. Unul dintre avantajele SQL*Plus este c putei s editai sau s salvai comenzi SQL care se gsesc n tamponul SQL. Tamponul SQL este o poriune a memoriei gestionate de SQL*Plus care stocheaz o singur comand SQL la un moment dat. Aceast 68

comand SQL rmne n tamponul SQL pn cnd este lansat o nou comand. Procesarea vectorial a comenzilor SQL Ori de cte ori aplicaia dumneavoastr transmite o instruciune serverului Oracle, aplicaia efectueaz un apel de funcie. Procesarea vectorial permite aplicaiei dumneavoastr s execute o singur instruciune SQL de mai multe ori cu o singur apelare a programului Oracle. De exemplu, folosind procesarea vectorial, aplicaia dumneavoastr poate efectua un singur apel pentru a executa o instruciune SQL de 50 de ori. Prin reducerea numrului de apelri ale programului Oracle, se reduc procesrile suplimentare i cresc performanele serverului. Instrumentele Oracle cum sunt SQL*Forms, SQL*Plus i SQL*Loader utilizeaz automat procesarea vectorial. Partajarea instruciunilor SQL Programul Oracle detecteaz mai multe aplicaii care transmit serverului instruciuni SQL identice. Atunci cnd programul recepioneaz o instruciune SQL duplicat, el nu analizeaz aceast a doua instruciune SQL. Programul consult zona SQL partajat pentru a detecta instruciuni identice. Aceste instruciuni pot proveni de la aplicaii, de la utilizatorii interactivi sau chiar de la instruciuni SQL recursive. Atunci cnd sunt detectate instruciunile SQL duplicate, prima apariie a instruciunii respective este utilizat n comun de toate celelalte procese care au nevoie de ea. Utilizarea zonei SQL partajate reduce gradul de utilizare a memoriei serverului bazei de date, ducnd la mbuntirea performanelor.

Funciile SQL
Ce sunt funciile?
Funciile sunt operaii predefinite care manipuleaz date i returneaz un rezultat. Funciile pot genera dou tipuri de date de ieire. Primul tip - datele de intrare dup manipularea acestora, iar la doilea furnizeaz informaii n legtur cu datele de intrare. De exemplu, o funcie poate converti la majuscule toate caracterele irului de intrare; alt funcie poate returna numrul de caractere din irul de intrare. 69

Exist dou tipuri de funcie: Funcii mono-linie; Funcii multi-linie sau de grup. Deosebirea dintre aceste dou tipuri de funcii este dat de numrul de linii asupra crora acioneaz. Funciile sunt asemntoare operatorilor, cu excepia faptului c primele pot aciona asupra unor argumente multiple. Sintaxa general a funciilor este urmtoarea: funcie (argument1, argument2, ...) n continuare sunt prezentate cele dou categorii: funcii mono-linie i funcii de grup.

Mersul lucrrii:
Verificai funciile de mai jos n timpul efecturii lucrrii. Repetai toate exemplele de mai jos. ASCII Returneaz echivalentul zecimal al unui caracter ASCII Sintax: acii(char) Culegei: select ascii('B') from dual; Rezultatul: ascii('B') ---------66 CHR Returneaz caracterul ASCII corespunztor valorii ntregi furnizate ca argument. De exemplu, echivalentul ASCII al literei K este 75. Sintax: CHR(integer) Culegei: select chr(75) from dual; Rezultatul: C K LENGTH Returneaz numrul de caractere (lungimea) al irului de intrare. Sintax: length(char) Culegei: select length('ABcDEFGHIJ') from dual; Rezultatul: LENGTH('ABCDEFGHIJ') -------------------70

10 LOWER Returneaz irul de intrare dup trecerea tuturor caracterelor la litere mici. Sintax: lower(char) Culegei: select lower('NISPORENI') from dual; Rezultatul: LOWER('NI --------nisporeni LPAD Returneaz irul de intrare n stnga cruia este adugat secvena de caractere din cel de-al treilea argument. Aceast funcie are trei argumente: primul este irul de intrare; al doilea este lungimea maxim a valorii returnate; iar al treilea este secvena de caractere care va fi adugat. Sintax: lpad(sir de intrare, lungime, secventa de completare) Culegei: select lpad('AVERTISMENT: ',20,'***** ') from dual; Rezultatul: LPAD('AVERTISMENT:', -------------------***** *AVERTISMENT: REPLACE Returneaz irul de intrare n care fiecare apariie a irului de cutare este nlocuit cu irul de nlocuire. Sintax: replace(sir intrare,sir cautare,sir inlocuire) Culegei: select replace(Pete','Pe','123') from dual; Rezultatul: REPLA ----123te UPPER Returneaz irul de intrare dup trecerea tuturor caracterelor la majuscule. Sintax: upper(char) 71

Culegei: select upper('hincesti') From dual; Rezultatul: UPPER('H -------HINCESTI

Funcii numerice
Funciile numerice primesc date de intrare numerice i returneaz o valoare numeric. ABS Returneaz valoarea absolut a valorii de intrare. Sintax: abs(n) Culegei: select abs(3) from dual; Rezultatul: ABS(3) ----3 POWER Returneaz valoarea de intrare ridicat la puterea n. Sintax: power(valoare,n) Culegei: select power(4,2) from dual; Rezultatul: POWER(4,2) ---------16 ROUND Rotunjete valoarea de intrare la numrul specificat de poziii zecimale. Sintax: round(valoare intrare,precizie) Culegei: select round(123.456,2) from dual; Rezultatul: ROUND(12'3.456,2) ----------------123.46 TRUNC Trunchiaz valoarea de intrare la numrul specificat de poziii zecimale. Sintax: trunc(valoare intrare,precizie) 72

Culegei: select trunc(213.456,2) FROM DUAL; Rezultatul: TRUNC(213.456,2) --------------213.45

Funcii de tip dat calendaristic


Aceste funcii primesc argumente de tip dat calendaristic (date). ADD_MONTHS Returneaz o dat reprezentnd data specificat plus numrul specificat de luni. n exemplul urmtor, data curent este 23 februarie 2001. Sintax: add_months(data, numar de luni) Culegei: select add_months(sysdate,6) FROM DUAL; Rezultatul: ADD_MONTH --------23-AUG-01 LAST_DAY Returneaz ultima zi a lunii specificate. Sintax: last_day(data) Culegei: select last_day('1-may-95') FROM DUAL; Rezultatul: LAST_DAY( ---------31-MAY-95 MONTHS_BETWEEN Returneaz numrul de luni la care data2 precede data1. Sintax: months_between(datal,data2) Culegei: select months_between('1-MAR-95','1-JAN-95') from dual; Rezultatul: MONTHS_BETWEEN('1-MAR-95','1-JAN-95') ------------------------------------2 SYSDATE Returneaz data i ora curent ale sistemului. Aceast funcie nu necesit argumente. Sintax: sysdate 73

Culegei: select sysdate from dual; Rezultatul: SYSDATE --------23-FEB-01

Funcii de conversie
Funciile de conversie transform valorile de intrare dintr-un tip de dat n altul. TO_CHAR Convertete o dat sau un numr ntr-un ir de caractere. Sintax: to_char(intrare,format) Culegei: select to_char(SYSDATE,'mm/dd/yy') from dual; Rezultatul: TO_CHAR(SYSDATE,'MM/DD/YY') ----------------------------02/23/01 TO_DATE Convertete o valoare numeric sau de tip caracter la tipul date. Sintax: to_date(sir,format) Culegei: select to_date('04/21/99','MM/DD/YY') from dual; Rezultatul: TO_DATE(' --------21-APR-99 TO_NUMBER Convertete un ir de caractere ntr-un format numeric. Sintax: to_number(sir caractere,format) Culegei: select to_number ('1234.56') FROM DUAL; Rezultatul: TO_NUMBER('1234.56') -------------------1234.56

74

Alte funcii mono-linie


GREATEST Returneaz cea mai mare valoare dintr-o list de valori de intrare. Sintax: greatest(valoarel,valoare2,...) Culegei: select greatest('Ion','Vasile','Maria') FROM DUAL; Rezultatul: GREATE -----Vasile LEAST Returneaz cea mai mic valoare dintr-o list de valori de intrare. Sintax: least(valoarel,valoare2,...) Culegei: select least('Ion','Vasile','Maria') from dual; Rezultatul: LEA --Ion USER Returneaz numele utilizatorului curent al bazei de date Oracle. Aceast funcie nu necesit nici un argument. Sintax: User Culegei: select user from dual; Rezultatul: USER -----SCOTT

Funcii de grup
Funciile de grup returneaz o singur valoare pentru un grup de linii interogate. AVG Returneaz valoarea medie pentru un grup de linii. Sintax: avg(valoare) Culegei: select avg (ani) from angajati; 75

Rezultatul: AVG(ANI) --------34.625 COUNT Returneaz numrul de linii dintr-o interogare. n funcia count, putei utiliza urmtorii specificatori: Sintax: count Culegei: select count (*)from angajati; Rezultatul: COUNT(*) --------8 MAX Returneaz valoarea maxim a expresiei. Sintax: max(expresie) Culegei: select max (ani) from angajati; Rezultatul: MAX(ANI) --------42 MIN Returneaz valoarea minim a expresiei. Sintax: min(expresie) Culegei: select min (ani) from angajati; Rezultatul: MIN(ANI) --------25 SUM Returneaz suma valorilor expresiei. Sintax: sum(expresie) Culegei: select sum (ani) from angajati; Rezultatul: SUM(ANI) --------277

76

Rezumat
SQL este singurul limbaj de comunicare cu baza de date Oracle. Acest limbaj posed propria structur i sintax. Limbajul SQL permite s lucrai cu obiectele de nivel nalt ale schemei n locul liniilor individuale. In plus, el limiteaz magistralele prin intermediul crora putei interaciona cu serverul, mbuntind astfel securitatea serverului i reducnd riscul compromiterii datelor. Putei comunica interactiv cu baza de date Oracle prin folosirea limbajului SQL. n plus, chiar aplicaiile dumneavoastr utilizeaz limbajul SQL pentru a accesa baza de date. Folosirea limbajului SQL este simpl; exist doar cteva reguli care trebuie respectate la crearea instruciunilor SQL, lucru care sporete flexibilitatea i puterea acestor instruciuni. Funciile sunt rutine predefinite care manipuleaz date i returneaz o valoare. Funciile returneaz o valoare care fie descrie datele de intrare, fie reprezint rezultatul manipulrii datelor de intrare. Funciile mono-linie returneaz un rezultat pentru fiecare linie a unei interogri, n timp ce funciile de grup returneaz un singur rezultat pentru un grup de linii ale unei interogri.

LUCRAREA DE LABORATOR NR. 9


Reuniunile i uniunile
Reuniunea (join) i uniunea (union) sunt dou tehnici utilizate pentru a combina diverse grupuri de date. In momentul n care datele sunt grupate logic, acestea pot fi afiate sau pot fi procesate n continuare. Att reuniunea ct i uniunea se realizeaz n instruciunea select. Reuniunile si uniunile se folosesc pentru a grupa mpreun date stocate n tabele diferite. Aceste dou metode de grupare adun la un loc 77

date din tabele multiple care sunt nrudite ntre ele. Aceast caracteristic simplific procesul de interogare.

Reuniuni simple
O reuniune simpl (simple join) este o instruciune select care returneaz linii din dou sau mai multe tabele. Aceste tabele se afl n relaie, sau sunt reunite, pe baza coloanelor pe care le au n comun. Tabelele care sunt reunite pe baza coloanelor comune apar n clauza from a instruciunii select. n acest capitol, este tratat reuniunea a dou tabele, ns aceste informaii sunt aplicabile i reuniunii a trei sau mai multe tabele. Oracle nu impune nici o limitate n legtur cu coloanele pe care le putei selecta din fiecare tabel. Putei s nu selectai nici o coloan sau s selectai coloane multiple din fiecare tabel. Coloanele pe care le specificai n clauza where nu este necesar s apar n lista select. Reunirea a dou tabele fr clauza where creeaz un produs cartezian. Acest produs combin fiecare linie a primului tabel cu fiecare linie a celui de-al doilea tabel. De exemplu, produsul cartezian al unui tabel cu 10 linii cu un alt tabel cu 25 de linii reprezint o reuniune cu 250 de linii. De obicei acest rezultat nu are nici un sens i nu este folosit aproape deloc. Putei substitui numele real al tabelului cu aliasul acestuia n clauza from a instruciunii select. In acest caz ns, mediul Oracle impune substituirea numelui tabelului cu aliasul pe tot parcursul instruciunii select, att n lista select, ct i n clauza where.

Mersul lucrrii:
Pentru a putea urmri procesul reuniunilor, pe lng tabelul creat mai nainte Angajati mai crem tabelul contabilitate: /* crearea tablului contabilitate */ drop table contabilitate; create table contabilitate ( nas char(9) not null, nr_postului varchar2(6) not null, categorie NUMBER(1), salariu NUMBER(7) ); /* Inserarea datelor in tabelul contabilitate */ 78

insert into contabilitate values ('199073432', 'ps272', 2, 235); insert into contabilitate values ('198029823', 'ps275', 3, 142); insert into contabilitate values ('199549525', 'ps71', 1, 225); insert into contabilitate values ('199579013', 'ps175', 4, 335); insert into contabilitate values ('199571002', 'ps75', 5, 535); insert into contabilitate values ('199487815', 'ps410', 1, 138); insert into contabilitate values ('199665972', 'ps235', 2, 232); insert into contabilitate values ('199623961', 'ps410', 3, 335); /* */ select * from contabilitate; Rezultatul: NAS NR_POS CATEGORIE SALARIU --------- ------ --------- --------199073432 ps272 2 235 198029823 ps275 3 142 199549525 ps71 1 225 199579013 ps175 4 335 199571002 ps75 5 535 199487815 ps410 1 138 199665972 ps235 2 232 199623961 ps410 3 335 8 rows selected. Tabelul creat mai nainte Angajati: select * from Angajati;
NAS --------199073432 198029823 199549525 199579013 199571002 199487815 NUME --------Rusu Dionis Bucatru Gurau Ionescu Dusca PRENUME --------Maria Pavel Felix christina Ilie Lucia S ANI ANGAJAT NR_ NR_POS - --- --------- --- -----F 35 20-OCT-95 u12 ps272 M 42 17-NOV-98 u12 ps275 M 25 08-JAN-95 u14 ps71 F 35 27-JAN-94 u12 ps175 M 35 19-SEP-95 u14 ps75 F 38 12-MAR-95 u18 ps410

79

199665972 Vasilescu Ion 199623961 Scutaru Maria 8 rows selected.

M F

32 10-JAN-95 u10 ps235 35 26-JAN-96 u16 ps410

Sintaxa unei reuniuni simple este urmtoarea: select coloana(e) from tabel1, tabel2 where tabel1.coloana1 = tabel2.coloana1 unde: coloana(e) reprezint coloana sau coloanele din care se citesc datele tabel1, tabel2 reprezint tabelele din care se citesc datele tabel1.coloana1 = tabel2.coloana1 reprezint condiia care reunete cele dou tabele. Aceast instruciune creeaz o reuniune pentru tabelele Angajati i contabilitate: select Angajati.nume, Angajati.prenume, contabilitate.SALARIU from Angajati, contabilitate where Angajati.NAS = contabilitate.NAS; Rezultatul: NUME PRENUME SALARIU --------- --------- --------Dionis Pavel 142 Rusu Maria 235 Dusca Lucia 138 Bucatru Felix 225 Ionescu Ilie 535 Gurau christina 335 Scutaru Maria 335 Vasilescu Ion 232 8 rows selected. Pentru a returna anumite linii dintr-o reuniune, pur i simplu introducei n clauza where, pe lng condiia de reunire, o condiie de cutare: select Angajati.nume, Angajati.prenume, contabilitate.SALARIU from Angajati, contabilitate where Angajati.NAS = contabilitate.NAS and Angajati.nume like 'B%'; 80

Rezultatul: NUME PRENUME SALARIU --------- --------- --------Bucatru Felix 225

Reuniuni externe
O reuniune extern (outer join) este asemntoare cu o reuniune simpl. O reuniune extern returneaz toate liniile pe care le returneaz reuniunea simpl, precum i toate liniile ale cror valori din coloanele dup care se face reuniunea apar ntr-un tabel i nu se regsesc n coloanele corespunztoare ale nici unei linii din cellalt tabel. Sintaxa reuniunii externe este select coloana(e) from tabel1, tabel2 where tabel1.coloana1 = tabel2.coloana(+) unde: - (+) este folosit pentru a indica o reuniune extern; - coloana(e) reprezint coloana sau coloanele din care se citesc datele; - tabel1, tabel2 reprezint tabelele din care se citesc datele; - tabel1.coloana1 = tabel2 .coloana2 reprezint condiia care reunete cele dou tabele. Semnul plus (+) poate fi plasat n oricare parte a condiiei din clauza where, ns nu n ambele pri. Simbolul reuniunii externe trebuie plasat n dreapta numelui tabelului n care nu apar linii care se gsesc n cellalt tabel. Programul Oracle genereaz nuluri pentru coloanele acestui tabel ori de cte ori tabelul nu are nici o linie care s poat fi reunit cu o linie din cellalt tabel. Pentru a ilustra reuniunea extern crem tabelul departament, n care sunt afiate toate posturile, inclusiv i cele vacante. /* crearea tablei departament */ drop table departament; create table departament ( nas char(9) not null, nr_postului varchar2(6) not null );
/* insert insert insert Inserarea datelor in tabelul contabilitate */ into departament values ('199073432', 'ps272'); into departament values ('198029823', 'ps275'); into departament values ('199549525', 'ps71');

81

insert insert insert insert insert insert insert insert

into into into into into into into into

departament departament departament departament departament departament departament departament /*

values values values values values values values values

('199579013', ('199571002', ('199487815', ('199665972', ('199623961', ('199623962', ('199623963', ('199623964', */

'ps175'); 'ps75'); 'ps410'); 'ps235'); 'ps410'); 'ps410'); 'ps410'); 'ps410');

Aspectul tablei departament Select * from departament; Rezultatul: NAS NR_POS --------- -----199073432 ps272 198029823 ps275 199549525 ps71 199579013 ps175 199571002 ps75 199487815 ps410 199665972 ps235 199623961 ps410 199623962 ps410 199623963 ps410 199623964 ps410 11 rows selected. Instruciunea urmtoare creeaz o reuniune extern a tabelelor Angajati i departament. Remarcai faptul c simbolul reuniunii externe este plasat n dreptul tabelului Angajati, deoarece acestuia i lipsesc cteva linii care se gsesc n tabelul departament. Remarcai, de asemenea, faptul c sunt afiate toate liniile din tabelul departament. select Angajati.nume, Angajati.prenume, departament.nr_postului from Angajati, departament where Angajati.NAS(+) = departament.NAS; Rezultatul: NUME PRENUME NR_POS --------- --------- -----82

Dionis Rusu Dusca Bucatru Ionescu Gurau Scutaru

Pavel Maria Lucia Felix Ilie christina Maria

Vasilescu Ion 11 rows selected.

ps275 ps272 ps410 ps71 ps75 ps175 ps410 ps410 ps410 ps410 ps235

Reuniuni i vederi
Putei folosi o reuniune pentru a simplifica crearea unei vederi. De exemplu, putei folosi o reuniune pentru a defini o vedere care este o colecie de coloane sau linii (din tabele multiple) aflate n relaie. Vederea ascunde faptul c aceste informaii provin din tabele multiple.

Reuniuni i grupuri
n serverul Oracle, este recomandabil s grupai numai acele tabele care sunt reunite frecvent n instruciuni SQL pe baza coloanelor cheie ale grupului. Gruparea determin mbuntirea performanelor reuniunilor ns va duce cu siguran la scderea performanelor parcurgerii integrale a tabelelor, operaiunilor de inserare n tabele i a instruciunilor update care modific valori ale cheii grupului. nainte de a grupa coloanele reunite, cntrii avantajele i dezavantajele, ntruct aceast reuniune afecteaz performanele serverului.

union
union este un operator care combin rezultatele a dou interogri ntr-un singur rezultat. Acest operator returneaz numai valorile distincte rezultate din interogare. Creai dou tabele simple articole_1 i articole_2: create table articole_1( articol varchar2(15) ); 83

insert into articole_1 values insert into articole_1 values insert into articole_1 values insert into articole_1 values create table articole_2( articol varchar2(15) ); insert into articole_2 values insert into articole_2 values insert into articole_2 values insert into articole_2 values insert into articole_2 values insert into articole_2 values

(bobina); (condensator); (dioda); (comutator);

(bobina); (motor); (tranzistor); (cablu); (rezistor); (cablu);

Culegei: select articol articol1 from articole_1; Rezultatul: articol1 -----------bobina condensator dioda comutator Culegei: select articol articol2 from articole_2; Rezultatul: articol2 --------------bobina motor tranzistor cablu rezistor cablu 6 rows selected. Instruciunea urmtoare efectueaz o uniune a celor dou liste: select articol from articole_1 84

union select articol from articole_2; Rezultatul: ARTICOL --------------bobina cablu comutator condensator dioda motor rezistor tranzistor 8 rows selected. Dup cum se poate vedea din exemplul precedent, toate valorile distincte din ambele tabele sunt incluse n rezultatele interogrii. Atunci cnd operatorii union i union all sunt folosii n instruciuni care selecteaz date de tip caracter, tipul valorilor returnate este dup cum urmeaz: - dac ambele interogri selecteaz valori de tip char, valorile returnate vor fi de tip char. - dac cel puin una dintre interogri selecteaz valori de tip varchar2, valorile returnate vor fi de tip varchar2.

union all
Operatorul union all combin rezultatele a dou interogri ntrun singur rezultat. Acest operator returneaz toate valorile furnizate de interogri. select articol from articole_1 union all select articol from articole_2; Rezultatul: ARTICOL --------------bobina condensator dioda comutator bobina 85

motor tranzistor cablu rezistor cablu 10 rows selected. Dup cum se poate vedea din exemplul precedent, toate valorile din ambele tabele sunt incluse n rezultatele interogrii, inclusiv liniile de date duplicate.

order by
Putei folosi clauza order by n instruciunea select a unei interogri union. Pentru a face acest lucru, trebuie s specificai n instruciunea union numrul coloanei (nu numele acesteia) dup care dorii s fie ordonate datele. Instruciunea urmtoare folosete clauza order by pentru a sorta rezultatele n ordinea ascendent a coloanei articol, care este prima (n cazul dat unica). Culegei: select articol from articole_1 union select articol from articole_2 order by 1; Rezultatul: ARTICOL --------------bobina cablu comutator condensator dioda motor rezistor tranzistor 8 rows selected.

intersect
Operatorul intersect combin dou instruciuni select i returneaz numai acele linii, care sunt returnate de ambele interogri. Instruciunea urmtoare efectueaz o intersecie a celor dou liste: 86

select articol from articole_1 intersect select articol from articole_2; Rezultatul: ARTICOL --------bobina Acest operator returneaz numai acele articole care exist n ambele liste.

minus
Operatorul minus combin rezultatele a dou interogri i returneaz numai acele valori care sunt selectate de prima interogare dar nu i de a doua. Folosind aceleai liste din exemplul anterior, fie urmtoarea instruciune: select articol from articole_1 minus select articol from articole_2; Rezultatul: ARTICOL -------------comutator condensator dioda n acest exemplu, instruciunea returneaz numai acele linii care se gsesc n prima list, dar nu i n a doua.

Rezumat
n aceast lucrare, ai aflat c reuniunea i uniunea sunt dou metode de grupare logic a datelor din tabele distincte. Odat grupate, putei s afiai grupul rezultant sau s-1 prelucrai n continuare. Reuniunea i uniunea se folosesc pentru a grupa date din tabele multiple n vederea afirii lor pe ecran sau n vederea prelucrrii lor n continuare. Aceste tehnici v permit s interogai tabele multiple care se afl ntr-o relaie dat de una sau mai multe coloane comune, pentru a crea un singur set de rezultate. Reuniunea i uniunea folosesc instruciunea select pentru a interoga baze de date multiple. Prin utilizarea diverselor tipuri de reuniuni i uniuni, putei controla domeniul de valori returnate de instruciunea select. 87

LUCRAREA DE LABORATOR Nr. 10


Vederi
Vederile sunt tabele logice asemntoare unor ferestre prin care putei privi unul sau mai multe tabele, sau vederi. O vedere are aspectul unui tabel coninnd coloane si linii care pot fi actualizate i n care se pot efectua inserri sau eliminri ca i cum ar fi cu adevrat un tabel. O vedere este de fapt un tabel logic care nu stocheaz date. Ea i preia datele din tabelele sau vederile pe care se bazeaz. Toate operaiile efectuate asupra unei vederi afecteaz practic tabelele de baz ale vederii. O vedere este creat folosind o interogare i prin urmare poate fi privit ca fiind un tabel virtual sau o interogare stocat. ntruct vederile arat i se comport ca nite tabele, ele pot fi utilizate n majoritatea situaiilor pe post de tabele. Vederile sunt dinamice i afieaz ntotdeauna informaiile curente ale tabelelor. Vederile nu sunt diferite de instantaneele Oracle care prezint o imagine a datelor din trecut. Atunci cnd tabelele vederii sunt manipulate, aceste modificri sunt reflectate instantaneu n vedere. Vederile v permit s afiai datele ntr-o form diferit de cea n care sunt stocate n tabele. Vederile v permit s adaptai prezentarea datelor n conformitate cu cerinele specifice ale diverselor tipuri de utilizatori. n general, vederile sunt create n urmtoarele scopuri: - pentru a asigura un nivel mai nalt de securitate al bazei de date prin restrngerea accesului la un numr predeterminat de coloane i linii ale unui tabel. Acest lucru permite utilizatorilor s vad un subset restrns al datelor; - pentru simplificarea prezentrii datelor prin ascunderea structurilor reuniunilor i tabelelor care stau la baza vederii; - pentru afiarea datelor ntr-o alt reprezentare dect cea a tabelelor de baz. n plus, vederile pot simplifica efortul de programare prin posibilitatea de a interoga un tabel virtual n locul interogrii fiecruia dintre tabelele de baz. O vedere poate fi privit ca fiind o imagine a unui tabel existent sau a unei alte vederi. Vederile se comport foarte asemntor cu tabelele. 88

De exemplu, ca i n cazul tabelelor, putei avea pn la 255 de coloane ntr-o vedere. Vederile pot fi interogate, actualizate i se pot efectua inserri n ele. Toate operaiile efectuate asupra unei vederi afecteaz practic tabelele de baz ale vederii. In plus, vederile sunt supuse restriciilor de integritate i declanatorilor asociate tabelelor de baz.

Crearea vederilor
Pentru a crea o vedere, folosii comanda SQL create view. Putei defini o vedere cu orice interogare care face referire la tabele, instantanee sau alte vederi. Definiia unei vederi este stocat n dicionarul de date.

Mersul lucrrii:
Exemplul urmtor creeaz o vedere simpl, numit ang_vedere: create view ang_vedere AS select nas, nume, prenume, sexe FROM Angajati WHERE sexe = M; Rezultatul: View created. Vederea poate fi afiat cu ajutorul comenzilor asemntoare cu acele pentru tabele, de exemplu; Select * from ang_vedere; Rezultatul: NAS NUME PRENUME S --------- --------- --------- 198029823 Dionis Pavel M 199549525 Bucatru Felix M 199571002 Ionescu Ilie M 199665972 Vasilescu Ion M Vederea ang_vedere va face referire numai la acele linii pentru care sexe este M. Codul urmtor creeaz o vedere mai complex care reunete date din mai multe (dou) tabele. Concret, reprezint borderoul de pli al salariului remis casei i bazat pe tabelul Angajati, aflat la secia cadre i tabelul contabilitate aflat n contabilitate. Concomitent este fcut suma total, livrat casei pentru salariu. 89

create view casa as select Angajati.nume, Angajati.prenume, contabilitate.salariu from Angajati, contabilitate Where Angajati.NAS = contabilitate.NAS; Select * from casa; select sum (salariu) from casa; Rezultatul: View created. SQL> Select * from casa; NUME PRENUME SALARIU --------- --------- --------Dionis Pavel 142 Rusu Maria 235 Dusca Lucia 138 Bucatru Felix 225 Ionescu Ilie 535 Gurau christina 335 Scutaru Maria 335 Vasilescu Ion 232 8 rows selected. SQL> select sum (salariu) from casa; SUM(SALARIU) -----------2177 Studiai de sine stttor materialul care urmeaz i ncercai s implementai exemplele utilizate mai jos n schema dumneavoastr Comanda create view face obiectul urmtoarelor limitri: with check option nu este specificat n acest exemplu deoarece ntr-o vedere definit printr-o interogare care conine o reuniune nu pot fi inserate sau actualizate linii. Nu pot fi utilizate clauzele order by sau for update. Atunci cnd este creat o vedere cu o interogare care utilizeaz caracterul de nlocuire (*), programul Oracle expandeaz interogarea nlocuind caracterul (*) cu numele reale ale coloanelor atunci cnd stocheaz vederea n dicionarul de date. De exemplu, urmtoarea interogare va crea o vedere ang: 90

CREATE VIEW ang AS SELECT * FROM comp.ang; Oracle stocheaz n dicionarul de date interogarea de definire a vederii n forma urmtoare: CREATE VIEW ang AS SELECT "marca_ang", "prenume", "nume", "nr_dept" FROM comp.ang; Numele coloanelor au fost ncadrate ntre ghilimele, deoarece exist posibilitatea ca numele coloanelor obiectului de baz s fie introduse iniial cu ghilimele. Oracle v permite s creai o vedere a unor tabele chiar dac tabelele nu exist. Instruciunea create view force va obliga programul s creeze vederea chiar dac tabelele nu exist sau dac utilizatorul nu posed privilegiile corespunztoare n legtur cu tabelele respective. Dei programul va crea vederea chiar i n aceste situaii, utilizatorul nu va putea s o foloseasc. Vederea va deveni valid i accesibil utilizatorilor numai dup crearea tabelelor de baz, acordarea privilegiilor corespunztoare i recompilarea vederii. Instruciunea create view noforce va crea vederea numai dac tabelele de baz exist i utilizatorul posed privilegiile corespunztoare n legtur cu aceste tabele.

Privilegii referitoare la vederi


Pentru a crea o vedere n schema dumneavoastr, trebuie s posedai privilegiul de sistem create view. Pentru a crea o vedere n schema altui utilizator, este necesar privilegiul de sistem create any view. Aceste privilegii pot fi dobndite n mod explicit sau prin intermediul unui rol. Proprietarului unei vederi trebuie s i se acorde n mod explicit privilegiile necesare pentru accesarea tuturor obiectelor la care face referire vederea. Proprietarul nu poate obine aceste privilegii prin intermediul unui rol. n mod similar, putei utiliza o vedere numai n conformitate cu privilegiile acordate proprietarului. De exemplu, dac proprietarul vederii beneficiaz numai de privilegiul update pentru tabelul ANG, putei folosi aceast vedere numai pentru a actualiza liniile din tabelul ANG. 91

nlocuirea vederilor
Pentru a modifica definiia unei vederi, vederea trebuie nlocuit. Vederile pot fi nlocuite n dou moduri: Vederea poate fi distrus i apoi re-creat cu noua definiie. Atunci cnd vederea este distrus, toate privilegiile sunt retrase. Aceste privilegii trebuie s fie recreate pentru noua vedere. Vederea poate fi re-creat prin redefinirea ei cu instruciunea create view cu clauza opional or replace. Aceast metod este folosit pentru nlocuirea definiiei curente a unei vederi cu conservarea tuturor privilegiilor curente. Exemplul urmtor nlocuiete vederea ang_dept_nume cu noua definiie a vederii: CREATE or replace view ang_dept_nume as SELECT prenume, nume, marca_ang, dept.nr_dept FROM ang, dept WHERE ang.nr_dept = 15; nlocuirea vederilor are urmtoarele efecte: Definiia vederii din dicionarul de date este actualizat. Nici unul dintre obiectele de baz nu este afectat de nlocuirea vederii. Toate restriciile care existau n vederea original ns nu se regsesc n noua vedere, sunt distruse. Toate vederile i programele PL/SQL dependente de vederea nlocuit devin invalide. Pentru a nlocui o vedere, trebuie s posedai privilegiile de sistem necesare pentru distrugerea i crearea unei vederi.

Utilizarea vederilor
Vederile trebuie s fie tratate similar tabelelor n instruciunile SQL. De exemplu, instruciunea urmtoare interogheaz vederea ang_dept_nume: select prenume, nume, marca_ang from ang_dept_nume; Urmtorul exemplu insereaz o nou nregistrare n tabelul ANG utiliznd vederea ang_dept_nume: insert into ang_dept_nume values ('Thomas','Baker',281); 92

Putei folosi o vedere oriunde ai folosi un tabel n oricare dintre urmtoarele instruciuni SQL: select insert update comment lock table Utilizarea vederilor face obiectul urmtoarelor limitri: Nu putei folosi o vedere pentru a efectua operaii insert, update sau delete atunci, cnd interogarea vederii conine o operaie join, operatorii set sau distinct, o clauz group by sau o funcie group. Nu putei utiliza o vedere definit cu clauza with check option pentru a insera sau a actualiza tabelele de baz. Nu pot fi inserate linii n tabelul de baz, dac o coloan not null a liniei respective este definit fr clauza default value. Nu pot fi inserate linii n tabele utiliznd o vedere care a fost creat folosind expresia decode. Interogarea unei vederi nu poate s fac referire la pseudo-coloanele nextval sau currval. Dezavantajul utilizrii unei vederi este c aceasta adaug unul sau mai multe nivele de procesare atunci, cnd un utilizator interogheaz sau manipuleaz datele prin intermediul vederii. Utilizarea vederilor necesit un timp suplimentar de procesare nainte ca datele s fie citite, reducnd puin viteza de rspuns a serverului Oracle.

Recompilarea vederilor
Pentru a recompila n mod explicit o vedere, folosii comanda alter view nume_vedere compile. Recompilarea permite detectarea eventualelor erori referitoare la vederea respectiv naintea executrii vederii n mediul real al companiei. Este recomandabil s recompilai n mod explicit vederea dup orice modificare a oricruia dintre tabelele de baza ale vederii. Instruciunea urmtoare va recompila vederea ang_dept_nume: ALTER VIEW ang_dept_nume COMPILE; 93

Comanda alter view nu modific definiia vederii sau orice alt obiect care ar putea s depind de ea. Putei s recompilai orice vedere din schema dumneavoastr; pentru a recompila o vedere din alt schem, trebuie s posedai privilegiul de sistem alter any table.

Distrugerea vederilor
Pentru a distruge o vedere, utilizai comanda drop view. Exemplul urmtor distruge vederea ang_dept_nume: drop view ang_dept_nume; Putei s distrugei orice vedere din schema dumneavoastr. Pentru a distruge o vedere din schema altui utilizator, trebuie s posedai privilegiul de sistem drop any view.

Rezumat
O vedere este un tabel logic care v permite s accesai datele din alte tabele i vederi. Vederile nu conin date. Tabelele pe care se bazeaz vederea sunt cele care conin datele i sunt cunoscute sub numele de tabele de baz. Vederile permit creatorului aplicaiei s prezinte utilizatorului informaii ntr-o form diferit de cea a tabelelor de baz, dar care satisface cerinele utilizatorului cu privire la date. De asemenea, vederile mbuntesc securitatea bazei de date prin mascarea adevratelor nume i locaii ale tabelelor de baz. Accesarea i manipularea datelor prin intermediul unei vederi este asemntoare lucrului cu tabele. Putei executa instruciuni select, insert, delete i update cu vederi n acelai fel n care ai face-o cu tabele, atta timp ct vederea face referire la un singur tabel.

LUCRAREA DE LABORATOR Nr. 11


Sigurana bazei de date
Gestionarea utilizatorilor bazei de date
Scopul principal al securitii bazei de date este de a stabili nivelul corect de securitate pentru diversele tipuri de utilizatori ai bazei de date. Aceast securitate definete nivelul de acces la baza de date pentru 94

fiecare utilizator. n linii mari, exist trei tipuri de utilizatori, care necesit trei nivele de acces diferite la baza de date. Aceti utilizatori sunt administratorii bazei de date, creatorii de aplicaii i utilizatorii finali. Fiecare baz de date Oracle posed o list a utilizatorilor valizi. Acetia sunt utilizatorii care se pot conecta la baza de date. Fiecare utilizator are un set de privilegii care definesc tipul utilizatorului respectiv. Un privilegiu reprezint autoritatea de a accesa un obiect al bazei de date ntr-o manier predefinit. De exemplu, un utilizator final poate avea privilegiile necesare pentru a selecta date din unele dintre tabelele bazei de date, dar s-i fie interzis s creeze sau s distrug obiecte ale bazei de date. Organizaia trebuie s stabileasc politica de securitate a bazei de date. De exemplu, este acceptabil s avei un nivel sczut de securitate fa de utilizatori ntr-un calculator didactic unde studenii nva programarea calculatoarelor, n schimb, vei impune o securitate strict pentru calculatoarele unei bnci. Un alt aspect care se ncadreaz n domeniul gestionrii utilizatorilor bazei de date l reprezint licenierea. Pentru serverul dumneavoastr Oracle, avei o licen care stabilete numrul de utilizatori concureni care se pot conecta la baza de date. Prin gestionarea utilizatorilor i a drepturilor lor de acces, putei impune respectarea condiiilor licenei. Programul Oracle v pune la dispoziie numeroase instrumente cu care putei gestiona utilizatorii bazei de date. Procesul de gestionare a bazei de date include autentificarea utilizatorilor, crearea i gestionarea utilizatorilor, monitorizarea utilizatorilor i gestionarea resurselor. Acest capitol trateaz n detaliu aceste subiecte.

Autentificarea utilizatorilor
Programul Oracle v permite s autentificai utilizatorii prin dou metode diferite. Prima metod o reprezint autentificarea efectuat de baza de date Oracle. Programul Oracle solicit fiecrui utilizator s furnizeze un nume de utilizator i o parol atunci cnd ncearc s se conecteze la baza de date. Atunci cnd creai noi utilizatori, nu uitai s specificai clauza identified by. A doua metod de autentificare se bazeaz pe sistemul de operare. Cu aceast metod, pentru a autentifica utilizatorul, programul Oracle 95

folosete informaiile referitoare la utilizator, care sunt pstrate de sistemul de operare. Pentru utilizator, aceast metod prezint urmtoarele avantaje: - utilizatorul se poate conecta foarte simplu la baza de date fr s fie necesar s furnizeze un nume de utilizator i o parol. De exemplu, utilizatorul se poate conecta direct la baza de date, folosind comanda SQL*Plus; - controlul autorizrii utilizatorului cade n sarcina sistemului de operare i nu a serverului Oracle; - exist posibilitatea de auditare att din sistemul de operare, ct i din Oracle. Dac rulai un server cu fire multiple de execuie, nu exist posibilitatea ca utilizatorii s fie autentificai de sistemul de operare atunci, cnd ncearc s se conecteze. Aceasta este restricia prestabilit datorit faptului c exist riscul ca utilizatorul situat la distan s introduc numele i parola altui utilizator al sistemului de operare atunci, cnd se conecteaz la baza de date prin intermediul reelei. Pentru a modifica aceast opiune prestabilit, i a permite accesul de la distan ntr-un server cu fire multiple de execuie, atribuii parametrului de iniializare valoarea True.

Crearea utilizatorilor
Putei crea un nou utilizator al bazei de date folosind caseta de dialog Create User a utilitarului SQL*DBA sau comanda SQL create user. Atunci cnd creai un nou utilizator, trebuie s specificai urmtoarele informaii: Numele utilizatorului - un identificator care este unic n raport cu toate celelalte nume de utilizatori i roluri. Spaiul-tabel prestabilit pentru segmente - identific spaiul-tabel pentru obiectele pe care le creeaz utilizatorul. n mod prestabilit, acesta este spaiul-tabel al sistemului. Spaiul-tabel pentru segmentele temporare - identific spaiul-tabel pentru segmentele temporare ale utilizatorului. n mod prestabilit, acesta este spaiul-tabel al sistemului. Cotele spaiului-tabel - permite utilizatorului s aloce spaiu n spaiultabel i, opional, stabilete o cot n octei. 96

Profilul - atribuie utilizatorului un profil nominalizat. Profilul limiteaz resursele bazei de date pe care le poate accesa utilizatorul. Dac utilizatorului nu i se atribuie n mod explicit un profil, atunci el va avea profilul prestabilit. Acest profil prestabilit este stabilit de administratorul bazei de date i conine parametrii care definesc limitele prestabilite pentru toate resursele bazei de date. Exemplul urmtor creeaz noul utilizator al bazei de date identificat prin user_01: create user user_01 identified by A12345 default tablespace ts_101 temporary tablespace ts_temp quota 5m on ts_101 quota 5m on ts_temp quota 3m on system profile clerk; Clauza identified by stabilete parola utilizatorului. Dac dorii ca sistemul de operare s efectueze autentificarea utilizatorului, nlocuii clauza identified by cu clauza identified externally. Utilizatorul nou creat nu se poate conecta la baza de date pn cnd nu i se acord privilegiul de sistem connect. Pentru a schimba parola unui utilizator, lansai comanda alter user, dup cum este ilustrat n exemplul urmtor. Acest exemplu stabilete noua parol B12345 pentru utilizatorul tom_01: alter user tom_01 identified by B12345;

Gestionarea utilizatorilor i a resurselor


Pentru fiecare utilizator al bazei de date este stabilit un domeniu de securitate care conine limite bine definite ale cantitii diverselor resurse ale sistemului disponibile utilizatorului. Limitarea resurselor este o component vital a gestionrii utilizatorilor i a bazei de date. n lipsa unor asemenea controale, resursele sistemului ar fi utilizate la ntmplare, ceea ce ar avea efecte negative asupra tuturor utilizatorilor bazei de date. Limitele resurselor de sistem sunt gestionate cu ajutorul profilurilor. Un profil este un set nominalizat de limite ale resurselor, 97

care pot fi atribuite unui utilizator. In general aceste resurse se stabilesc la nivel de sesiune i la nivel de apeluri. De fiecare dat cnd un utilizator se conecteaz la baza de date, este creat o sesiune. Aceast sesiune necesit o anumit cantitate de timp CPU i de memorie pe calculatorul gazd. Dac este depit limita unei resurse la nivel de sesiune, instruciunea curent este derulat napoi i utilizatorului i este returnat un mesaj de eroare. Atunci cnd se ntmpl acest lucru, toate instruciunile din tranzacia curent sunt intacte, iar utilizatorul are de ales numai ntre comenzile commit i rollback. n plus, n acest moment utilizatorul poate pur i simplu s ncheie sesiunea. Dac utilizatorul ncearc s efectueze orice alt operaie, programul Oracle genereaz o eroare. n timpul procesrii comenzilor SQL, sunt efectuate mai multe apeluri, ca parte a execuiei instruciunii. Dac este depit limita unei resurse la nivel de apel, procesarea instruciunii curente este ntrerupt i este derulat napoi. De asemenea, programul Oracle returneaz utilizatorului un mesaj de eroare. Toate instruciunile anterioare ale tranzaciei curente rmn intacte, iar sesiunea utilizatorului poate s continue. Administratorul bazei de date are posibilitatea s activeze sau s dezactiveze profiluri n mod global. Cu alte cuvinte, administratorul bazei de date are posibilitatea s stabileasc pentru anumite resurse, limite care s fie valabile pentru toi utilizatorii. Pentru a crea un profil, lansai comanda SQL create profile sau folosii caseta de dialog Create Profile a programului SQL*DBA. Pentru a crea profiluri, trebuie s posedai privilegiul de sistem create profile. La crearea profilului, vei stabili n mod explicit limitele urmtoarelor resurse: sessions_per_user Limiteaz numrul de sesiuni simultane pentru utilizator. cpu_per_session Limiteaz timpul CPU pentru o sesiune. Valoarea este exprimat n sutimi de secunde. cpu_per_call Limiteaz timpul CPU pentru un apel. Valoarea este exprimat n sutimi de secunde. connect_time Limiteaz timpul total de conectare a unei sesiuni. idle_t ime Definete durata maxim de inactivitate continu. 98

logical_read_per_session Limiteaz numrul de blocuri de date citite ntr-o sesiune. logical_reads_per_call Limiteaz numrul de blocuri de date citite pentru ca un apel s proceseze o instruciune SQL. private_sga Limiteaz cantitatea de spaiu privat pe care o sesiune o poate rezerva n zona global a sistemului. Aceast limit este aplicabil numai dac folosii un server multicanal. composite_limit Limiteaz costul total al resurselor pentru o sesiune. Este o combinaie a urmtoarelor resurse: cpu_per_session, connect_time, logical_reads_per_session i private_sga. Pentru a defini costul asociat acestor resurse, folosii comanda SQL alter resource cost. Pentru fiecare resurs definit n comanda create profile, putei include cuvintele cheie unlimited i default. Cuvntul cheie unlimited indic faptul c un utilizator cruia i se atribuie profilul respectiv poate utiliza o cantitate nelimitat a acestei resurse. Cuvntul cheie default indic faptul c utilizatorul resursei respective face obiectul limitei resursei specificate n profilul prestabilit. Programul Oracle creeaz automat profilul prestabilit. n mod prestabilit, acest profil definete iniial resurse nelimitate. Administratorul bazei de date poate modifica limitele profilului prestabilit cu comanda alter profile. Orice utilizator cruia nu i s-a atribuit n mod explicit un profil face obiectul limitelor resurselor definite n profilul prestabilit. Instruciunea urmtoare creeaz profilul numit funcionar". Aceast instruciune definete n mod explicit numai patru resurse. Toate celelalte resurse vor avea limitele definite de profilul prestabilit. create profile functionar iimit sessions_per_user 1 connect_time 560 cpu_per_call unlimited idle_tiine 15; Instruciunea alter profile redefinete resursa specificat, atribuindu-i valoarea furnizat. De exemplu, instruciunea urmtoare modific profilul funcionar, atribuind parametrului sessions_per_user valoarea 3, i stabilete o limit explicit 99

pentru logical_reads_per_call. Limitele tuturor celorlalte resurse rmn neschimbate. alter profile functionar limit sessions_per_user 3 logical_reads_per_call 100; Dup ce profilul a fost creat, atribuii-l unui utilizator cu comenzile SQL create user sau alter user. De asemenea, putei folosi casetele de dialog Create User sau Alter User ale programului SQL*DBA. Nu putei atribui profiluri rolurilor sau altor profiluri. De asemenea, un utilizator nu poate avea n acelai timp dou profiluri. Exemplul urmtor asociaz profilul funcionar utilizatorului tom_01. Acest nou profil intr n vigoare la urmtoarea sesiune. Alter user tom_01 profile functionar; Pentru a distruge un profil, lansai comanda drop profile cu clauza cascade.

Distrugerea utilizatorilor
Distrugerea unui utilizator elimin utilizatorul i schema asociat din dicionarul de date, precum i toate obiectele coninute n schema utilizatorului. Pentru a distruge toate obiectele utilizatorului, specificai clauza cascade n comanda drop user. Dac specificai clauza cascade, programul Oracle distruge automat orice restricii de integritate prin referin, asociate tabelelor din alte scheme care fac referire la cheile principale i la cheile unice ale tabelelor distruse. Uneori va trebui ca schema utilizatorului s rmn intact, pentru a susine operaiile altor utilizatori. n acest caz, revocai pur i simplu accesul utilizatorului la baza de date, prin eliminarea privilegiului de sistem create any session. Eliminarea din baza de date a utilizatorului se poate face cu ajutorul programului SQL*DBA. Pentru ca un utilizatorul s poat fi distrus, acesta trebuie s nu fie conectat la baza de date sau s nu aib nici un proces activ. Persoana care elimin utilizatorul trebuie s posede privilegiul de sistem drop user.

100

Mersul lucrrii:
Pentru a ndeplini operaiile care urmeaz intrai n sistemul Oracle cu numele de administrator System i parola Manager. Nu uitai s creai fiierul-spuller. Not. n dependen de starea spaiului predefinit al sistemul Oracle (din cauza c au lucrat ali colegi), unele date de ieire pot fi diferite de cele menionate mai jos. n referat explicai aceste deosebiri.

Vederile dicionarului de date destinate gestionrii utilizatorilor


Pentru fiecare utilizator i fiecare profil, sunt stocate n dicionarul de date urmtoarele informaii: - lista utilizatorilor conectai la baza de date; - spaiul-tabel prestabilit pentru tabele, grupuri i indeci al fiecrui utilizator - utilizarea memoriei pentru fiecare sesiune curent; - spaiul-tabel pentru segmente temporare al fiecrui utilizator; - cotele de spaiu pentru fiecare utilizator; - profilul fiecrui utilizator i limitele resurselor asociate; - costul asociat fiecrei resurse a sistemului. Pentru obinerea informaiilor despre utilizatori i profiluri, avei la dispoziie urmtoarele vederi ale dicionarului de date: all_users - Informaii despre toi utilizatorii bazei de date. Aceste informaii includ numele utilizatorului, user_id, i data la care a fost creat user_id. Culegei: select * from all_users; Rezultatul: USERNAME USER_ID CREATED -------------------------- --------SYS 0 16-SEP-96 SYSTEM 5 16-SEP-96 SCOTT 8 16-SEP-96 DEMO 9 16-SEP-96 PO7 11 22-NOV-00

101

user_users - Informaii despre toi utilizatorii cureni bazei de date. Aceste informaii includ numele fiecrui utilizator, user_id, i spaiile-tabel folosite de fiecare. Culegei: select * from user_users; Rezultatul:
USERNAME USER_ID DEFAULT_ TEMPORARY_ CREATED TABLESPACE TABLESPACE -------- --------- ------------------------------ --SCOTT 8 USER_DATA TEMPORARY_DATA 16-SEP-96

dba_users - Informaii despre utilizatori ai bazei de date. Aceste informaii includ numele fiecrui utilizator, user_id, i spaiile-tabel folosite de fiecare. user_ts_quotas - Informaii despre cotele spaiului-tabel al utilizatorului. Culegei: select * from user_ts_quotas; Rezultatul:
TABLESPACE_NAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS ----------------------- --------- ------- ---------USER_DATA 204800 0 100 0

dba_ts_quotas - Informaii despre cotele spaiilor-tabel pentru toi utilizatorii. Culegei: select * from dba_ts_quotas; Rezultatul: no rows selected user resource_limits - Afieaz limitele resurselor pentru utilizatorul curent. dba_profiles - Informaii despre limitele resurselor atribuite fiecrui profil. resource_cost - Afieaz costul fiecrei resurse.

Liceniere
Programul Oracle v ajut s respectai angajamentul de licen ncheiat cu firma Oracle. Avei o licen care definete numrul maxim admis de utilizatori simultani. De asemenea, s-ar putea s avei o licen 102

n care utilizatorii sunt nominalizai. n ambele cazuri trebuie s cunoatei limitele privind numrul utilizatorilor simultani. n momentul n care este atins limita impus bazei de date, numai utilizatorii avnd privilegiul de sistem restricted_session pot s se conecteze la baza de date. Atunci cnd se conecteaz un asemenea utilizator, este transmis ctre fiierul de avertizare i ctre ecran, un mesaj care afirm c a fost atins numrul maxim de utilizatori care lucreaz simultan. Pentru a v ajuta s respectai licena, sunt definii trei parametri de iniializare. Acetia sunt urmtorii: license_max_ sessions Definete numrul maxim de sesiuni concurente. license_sessions_ warning - Atribuii acestui parametru o valoare mai mic a parametrului license max_sessions. In acest fel, vei fi avertizat din timp c v apropiai de limita maxim de sesiuni concurente. license_max_users Definete numrul maxim de utilizatori concureni. Programul Oracle v pune la dispoziie vederea dicionarului de date v$license. Exemplul urmtor selecteaz i afieaz informaii coninute n aceast vedere. Culegei: select sessions_max s_max, sessions_warning s_warn, sessions_current s_curr, sessions_highwater s_high, users_max u_max from v$license; Rezultatul: S_MAX S_WARN S_CURR S_HIGH U_MAX ----- --------- --------- --------- --------0 0 2 2 0

Rezumat
n acest capitol ai aflat ce se nelege prin gestionarea utilizatorilor i, de asemenea, cum putei ndeplini aceast sarcin. Gestionarea 103

utilizatorilor bazei de date presupune, printre altele, autentificarea utilizatorilor, precum i crearea de profiluri utilizatorilor. Gestionarea utilizatorilor i a resurselor bazei de date este esenial pentru prevenirea consumului neraional al resurselor sistemului. Administratorul bazei de date folosete profilurile i tehnicile de autentificare pentru a gestiona accesul utilizatorilor la baza de date i consumul de resurse ale sistemului dup conectarea acestora la baza de date.

Rolurile
Rolurile sunt grupuri nominalizate de privilegii nrudite care sunt acordate utilizatorilor individuali sau altor roluri. Rolurile sunt create pentru gestionarea privilegiilor pentru o aplicaie de baze de date sau pentru gestionarea privilegiilor pentru un grup de utilizatori. Unui rol aplicaie i se acord toate privilegiile necesare rulrii unei aplicaii. O aplicaie poate avea mai multe roluri. Practic, vei defini un rol pentru fiecare tip de utilizator al aplicaiei. De exemplu, ntr-un magazin ai putea avea un rol pentru casier i un rol diferit pentru gestionarul magazinului Rolurile utilizator sunt create pentru un grup de utilizatori cu aceleai privilegii. Gestionarea privilegiilor individuale este mai simpl i mai eficient atunci cnd privilegiile sunt atribuite rolurilor, care sunt apoi acordate utilizatorilor individuali. Rolurile au o serie de caracteristici care simplific gestionarea privilegiilor bazei de date. Aceste caracteristici sunt urmtoarele: Gestionarea simplificat a privilegiilor. Acest lucru deriv din faptul c privilegiile sunt acordate rolurilor, care, la rndul lor, sunt acordate utilizatorilor. Nu este necesar s acordai toate privilegiile tuturor utilizatorilor - acordai-le pur i simplu rolul. Gestionare dinamic a privilegiilor individuale. Atunci cnd privilegiile unui rol se modific, aceste privilegii modificate sunt automat acordate utilizatorilor crora le-a fost acordat acest rol. Securitatea aplicaiei. Aplicaiile pot interoga dicionarul de date pentru a activa sau a dezactiva automat un rol, atunci cnd un utilizatorul ncearc s execute o aplicaie prin intermediul unui anumit nume de utilizator. Acest lucru permite aplicaiilor s activeze rolurile corespunztoare parolei. 104

Rolurile sunt grupuri nominalizate de privilegii pe care un utilizator Oracle le poate acorda unui alt utilizator Oracle sau unui alt rol.

Crearea rolurilor
Rolurile sunt create cu comanda SQL create role sau cu caseta de dialog Create Role a programului SQL*DBA. Instruciunea urmtoare creeaz rolul numit funcionar: create role functionar identified by Y8DS20J; Rolurile pot fi create cu ajutorul casetei de dialog Create Role a programului SQL*DBA. Aceast caset de dialog efectueaz aceleai aciuni ca i instruciunea SQL anterioar. Clauza identified by stabilete o parol care este folosit la activarea rolului. Ca alternativ, putei folosi clauza identified externally, dac dorii ca sistemul de operare s verifice utilizatorul i s activeze rolul. Clauza not identified poate fi folosit pentru a indica faptul c rolul nu trebuie verificat atunci cnd este activat. Numele pe care l atribuii rolului trebuie s fie unic n raport cu numele utilizatorilor i numele celorlalte roluri ale bazei de date. Rolurile nu sunt stocate n schema nici unui utilizator. Atunci cnd este creat un rol, acesta nu are asociat nici un privilegiu. n aceast faz, este un rol inutil. Trebuie s asociai sau alte roluri noului rol. Pentru a atribui privilegii i roluri noului rol, folosii comanda SQL grant. Acordarea privilegiilor este tratat mai amnunit ceva mai trziu n acest capitol. Pentru a crea un rol, trebuie s posedai privilegiul de sistem create role. De asemenea, atunci cnd creai un rol, acesta v este acordat cu opiunea admin. Opiunea admin v permite s efectuai urmtoarele operaii: S acordai acest rol unui alt utilizator sau rol. S retragei rolul unui utilizator sau unui rol. S modificai rolul pentru a schimba autorizaia necesar accesrii acestuia. S distrugei rolul.

105

Roluri definite de sistem


Programul Oracle prevede cinci roluri predefinite referitoare la serverul Oracle. Putei s acordai i s retragei privilegii i roluri predefinite, la fel ca n cazul oricrui rol pe care l definii dumneavoastr. n continuare, sunt prezentate rolurile Oracle predefinite i privilegiile asociate fiecruia: Connect - alter session, create cluster, create database link, create sequence, create session, create synonym, create table i create view Resource - create cluster, create procedure, create sequence, create table i create trigger DBA - Toate privilegiile de sistem cu opiunea admin Exp_full_database - select any table, backup any table, precum i insert, delete i update n legtur cu tabelele SYS.INCVID, SYS.INCFIL i SYS.INCEXP. Imp_full_database - become user, writedown (numai cu serverul Trusted Oracle)

Modificarea rolurilor
Putei schimba metoda de autorizare pentru un rol folosind comanda SQL alter role sau caseta de dialog Alter Role a programului SQL*DBA. Iat articolele pe care le putei modifica: Parola necesar pentru activarea rolului. Vrei ca rolul s fie verificat atunci cnd este activat? n caz afirmativ, stabilii dac verificarea rolului va fi efectuat de programul Oracle sau de sistemul de operare. Exemplul urmtor stabilete o nou parol i specific faptul c verificarea rolului urmeaz s fie efectuat de sistemul de operare: alter role funcionar identified by JL10C3Q Pentru a modifica un rol, trebuie fie s posedai privilegiul de sistem alter any role, fie s v fi fost acordat rolul respectiv cu opiunea admin.

106

Modificarea rolului unui utilizator


Unui utilizator al bazei de date i se pot acorda mai multe roluri prestabilite. De exemplu, unui creator de aplicaii i se poate acorda un rol de programator i, de asemenea, rolul corespunztor aplicaiei pe care o dezvolt. Pentru a stabili sau a modifica rolurile prestabilite ale utilizatorului, folosii comanda SQL alter user sau caseta de dialog Alter User a programului SQL*DBA. In exemplul urmtor, comanda SQL alter user este folosit pentru a acorda n mod prestabilit toate rolurile acordate utilizatorului, cu excepia rolului DBA: alter user tom_01 default role all except dba; Orice modificare a rolului prestabilit al utilizatorului va avea efect ncepnd cu urmtoarea conectare a utilizatorului la baza de date.

Distrugerea rolurilor
Pentru a elimina un rol din baza de date, folosii caseta de dialog Drop Role a programului SQL*DBA sau lansai comanda SQL drop role. Domeniile de securitate ale tuturor utilizatorilor i rolurile pe care le posed un rol distrus sunt actualizate automat, pentru a reflecta absena privilegiilor rolului distrus. Distrugerea unui rol duce la eliminarea acestuia din lista de roluri prestabilite a utilizatorului. Instruciunea urmtoare elimin din baza de date rolul funcionar: drop role funcionar;

Acordarea rolurilor
Rolurile pot fi acordate tuturor utilizatorilor, altor roluri sau Public-ului. Public-ul reprezint toi utilizatorii sistemului. Pentru a face acest lucru, folosii comanda SQL grant sau caseta de dialog Grant System Privilege/Role a programului SQL*DBA. Instruciunea urmtoare acord rolul manager cu opiunea admin utilizatorului ABCDH: grant manager to ABCDH with admin option; Un rol de sistem poate fi acordat cu opiunea admin. Aceast opiune permite utilizatorilor s fac urmtoarele: S acorde sau s retrag rolul oricrui alt utilizator sau rol din baza de date. 107

S acorde rolul cu opiunea admin altor utilizatori sau roluri. S modifice sau s distrug rolul. Creatorului unui rol i este acordat automat rolul respectiv cu opiunea admin. n mod implicit, aceast comand d posibilitatea utilizatorului s acorde rolul altor utilizatori. Orice utilizator cu privilegiul de sistem grant any privilege poate acorda orice rol din baza de date. Toate rolurile acordate utilizatorilor, altor roluri sau Public-ului, devin efective numai dup ce sesiunea utilizator curent lanseaz o comand set role pentru a reactiva rolul dup ce a fost acordat. De asemenea, acordarea unui rol devine efectiv i atunci cnd este creat o nou sesiune utilizator dup acordarea rolului.

Retragerea rolurilor
Rolurile pot fi retrase folosind caseta de dialog Revoke System Privilege/Role a programului SQL*DBA sau comanda SQL revoke. Exemplul urmtor retrage utilizatorului tom_01 rolul funcionar: revoke functionar from tom_01; Nu putei retrage n mod selectiv opiunea admin a unui rol. Pentru a retrage opiunea admin, trebuie s retragei rolul, dup care s reacordai rolul fr opiunea admin. Orice utilizator posesor al opiunii admin poate retrage rolul oricrui alt utilizator sau rol. Un utilizator nu-i poate retrage un rol lui nsui. De asemenea, orice utilizator posesor al privilegiului grant any role poate retrage orice rol. Toate rolurile retrase utilizatorilor, altor roluri sau Public-ului, devin efective numai dup ce sesiunea utilizator curent lanseaz o comand set role pentru a reactiva rolul dup ce a fost retras. De asemenea, retragerea unui rol devine efectiv i atunci, cnd este creat o nou sesiune utilizator dup retragerea rolului.

Grupul de utilizatori publici


Orice baz de date Oracle are un grup de utilizatori, cunoscut sub numele de Public. Public-ul reprezint toi utilizatorii bazei de date i fiecare utilizator are acces la acest grup. In consecin, orice rol acordat grupului Public este accesibil fiecrui utilizator al bazei de 108

date. Ca regul, grupului Public i vor fi acordate numai acele roluri care sunt necesare tuturor utilizatorilor bazei de date.

Acordarea i retragerea rolurilor de ctre sistemul de operare


Putei face astfel nct administrarea rolurilor s fie efectuat de sistemul de operare n locul administrrii explicite a acestora de ctre administratorul bazei de date. Sistemul de operare poate acorda roluri utilizatorilor n momentul conectrii. n continuare, aceste roluri sunt administrate de sistemul de operare i sunt transferate serverului Oracle atunci, cnd utilizatorul iniiaz o sesiune. Administrarea securitii este centralizat cu aceast abordare a gestionrii rolurilor. Aceasta, deoarece att funciile sistemului de operare, ct i funciile de securitate ale bazei de date sunt grupate n acelai loc. Pentru a opera o baz de date astfel, nct aceasta s utilizeze sistemul de operare n vederea gestionrii rolurilor fiecrui utilizator n momentul crerii unei sesiuni, atribuii valoarea True parametrului de iniializare os_roles i relansai instana. ncepnd din acest moment, atunci cnd un utilizator iniiaz o nou sesiune de lucru cu baza de date, programul Oracle iniializeaz domeniul de securitate al utilizatorului, folosind rolurile bazei de date identificate de sistemul de operare. Sistemul de operare al utilizatorului are identificatori care indic rolurile bazei de date disponibile utilizatorului. De asemenea, aceti identificatori indic rolurile prestabilite ale utilizatorului i rolurile care au opiunea admin. Fie c utilizai UNIX, VMS sau alt sistem de operare, specificaia rolului la nivelul sistemului de operare respect urmtorul format: ora_<id>_<rol>[_[d][a]] Identificatorii au urmtoarele semnificaii: Id - Poate reprezenta lucruri diferite pentru sisteme de operare diferite. De exemplu, id este identificatorul instanei pe un calculator VMS, ns reprezint tipul calculatorului pe un calculator MVS. role - Numele rolului care este acordat. d - Caracter facultativ, care indic faptul c acest rol urmeaz s fie un rol prestabilit al utilizatorului. 109

a - Caracter facultativ, care indic faptul c acest rol este acordat cu opiunea admin. lat dou exemple de identificatori ai sistemului de operare: ora_contabilitate_functionar ora sisteme programator a; Dac rolurile sunt gestionate de ctre sistemul de operare, toate rolurile anterioare acordate utilizatorilor cu comanda SQL grant nu au efect. Aceste roluri apar n continuare n dicionarul de date, ns nu sunt active. Numai rolurile acordate de ctre sistemul de operare sunt active pentru utilizator. Ca s aib loc toate acestea, parametrul de iniializare os_roles trebuie s aib valoarea True.

Afiarea informaiilor despre roluri


Serverul Oracle posed o serie de vederi predefinite. Informaiile despre roluri i despre utilizatorii crora le-au fost acordate sunt furnizate de urmtoarele vederi: DBA_roles - O list a tuturor rolurilor existente n baza de date; user_role_privs - o list a rolurilor acordate utilizatorului; DBA_role_privs - descrierea rolurilor acordate utilizatorilor i altor roluri; role_role_privs - informaii despre rolurile acordate altor roluri; role_sys_privs - informaii despre privilegiile de sistem acordate rolurilor; role_tab_privs - informaii despre privilegiile referitoare la tabele acordate rolurilor; sessions_roles - o list a rolurilor activate de utilizator n momentul respectiv. Exemplele urmtoare interogheaz aceste vederi ale dicionarului pentru a obine informaii despre roluri. Primul exemplu furnizeaz informaii despre fiecare utilizator i despre rolurile acordate acestuia. Culegei: select * from dba_role_privs; Rezultatul: GRANTEE GRANTED_ROLE ADM DEF ------------ -------------------- --- --DBA EXP_FULL_DATABASE NO YES DBA IMP_FULL_DATABASE NO YES DEMO CONNECT NO YES 110

DEMO RESOURCE NO YES PO7 DBA NO YES SCOTT CONNECT NO YES SCOTT RESOURCE NO YES SYS CONNECT YES YES SYS DBA YES YES SYS EXP_FULL_DATABASE YES YES SYS IMP_FULL_DATABASE YES YES SYS RESOURCE YES YES SYSTEM DBA YES YES Urmtorul exemplu folosete tabelul DBA_ROLES pentru a afla dac anumite roluri sunt protejate prin parol. Culegei: select * from dba_roles; Rezultatul: ROLE PASSWORD ---------------------- -------CONNECT NO RESOURCE NO DBA NO EXP_FULL_DATABASE NO IMP_FULL_DATABASE NO - pentru cazul cnd nu a fost acordat nici un rol, sau, de exemplu: ROLE PASSWORD ----------------FUNCTIONAR NO ADMINISTRATOR YES DBA NO Dac rolurile FUNCTIONAR, ADMINISTRATOR, DBA au fost acordate Culegei: select * from user_role_privs; Rezultatul: USERNAME GRANTED_ROLE ADM DEF OS_ ----------- --------------- --- --- --SYSTEM DBA YES YES NO Culegei: select * from role_sys_privs; 111

Rezultatul: ROLE PRIVILEGE ADM ------------------ ---------------------- --DBA ALTER ANY CLUSTER YES DBA ALTER ANY INDEX YES DBA ALTER ANY PROCEDURE YES DBA ALTER ANY ROLE YES .. IMP_FULL_DATABASE DROP USER NO IMP_FULL_DATABASE EXECUTE ANY PROCEDURE NO IMP_FULL_DATABASE INSERT ANY TABLE NO IMP_FULL_DATABASE SELECT ANY TABLE NO 120 rows selected. Culegei: select * from role_tab_privs; Rezultatul:
ROLE TABLE_NAME PRIVILEGE GRA COLUMN_NAME ------------------ ------ ---------------------------EXP_FULL_DATABASE SYS INCEXP DELETE NO EXP_FULL_DATABASE SYS INCEXP INSERT NO EXP_FULL_DATABASE SYS INCEXP UPDATE NO EXP_FULL_DATABASE SYS INCFIL DELETE NO EXP_FULL_DATABASE SYS INCFIL INSERT NO EXP_FULL_DATABASE SYS INCFIL UPDATE NO EXP_FULL_DATABASE SYS INCVID DELETE NO EXP_FULL_DATABASE SYS INCVID INSERT NO EXP_FULL_DATABASE SYS INCVID UPDATE NO OWNER

9 rows selected.

Rezumat
n acest capitol, ai aflat c rolurile sunt colecii de privilegii care pot fi acordate anumitor utilizatori sau altor roluri. Rolurile simplific i mbuntesc activitatea de administrare a privilegiilor de sistem. Gruparea privilegiilor la un loc sub forma unui rol i apoi acordarea acestui rol utilizatorilor sau altor roluri asigur un sistem simplu i flexibil de gestionare a privilegiilor. 112

Rolurile sunt create n conformitate cu necesitile diverselor grupuri de utilizatori. Odat create, rolurile sunt acordate utilizatorilor i altor roluri.

Privilegii
Un privilegiu este permisiunea de a executa o aciune sau de a accesa un obiect aparinnd altui utilizator. n Oracle nu putei efectua nici o aciune daca nu avei privilegiul s o facei. Iat cteva exemple de privilegii: - dreptul de a accesa o baz de date; - dreptul de a selecta date din tabelele altui utilizator; - dreptul de a executa procedurile rezidente ale altui utilizator; - dreptul de a crea noi utilizatori. Privilegiile sunt acordate utilizatorilor pentru ca acetia s poat s efectueze aciunile necesare pentru ndeplinirea unei sarcini. Privilegiile pot fi acordate utilizatorului n mod explicit sau prin intermediul unui rol. Trebuie s se acorde numai privilegiile necesare. Exist dou categorii de privilegii: privilegii sistem i privilegii obiect. Privilegiile sistem permit utilizatorului s efectueze o aciune asupra obiectelor de un anumit tip, n timp ce privilegiile obiect permit utilizatorului s efectueze o aciune asupra unui anumit obiect. Privilegiile reprezint una dintre cele mai importante mijloace pentru asigurarea securitii bazei de date. Nu putei efectua nici o aciune n baza de date dect dac avei privilegiul sau permisiunea de a efectua respectiva aciune. Privilegiile permit administratorului bazei de date s atribuie nivelurile adecvate de securitate obiectelor bazei de date i utilizatorilor. Privilegiile sunt puse la dispoziie de serverul Oracle, ca parte a propriei scheme de securitate intern. Utilizatorilor li se acord privilegii pentru a efectua anumite aciuni. De asemenea, utilizatorilor le pot fi retrase privilegii. Acest capitol trateaz diversele privilegii de sistem i de obiect i modul de administrare a acestora.

Privilegii de sistem
Un privilegiu de sistem este dreptul sau permisiunea de a executa o anumit aciune asupra unui anumit obiect. De exemplu, dreptul de a crea un spaiu-tabel este un privilegiu de sistem. Exist peste 80 de privilegii de sistem distincte. 113

ntruct privilegiile de sistem sunt foarte puternice, ele trebuie acordate cu msur utilizatorilor autorizai. n continuare, sunt enumerate privilegiile de sistem ale programul Oracle. Denumirile acestor privilegii sunt inspirate de aciunile pe care le permit Analyze (any table, object sau cluster): - analyze any Audit (orice obiect de schem al bazei de date): - audit any - audit system Cluster: - create cluster - create any cluster - alter any cluster - drop any cluster Database: - alter database Database Link: - create database link Index - create any index - alter any index - drop any index Privilege: - grant any privilege Procedure: - create procedure - create any procedure - alter any procedure - drop any procedure - execute any procedure Profile - create profile - alter profile - drop profile - alter resource cost Public Database Link: - create public database link 114

- drop public database link Public Synonym: - create public synonym - drop public synonym Role: - create role - alter any role - drop any role - graht any role Rollback Segment: - create rollback segment - alter rollback segment - drop rollback segment Sequence: - create sequence - create any sequence - alter any sequence - drop any sequence - select any sequence Session: - create session - alter session - restrict session Snapshot: - create snapshot - create any snapshot - alter any snapshot - drop any snapshot Synonym: - create synonym - create any synonym - drop any synonym System: - alter system Table: - create table - create any table - alter any table 115

- back up any table - drop any table - lock any table - comment any table - select any table - insert any table - update any table - delete any table Tablespace: - create tablespace - alter tablespace - manage tablespace - drop tablespace - unlimited tablespace Transaction: - force transaction - force any transaction Trigger: - create trigger - create any trigger - alter any trigger - drop any trigger User - create user - become user - alter user - drop user View : - create view - create any view - drop any view

Acordarea privilegiilor de sistem


Privilegiile de sistem pot fi acordate utilizatorilor i rolurilor folosind fie comanda SQL grant, fie caseta de dialog Grant System Privilege/Role a programului SQL*DBA. Instruciunea urmtoare acord privilegii de sistem utilizatorului ABCDED i rolului financiar: grant create session to ABCDED, financiar; 116

Privilegiile de sistem nu pot fi acordate mpreun cu privilegiile de obiect i cu rolurile n aceeai comand grant. Pentru a acorda privilegii de sistem, trebuie s posedai opiunea admin pentru privilegiul de sistem pe care l acordai sau s posedai privilegiul de sistem grant any privilege.

Retragerea privilegiilor de sistem


Privilegiile de sistem pot fi retrase folosind fie comanda SQL revoke, fie caseta de dialog Grant System Privilege/Role a programului SQL*DBA. Sintaxa: revoke all from robert_c Pentru a retrage un privilegiu de sistem, utilizatorul trebuie s posede opiunea admin pentru privilegiul de sistem care urmeaz s fie retras. Uneori, retragerea unui privilegiu poate provoca un efect n cascad. De exemplu, efectele n cascad pot fi ntlnite atunci cnd sunt retrase privilegii referitoare la comenzi de manipulare a datelor. Dac unui utilizator i se retrage privilegiul de sistem select any table, i acest utilizator a creat nite funcii, toate funciile din schema utilizatorului trebuie reautorizate nainte de a putea fi executate din nou. La retragerea privilegiilor referitoare la instruciunile limbajului DDL (Data Definition Language) nu apar nici un fel de efecte n cascad. Toate rolurile retrase utilizatorilor, altor roluri sau Public-ului devin efective numai dup ce sesiunea utilizator curent lanseaz o comand set role pentru a reactiva rolul dup ce a fost retras. De asemenea, retragerea unui rol devine efectiv i atunci, cnd este creat o nou sesiune utilizator dup retragerea rolului.

Privilegii de obiect
Un privilegiu de obiect este permisiunea de a efectua o aciune asupra unui anumit obiect, cum ar fi un tabel, un pachet sau o vedere. Anumite obiecte ale bazei de date nu posed un privilegiu de obiect asociat. De exemplu, urmtoarele obiecte nu posed privilegii de obiect: declanatorii, grupurile, indecii i legturile cu baze de date. Privilegiile de obiect difer de la un obiect la altul. n continuare, sunt prezentate privilegiile de obiect disponibile i obiectele asociate acestora: 117

Alter: - Tabele - Secvene Delete: - Tabele - Vederi Execute: - Proceduri (de sine stttoare i subprograme) Index: - Tabele Insert: - Tabele - Vederi Reference: - Tabele Select: - Tabele - Vederi - Secvene Update: - Tabele - Vederi

Acordarea privilegiilor de obiect


Privilegiile de obiect pot fi acordate utilizatorilor i rolurilor cu comanda SQL grant. Instruciunea urmtoare acord privilegii de obiect utilizatorului J9SK72D i rolului financiar: grant select, alter table to J9SK72D, financiar; Pentru a acorda privilegii de obiect, trebuie s fii proprietarul obiectului specificat sau s beneficiai de privilegiile referitoare la obiectul respectiv cu opiunea grant. Privilegiile de sistem nu pot fi acordate mpreun cu privilegiile de obiect i cu rolurile n aceeai comand grant.

Retragerea privilegiilor de obiect


Privilegiile de obiect pot fi retrase folosind comanda SQL revoke. Instruciunea urmtoare ilustreaz retragerea unui privilegiu de obiect: 118

revoke update on lst_articole from tom_01; Nu putei s retragei n mod explicit privilegii specifice coloanelor. pentru a face acest lucru, trebuie nti s retragei privilegiile de obiect Pentru toate coloanele unui tabel sau unei vederi, dup care s reacordai n mod selectiv privilegiile specifice coloanelor care vrei s rmn. Retragerea privilegiilor de obiect provoac de obicei un efect n cascad. De exemplu, dac ntr-o procedur sau o funcie este utilizat o instruciune DML n legtur cu un obiect pentru care au fost revocate privilegiile, procedura sau funcia devine invalid.

Grupul de utilizatori publici


Orice baz de date Oracle are un grup de utilizatori cunoscut sub numele de Public. Public-ul reprezint toi utilizatorii bazei de date i fiecare utilizator are acces la acest grup. In consecin, orice rol acordat grupului Public este accesibil fiecrui utilizator al bazei de date. Ca regul, grupului Public i vor fi acordate numai acele roluri care sunt necesare tuturor utilizatorilor bazei de date. Afiarea informaiilor referitoare la privilegii Serverul Oracle posed o serie de vederi predefinite. Informaiile despre roluri i despre utilizatorii crora le-au fost acordate sunt furnizate de urmtoarele vederi ale dicionarului de date: all_col_privs - afieaz informaii despre coloanele n legtur cu care au fost acordate privilegii utilizatorului Public; user col_privs - afieaz informaii despre coloanele n legtur cu care utilizatorul este proprietarul unor privilegii, precum i cele n legtur cu care a primit sau a acordat privilegii; dba col privs - afieaz informaii despre toate coloanele din baza de date n legtur cu care exist privilegii; dba sys_privs - descrierea privilegiilor de sistem acordate utilizatorilor i rolurilor; ali_col_privs_made - afieaz informaii despre coloanele n legtur cu care utilizatorul este proprietar de privilegii sau a acordat privilegii; all_col_privs_recd - Afieaz informaii despre coloanele n legtur cu care utilizatorul sau Publicul au primit privilegii; 119

all_tab_privs - afieaz informaii despre obiectele n legtur cu care utilizatorul sau Publicul posed privilegii; all_tab_privs_made - afieaz informaii despre tabelele n legtur cu care utilizatorul este proprietar de privilegii sau a acordat privilegii; all_tab_privs_recd - afieaz informaii despre tabelele n legtur cu care utilizatorul sau publicul au primit privilegii; user_ro1e_privs - afieaz rolurile acordate utilizatorului; user_sys_privs - afieaz privilegiile de sistem acordate utilizatorului; column_privileges - afieaz informaii despre coloanele n legtur cu care utilizatorul este proprietarul unor privilegii, cele n legtur cu care a primit sau a acordat privilegii, precum i cele n legtur cu care publicul a primit privilegii; sessions_privs - Afieaz privilegiile care sunt disponibile pentru utilizator n momentul respectiv. Exemplele urmtoare interogheaz aceste vederi ale dicionarului de date pentru a obine informaii despre privilegii. Primul exemplu furnizeaz informaii despre posesorul fiecrui privilegiu. Culegei: select * from dba_sys_privs; Rezultatul: GRANTEE PRIVILEGE ADM --------- ---------------------- --CONNECT ALTER SESSION NO CONNECT CREATE CLUSTER NO CONNECT CREATE DATABASE LINK NO CONNECT CREATE SEQUENCE NO CONNECT CREATE SESSION NO .. SCOTT UNLIMITED TABLESPACE NO SYS DELETE ANY TABLE NO SYS INSERT ANY TABLE NO SYS SELECT ANY TABLE YES SYS UPDATE ANY TABLE NO SYSTEM UNLIMITED TABLESPACE YES 141 rows selected. 120

Exemplul urmtor folosete tabelul SESSIONS_PRIVS pentru a afia privilegiile de sistem acordate utilizatorului: select * from sys_privs; Rezultatul: PRIVILEGE -------------CREATE SESSION AUDIT ANY sau ERROR at line 1: ORA-00942: table or view does not exist

Rezumat
Un privilegiu este permisiunea sau dreptul de a executa un anumit tip de instruciune SQL sau de a accesa obiectele altui utilizator. Exist dou tipuri de privilegii: de sistem i de obiect. n acest capitol, ai aflat c privilegiile sunt unul dintre cele mai importante controale ale bazei de date. Prin intermediul privilegiilor, controlai accesul utilizatorului la obiectele bazei de date i la datele acestora. Privilegiile sunt acordate n mod explicit utilizatorilor i rolurilor. Odat acordat un privilegiu, utilizatorul poate efectua aciunea la care i d dreptul privilegiul respectiv.

121

ANEXE
Lista cuvintelor rezervate Oracle SQL:
ACCESS - Face un obiect al bazei de date disponibil utilizatorilor. ADD - Utilizat n instruciuni SQL pentru a aduga o coloan sau o restricie de integritate. ALL - Specific un operator de comparaie sau determin un grup de funcii s ia n considerare toate valorile dintr-un set de selecie specificat. ALTER - Utilizat n numeroase instruciuni, pentru a redefini valorile curente ale instruciunii. AND - Operator logic. ANY - Operator logic. AS - Clauz utilizat mpreun cu comanda create pentru a insera n tabel (n momentul crerii lui) liniile returnate de subinterogare. ASC - Pentru crearea unei liste ascendente; se utilizeaz, de exemplu, mpreun cu indeci. AUDIT - Activeaz auditarea instruciunilor sau obiectelor specificate. BETWEEN - Operator de comparaie. CHAR - Un tip de date CHARACTER de lungime fix. CHECK - O restricie care definete n mod explicit o condiie. CLUSTER - O metod de a stoca la un loc date din mai multe tabele atunci, cnd datele liniilor respective conin informaii comune care sunt de obicei accesate n mod concurent. COLUMN - O subdiviziune a unui tabel care posed un nume i un anumit tip de date. COMMENT - Comand utilizat pentru inserarea n dicionarul de date a unui comentariu referitor la un tabel sau la o coloan. CONNECT - Salveaz toate modificrile, v deconecteaz, de la baza de date Oracle, dup care v conecteaz la baza de date Oracle ca utilizator definit. CREATE - Utilizat pentru crearea unui anumit obiect al bazei de date. CURRENT - Utilizat mpreun cu cursoare pentru a specifica ultima linie preluat. DATE - Un tip de dat DATE de lungime fix utilizat pentru stocarea datelor calendaristice i a orelor. DECIMAL - Tip de dat DECIMAL care specific numere zecimale de lungime fix. 122

DEFAULT - O clauz sau o valoare opional care este folosit atunci, cnd nu este specificat nici o alternativ. DELETE - Comand utilizat pentru eliminarea liniilor dintr-un tabel sau din tabelul de baz al unei vederi. DESC - Este utilizat pentru crearea listelor descendente (de obicei mpreun cu indeci). DISTINCT - Parte a unei instruciuni care indic unicitatea. DROP - Pentru ndeprtarea sau eliminarea complet a unui obiect din baza de date. ELSE - Instruciune care evalueaz dou condiii care pot avea valoarea TRUE. EXCLUSIVE - Utilizat pentru cuplarea bazei de date n mod exclusiv. Cu alte cuvinte va fi cuplat o singur instan la un moment dat. EXISTS - Operator care returneaz valoarea True ntr-o clauz WHERE dac subinterogarea care urmeaz returneaz cel puin o linie. FILE - Zon de stocare utilizat pentru stocarea tuturor datelor bazei de date. FLOAT - Tipul de date FLOAT. FOR - Utilizat n structuri iterative, pentru limitarea numrului de ori de care este executat o instruciune. GRANT - Utilizat pentru a acorda privilegii utilizatorilor i rolurilor. HAVING - Limiteaz grupul de linii returnate la acelea pentru care condiia specificat are valoarea TRUE. IDENTIFIED - Folosit n momentul modificrii specificaiilor unui utilizatorindic modul n care programul Oracle permite accesul utilizatorului. IMMEDIATE - Utilizat ntr-o comand alter tablespace care nu verific dac fiierele spadului-tabel sunt disponibile i nu efectueaz o verificare la imprimare. IN - Un operator logic utilizat ntr-o clauz WHERE. INCREMENT - Folosit la crearea secvenelor pentru indicarea intervalului dintre numerele secveniale. INDEX - Un obiect al bazei de date utilizat pentru mbuntirea vitezei de acces. INITIAL - Specific cerinele iniiale de spaiu de stocare. INSERT - Utilizat pentru adugarea liniilor ntr-un tabel sau n tabelele de baz ale unei vederi. INTEGER - Tipul de date INTEGER. 123

INTERSECT - Un operator set care returneaz liniile comune din dou seturi distincte de linii. INTO - Specific tabelul sau obiectul care constituie receptorul unei aciuni. IS - Folosit mpreun cu operatorul logic NULL (Null nu este operator logic!) pentru a testa prezena unei valori. LEVEL - Aceasta este o pseudocoloan care ia valoarea 1 pentru nodul rdcin, 2 pentru nodul copil i 3 pentru copilul unui nod copil. LIKE - Folosit pentru a compara un ir de caractere cu modelul specificat. LOCK - Mecanisme Oracle utilizate pentru a limita accesul utilizatorilor la un anumit obiect. LONG - Tipul de date LONG reprezentnd date de tip caracter, de lungime variabil i cu o limit maxim de 2 gigaoctei. MAXEXTENTS - Specific numrul maxim de extinderi care pot fi alocate pentru un anumit obiect. MINUS - Un operator set care returneaz toate liniile distincte care exist n prima interogare, dar nu i n a doua. MODE - Stabilete modul procesului: mono-procesor sau multiprocesor. MODIFY - Modific definiia unei coloane existente a unui tabel. NOAUDIT - ncheie activitile de auditare pentru a anumit instruciune sau un anumit obiect. NOT - Precede i inverseaz efectul operatorilor logici. NOWAIT - Indic programului Oracle s v returneze controlul atunci, cnd obiectul este deja blocat de un alt utilizator. NULL - Indic absena unei valori. NUMBER - Tipul de date NUMBER reprezint numere reale de lungime variabil i cu o anumit precizie. OF - Precede o list de articole care urmeaz s fie evaluate. OFFLINE - Trece un anumit obiect n stare offline i mpiedic accesarea ulterioar a acestuia. ON - Identific obiectul asupra cruia va aciona instruciunea. ONLINE - Trece un anumit obiect n stare online i l face accesibil utilizatorilor. OPTION - Utilizat pentru a specifica o list de opiuni pentru instruciunea respectiv. 124

OR - Un operator care combin dou expresii al cror rezultat este TRUE sau FALSE. ORDER - Asigur crearea unei liste de numere n ordinea specificat. PCTFREE - Specific pentru fiecare obiect procentul de spaiu rezervat pentru actualizrile viitoare ale obiectului. PRIOR - Un operator care evalueaz o expresie specificat pentru linia printe a liniei curente ntr-o ierarhie. PRIVILEGE - Permisiune acordat unui utilizator, de a efectua o anumit aciune. PUBLIC - Un grup al bazei de date la care au acces toi utilizatorii bazei de date. RAW - Tipul de date RAW. Acest tip are format binar i nu trebuie interpretat direct. RENAME - nlocuiete numele unui obiect cu un nou nume. RESOURCE - Este un nume generic pentru o resurs a bazei de date sau un dispozitiv fizic. REVOKE - Retrage privilegii utilizatorilor sau rolurilor. ROWID - Aceasta este o pseudocoloan care reprezint adresa logic a unei linii ntr-un tabel. ROWLABEL - Coloan creat automat n fiecare tabel de programul Trusted Oracle. ROWNUM - Aceasta este o pseudocoloan care conine un numr ce indic ordinea n care programul Oracle selecteaz liniile dintr-un tabel reprezentnd un set de linii reunite. ROW - O colecie de informaii din coloanele unui tabel care corespunde unei singure nregistrri. ROWS - Una sau mai multe linii de date dintr-un tabel. SELECT - Comand SQL utilizat pentru preluarea datelor din unul sau mai multe obiecte ale bazei de date. SESSION - O conexiune a unui utilizator la o instan a bazei de date. SET - Utilizat pentru activarea unui element specificat. SHARE - Permite partajarea unui obiect sau a unei resurse. SIZE - Specific dimensiunea resursei n octei. SMALLINT - Un tip de date compatibil din DB2 pentru tipul de date number la programului Oracle. START - Utilizat pentru a iniia o aciune cum ar fi pornirea unei baze de date. 125

SYNONYM - Un alias pentru un tabel sau o vedere care poate fi folosit pentru a face referire la tabelul sau vederea n cauz. SYSDATE - Data i ora sistemului. TABLE - Unitatea de baz de stocare ntr-o baz de date Oracle. Un tabel este compus din linii i coloane. THEN - Asociaz condiia care l preced cu instruciunea care urmeaz. TO - Identific elementul asupra cruia va fi efectuat o aciune. TRIGGER - O procedur rezident asociat cu un tabel, care este executat automat, la producerea unui eveniment specificat. UID - Pseudocoloan care conine un numr unic atribuit fiecrui utilizator. UNION - Funcie SQL care combin rezultatele a dou interogri. UNIQUE - Specific faptul c un articol trebuie s fie distinct n raport cu toate articolele de acelai fel. UPDATE - Comand pentru modificarea valorilor dintr-un tabel sau din tabelele de baz ale unei vederi. USER - Pseudocoloan care conine numele de conectare al utilizatorului. VALUES - Atribuie o list de valori coloanelor corespunztoare. VARCHAR - Tipul de date VARCHAR; acesta este variabil ca lungime i poate avea o lungime maxim de 200 de octei. VARCHAR2 - Tipul de date VARCHAR2; acesta este variabil ca lungime i poate avea o lungime maxim de 200 de octei. n versiunea 7 a programului Oracle, acest tip de date este sinonim cu VARCHAR. VIEW - Un obiect al bazei de date care constituie o reprezentare logic a unuia sau mai multor tabele. WHENEVER - Folosit mpreun cu comanda audit pentru specificat auditarea unei instruciuni, numai n cazul cnd instruciunea este executat cu succes. WHERE - Folosit n instruciuni pentru a specifica liniile care urmeaz s fie afectate de comanda respectiv. WITH - Furnizeaz un element suplimentar care va fi inclus n instruciune.

126

Cuvintele rezervate pentru SQL*Plus.


SQL*Plus, asemeni altor utilitare i instrumente Oracle, trebuie s respecte conveniile de denumire a obiectelor bazei de date. Cuvintele rezervate nu pot fi folosite pentru denumirea tabelelor i coloanelor dect dac sunt ncadrate de ghilimele duble. @ - Ruleaz fiierul de comenzi specificat. @@ - Ruleaz un fiier de comenzi imbricat. ACCEPT - Citete o linie de date de intrare de pe ecran i o depune n variabila specificat definit de utilizator. APPEND - Adaug textul specificat la sfritul liniei curente din buffer. BREAK - Specific unde i cum se va modifica formatarea ntr-un raport sau afieaz definiia saltului curent de formatare. BTITLE - Plaseaz i formateaz un titlu specificat la baza fiecrei pagini a raportului. CHANGE - Modific textul din linia curent a buffer-ului. CLEAR - Restabilete sau elimin valoarea sau parametrul curent ale opiunii specificate, cum ar fi breaks i columns. COLUMN - Specific atributele de afiare pentru o coloan specificat. Sau, afieaz atributele de afiare curente pentru o singur coloan sau pentru toate coloanele. COMPUTE - Calculeaz i afieaz linii sumar, folosind diverse calcule standard asupra subseturilor liniilor selectate. CONNECT - Conecteaz un anumit utilizator la baza de date Oracle. COPY - Copiaz date dintr-o interogare ntr-un tabel care se gsete ntr-o baz de date local sau situat la distan. DEFINE - Specific o variabil definit de utilizator i i atribuie o valoare de tip char. Sau, afieaz valoarea i tipul unei variabile sau ale tuturor variabilelor. DEL - Elimin din buffer linia curent. DESCRIBE - Afieaz definiiile coloanelor pentru tabelul, vederea sau sinonimul specificat. DISCONNECT - Salveaz toate modificrile n ateptare ale bazei de date i deconecteaz utilizatorul curent de la serverul Oracle, fr a prsi programul SQL*Plus. EDIT - Apeleaz un editor de text al sistemului de operare pentru editarea coninutului fiierului specificat sau al buffer-ului. EXECUTE - Execut o singur instruciune PL/SQL. 127

EXIT - Salveaz toate modificrile n ateptare ale bazei de date, prsete programul SQL*Plus i cedeaz controlul sistemului de operare. GET - ncarc n buffer un fiier al sistemului de operare gazd. HELP - Acceseaz sistemul de asisten soft al programului SQL*Plus. HOST - Execut o comand a sistemului de operare gazd fr prsirea programului SQL*Plus. INPUT - Adaug n buffer una sau mai multe linii dup linia curent. LIST - Afieaz una sau mai multe linii din buffer. PAUSE - Afieaz o linie goal urmat de o linie care conine text, dup care ateapt ca utilizatorul s apese tasta Return. Ca alternativ, acest cuvnt rezervat poate duce la afiarea a dou linii goale, urmate de ateptarea rspunsului utilizatorului. PRINT - Afieaz valoarea curent a unei variabile de legtur. PROMPT - Afieaz mesajul specificat sau o linie goal pe ecranul utilizatorului. REMARK - ncepe un comentariu ntr-un fiier de comenzi. RUN - Afieaz i execut comanda SQL sau blocul PL/SQL care se afl n bufferul SQL. RUNFORM - Apeleaz o aplicaie SQL*Forms din cadrul programului SQL*Plus. SAVE - Salveaz coninutul buffer-ului ntr-un fiier al sistemului de operare gazd (un fiier de comenzi). SET - Stabilete un aspect al mediului SQL*Plus pentru sesiunea curent. SHOW - Afieaz valoarea unei variabile de sistem SQL*Plus. SPOOL - Stocheaz rezultatele interogrilor ntr-un fiier al sistemului de operare i, opional, transmite fiierul la imprimanta prestabilit. SQL*Plus - Pornete programul SQL*Plus de la promptul sistemului de operare. START - Execut coninutul fiierului de comenzi specificat. TTITLE - Plaseaz i formateaz un titlu specificat n partea superioar a fiecrei pagini a raportului, sau afieaz definiia curent a titlului. UNDEFINE - Elimin variabila definit utilizator specificat pe care ai definit-o fie explicit (cu comanda define), fie implicit (cu un argument n comanda start). 128

VARIABLE - Declar o variabil de legtur care poate fi definit n PL/SQL. WHENEVER OSERROR - Prsete programul SQL*Plus dac o comand a sistemului de operare genereaz o eroare. WHENEVER SQLERROR - Prsete programul SQL*Plus dac o comand SQL sau un bloc PL/SQL genereaz o eroare.

Simboluri
!= (inegalitate), operator de comparaie, % (semnul procent), caracter de nlocuire, * (asterisc) instruciunea select, operator de nmulire, = (operator de inegalitate), || (operator de concatenare), + (semnul plus) operator de adunare, operatorul outer join, (cratim) caracter de nlocuire, operator de scdere, - - (dublu minus), comentarii, / (bar) comand SQL*Plus, operator de mprire, /*,*/ (comentarii multi-linie), : (dou puncte), referirea variabilelor variabile de legtur, variabile gazd, := (operator de atribuire), < (operatorul mai mic dect), (paranteze unghiulare duble), etichete pentru cicluri, < = (operatorul mai mic sau egal cu), < > (operatorul de inegalitate), = (operatorul de egalitate), > (operatorul mai mare dect), > = (operatorul mai mare sau egal cu), @ comand (SQL*Plus), @@ comand (SQL*Plus),

BIBLIOGRAFIE 1. . G.Gardarin. Matriser les Bases De Donnes 129

2. George Gardarin. Bases de donnes objet & relationnel. Edition Eyrolles, 1999. 3. G.Gardarin. Bases De Donnes. EYROLLES 4. Abdelaziz Abdellatif, Mohamed Limame, Abdelmalek Zeroual. Oracle7. Langages - Architecture - Administration. EYROLLES 5. . Tom Luers . Oracle 7. Versiunea 7.2. Teora. Bucuresti, 2000 6. . S. Miranda. A. Ruols. Client-Serveur. EYROLLES 7. . P. Marcenac. SGBD relationnelles. EYROLLES 8. . C. Pascu, A. Pascu. Totul despre SQL. Editura tehnic. Bucuresti, 1994. 9. C. G. Date. Introduction aux bases de donnes. Vubert Informatique Paris 2000.

130