Sunteți pe pagina 1din 131

UNIVERSITATEA TEHNIC!

A MOLDOVEI
B. MIRONOV
GESTIONAREA BAZELOR
DE DATE
ndrumar de laborator
Chi"in#u 200$
Schema conceptual!
Schema intern!
Schema
extern! "
Schema
extern! i
Schema
extern! n
"
Prezentul ndrumar de laborator se adreseaz! studen#ilor facult!#ii
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 studen#ii altor facult!#i n cadrul cursurilor de informatic!.
Ciclul con#ine "" lucr!ri de laborator, consacrate cre!rii $i gestion!rii
bazelor de date rela#ionale. Fiecare lucrare este prefa#at! de un material
amplu teoretic necesar pentru n#elegerea principiilor de operare cu
bazele de date. Lucr!rile de laborator sunt axate pe sistemul Oracle
considerat cel mai utilizat sistem de gestiune a bazelor de date rela#ionale
din ntreaga lume.
Autor: conf. univ. dr. Bettin Mironov
Redactor responsabil: prof. univ. dr. hab. Teodor %i$ianu
Recenzent: conf. univ. dr. Leonid Carcea
U.T.M., 200"
2
CUPRINS
LUCRAREA DE LABORATOR NR. " Introducere n bazele de date
rela#ionale 3
LUCRAREA DE LABORATOR NR. 2 Structuri logice de stocare a
bazelor de date ""
LUCRAREA DE LABORATOR NR. 3. Proiectarea unei baze de date "9
LUCRAREA DE LABORATOR NR. 4 Tipuri de date. Tabele " 25
LUCRAREA DE LABORATOR NR. 5. Crearea tabelelor 36
LUCRAREA DE LABORATOR NR. 6. Integritatea datelor 42
LUCRAREA DE LABORATOR NR. 7. Selectarea si ntre#inerea
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. "0. Vederi 88
LUCRAREA DE LABORATOR NR. "". Siguran#a bazei de date 94
ANEXE
Lista cuvintelor rezervate Oracle SQL: "22
Cuvintele rezervate pentru SQL*Plus. "27
Simboluri "29
Bibliografie "23
3
LUCRAREA DE LABORATOR Nr. $
Introducere n bazele de date rela%ionale
Bazele de date rela#ionale n prezent sunt cele mai utilizate pentru
modelarea $i gestionarea ntreprinderilor. Modelul rela#ional de date este
modelul cu cea mai larg! acceptare si utilizare. Modelul de date
rela#ional utilizeaz! cuvntul rela#ional deoarece n acest model se pot
construi cu u$urin#! rela#ii ntre tabele multiple. Un model rela#ional are
trei caracteristici esen#iale:
- structuri - obiecte definite care con#in date $i sunt accesibile
utilizatorilor;
- opera#ii - ac#iuni definite care manipuleaz! datele sau obiectele
schemei;
- reguli - legi care reglementeaz! cum $i de c!tre cine pot fi manipulate
datele.
O baz! de date rela#ional! 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 sfr$it, ntr-o baz! de date
rela#ional!, orice date care sunt rezultatul unei interog!ri sunt prezentate
utilizatorului n format coloan!-linie. Modelul de date rela#ional prezint!
urm!toarele avantaje fa#! de modelele de date tradi#ionale:
- un model de date u$or de n#eles $i de vizualizat;
- legi de integritate u$or de n#eles $i de dezvoltat, destinate protej!rii
datelor $i structurilor;
- spa#iu de stocare a datelor $i redundan#! reduse;
- independen#a structurii logice a bazelor de date de modul de stocare
fizic! a datelor.
n sistemele de baze de date rela#ionale se utilizeaz! limbajul de
interogare SQL (Structured Query Language - limbaj structurat de
interogare).
n "985 dr. Codd a definit modelul rela#ional ca pe o colec#ie de
tabele, el a stabilit urm!toarele "3 reguli, care definesc ce este o baz! de
date.
". Toate informa#iile din baza de date sunt reprezentate n mod explicit
sub form! de valori ntr-un tabel.
4
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 rela#ional!. Ele
reprezint! inexisten#a informa#iilor.
4. Baza de date rela#ional! reprezint! descrierea bazei de date ntr-un
format logic simplificat de genul tabelelor.
5. Modelul rela#ional poate suporta mai multe limbaje, ns! SQL este
limbajul principal de nterfa#are.
6. Toate vederile sunt actualizabile, dac! vederea curent! este un tabel.
7. Modelul rela#ional trateaz! toate rela#iile de baz! $i rela#iile derivate ca
un singur operand pentru opera#iile 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 modific!ri
ilogice.
"0. Restric#iile de integritate pentru o baz! de date rela#ional! sunt create
n sublimbajul de baze de date (SQL) $i sunt stocate n catalogul bazei
de date $i nu n aplica#iile individuale.
"". Distribu#ia datelor c!tre programele de aplica#ie are loc continuu.
Distribu#ia datelor este procesul de copiere a datelor ntr-o baz! de date
situat! la distan#!.
"2. Regulile $i restric#iile de integritate nu pot fi evitate de nici un limbaj
de acces.
"3. Un SGBDR trebuie s! fie capabil s! gestioneze bazele de date
exclusiv pe baza caracteristicilor sale rela#ionale.
No%iuni despre sistemul de gestiune a bazelor de date
Pentru realizarea $i func#ionarea bazei de date este necesar un
sistem de gestiune a bazelor de date rela#ionale (SGBDR). n prezent cel
mai popular sistem de gestiune a bazelor de date rela#ionale este
considerat Oracle. El reprezint! nucleul liniei de produse oferite de
Oracle Corporation, care include, printre altele, un set de instrumente de
dezvoltare a aplica#iilor din a patra genera#ie, 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 u$or extinse $i asupra altor SGBDR.
5
n#elegerea celor ce urmeaz!, este legat! de dou! concepte: baza de
date $i instan#a. O baz! de date este o colec#ie de date. Programul Oracle
stocheaz! aceste date folosind modelul rela#ional. Acest termen se refer!
att la datele fizice ct $i la structurile logice de memorie $i la procesele
din fundal. Instan"a 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 sus#inerea bazei de date.
Utilizarea programului Oracle prezint! urm!toarele 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 c#iva octe#i
pn! la c#iva gigaocte#i;
- suport! un mare num!r de utilizatori simultan, minimizeaz! conflictele
de acces la date $i garanteaz! simultaneitatea datelor;
- suport! un mediu client/server real. El permite mp!r#irea proces!rii
ntre baza de date server $i programele de aplica#ie ale clientului;
- ofer! caracteristici de siguran#! total! pentru limitarea $i monitorizarea
accesului la date $i a utiliz!rii acestora;
- se comport! identic pe toate platformele (Windows, UNIX, Macintosh
$i sisteme mainframe). Aceasta deoarece peste 80 la sut! din codul s!u
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 ac#iuni
ale programului $i ale utilizatorului care se desf!$oar! n memoria
acestor calculatoare.
n func#ionare, Oracle folose$te dou! structuri de memorie
principale. Zona global! a sistemului (SGA - System Global Area) este o
structur! de memorie care con#ine datele $i controleaz! informa#iile
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! con#ine datele $i controleaz! informa#iile
6
pentru un proces server. Structura PGA este creat! la declan$area 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 informa#iile 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 dispozi#ia utilizatorilor din
ntregul sistem presupune parcurgerea urm!toarelor trei etape:
- pornirea unei instan#e;
- montarea bazei de date;
- deschiderea bazei de date.
Pornirea unei instan#e este sinonim! cu pornirea bazei de date.
Cnd survine acest lucru, programul Oracle aloc! o por#iune a memoriei
partajate $i a proceselor din fundal. Aceast! por#iune 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 informa#iile 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 dispozi#ia utilizatorilor pentru opera#ii obi$nuite de baze de date.
Orice utilizator autorizat se poate conecta la o baz! de date Oracle
deschis! $i poate accesa informa#iile acesteia.
Oprirea bazei de date Oracle presupune parcurgerea urm!toarelor
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 fi$ierele de date. Demontarea bazei de date reprezint! disocierea bazei
7
de date de instan#!. n sfr$it, 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 c!reia i-au
fost acordate privilegiile corespunz!toare pentru accesul la date.
Accesarea bazei de date se poate face prin intermediul urm!toarelor
aplica#ii:
- aplica#ia utilizatorului ntr-un mediu client/server prin intermediul
SQL*NET;
- prin intermediul SQL*PLUS, una dintre cele mai r!spndite metode de
acces;
- instrumente Oracle, cum ar fi Developer 2000;
- prin intermediul unui apel OCI sau al unui alt apel de func#ie n care
sunt ncorporate instruc#iuni SQL, ntr-un limbaj de programare de
nivel sc!zut, cum ar fi C sau COBOL.
Lista care urmeaz! ilustreaz! accesarea de c!tre un utilizator a unui
SGBDR Oracle, ntr-un mediu client/server. Sunt descrise numai
opera#iile cele mai elementare pe care le efectueaz! Oracle.
". Un server Oracle posed! o instan#! pornit! $i o baz! de date montat! $i
deschis! utilizatorilor.
2. Aplica#ia utilizatorului ncearc! s! stabileasc! o leg!tur! cu serverul
Oracle.
3. Serverul recunoa$te cererea de conectare a clientului $i creeaz! un
proces n numele utilizatorului.
4. Aplica#ia utilizatorului recep#ioneaz! o confirmare privind succesul
conect!rii $i transmite instruc#iuni SQL pentru a accesa $i a actualiza
baza de date.
5. Procesul serverului recep#ioneaz! instruc#iuni SQL $i verific!
privilegiile de acces ale utilizatorului.
6. Dac! tranzac#ia SQL a decurs cu succes, procesul server transmite un
mesaj aplica#iei client. Dac! tranzac#ia nu s-a ncheiat cu succes,
serverul transmite clientului mesajul de eroare corespunz!tor.
7. n timpul acestei tranzac#ii, serverul previne conflictele de acces la
date cu alte tranzac#ii care solicita acelea$i date. De asemenea, serverul
8
gestioneaz! celelalte tranzac#ii $i urm!re$te situa#iile care necesit!
interven#ie.
Dic%ionarul de date Oracle
Nucleul bazei de date Oracle este dic#ionarul de date. Acest
instrument read-only" furnizeaz! tuturor utilizatorilor bazei de date
informa#ii despre baza de date asociat!. Dic#ionarul de date este creat
automat atunci cnd este creat! baza de date. Oracle actualizeaz!
dic#ionarul de date ca r!spuns la orice comand! DDL (Data Dictionary
Language - limbaj al dic#ionarului de date) emis!.
Dic#ionarul de date furnizeaz! urm!toarele informa#ii:
- numele tuturor obiectelor bazei de date inclusiv tabele, vederi,
instantanee, indec$i, sinonime, proceduri, func#ii $i a. m. d.;
- numele utilizatorilor bazei de date Oracle, privilegiile $i rolurile
acordate fiec!rui utilizator, informa#ii referitoare la restric#iile de
integritate, valori prestabilite pentru coloane, gradul de utilizare $i
alocarea spa#iului, informa#ii de auditare.
Dic#ionarul de date al bazei de date rela#ionale Oracle este compus din
dou! componente fundamentale:
- Tabele de baz!. -Aceste tabele reprezint! nucleul dic#ionarului care
stocheaz! informa#iile despre baza de date. Aceste tabele sunt accesate
direct de nsu$i 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-" poate citi.
- Vederi accesibile utilizatorilor. -Aceste vederi sintetizeaz! $i prezint!
informa#iile stocate n tabelele de baz! ale dic#ionarului de date. Aceste
vederi decodific! pentru utilizator informa#iile stocate n tabelele de
baz!. Majoritatea utilizatorilor au acces la aceste vederi $i nu la
tabelele de baz!.
Dic#ionarul de date este proprietatea utilizatorului Sys al sistemului
Oracle $i, prin urmare, nici un utilizator nu are privilegiul de a modifica
direct dic#ionarul de date. De obicei, pentru multe dintre vederile bazei
de date sunt create sinonime publice astfel, nct acestea sunt u$or
accesibile utilizatorilor finali. Administratorul bazei de date are
responsabilitatea de a crea aceste sinonime.
Accesul la dic#ionarul de date este ntotdeauna permis atunci, cnd
baza de date este deschis!. Dac! baza de date este nchis!, toate vederile
corespunz!toare dic#ionarului de date devin inaccesibile.
9
Dic#ionarul de date reprezint! o colec#ie logic! de tabele $i de
vederi. Ele pot fi accesate prin interog!ri ale utilizatorilor n vederea
ob#inerii de informa#ii despre baza de date. Dic#ionarul 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 leg!tur! cu coloanele
tabelelor $i vederilor accesibile.
all_constraints Defini#iile restric#iilor asociate tabelelor
accesibile.
all_db_links Leg!turile bazei de date accesibile utilizatorului.
all_errors Erori curente referitoare la toate obiectele accesibile
utilizatorului.
all_indexesDescrierea indec$ilor tabelelor accesibile
utilizatorului.
all_objectsObiectele accesibile utilizatorului.
all_sequencesDescrierea secven#elor accesibile utilizatorului.
all_snapshotsToate instantaneele accesibile utilizatorului.
all_synonymsToate sinonimele accesibile utilizatorului.
all_tablesDescrierea tabelelor accesibile utilizatorului,
all_triggersInforma#ii referitoare la to#i declan$atorii accesibili
utilizatorului.
all_usersInforma#ii despre to#i utilizatorii bazei de date.
all_viewsTextul vederilor accesibile utilizatorului.
Mersul lucr#rii:
". Activa#i comanda SQL*PLUS n dependen#! de sistemul de operare
instalat pe calculator (Unele sisteme cer introducerea comenzii n
registrul de jos).
SQL*PLUS va afi$a
Enter user-name:
2. Introduce#i numele SCOTT $i ap!sa#i [Enter]. SQL*PLUS va afi$a
"Enter password:".
"0
3. Introduce#i parola TIGER $i ap!sa#i [Enter] din nou. Parola nu se
afi$eaz! pe ecran.
SQL*PLUS va ar!ta versiunea ORACLE, $i pachetele disponibile (ex.,
PL/SQL).
Dup! aceea, SQL*PLUS va afi$a:
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 fi$ierului-spuller, de exemplu:
spool c:/aa/trace1
aici:
c:/aa/ - traseul spre fi$ierul-spuller;
trace1 denumirea fi$ierului-spuller
5. Introduce#i comanda:
describe all_tables;
$i ap!sa#i [Enter]. Care va fi rezultatul?
6. Repeta#i punctul 5 cu al#i operatori din lista vederilor $i nregistra#i
rezultatul.
7. Ie$irea din SQL*PLUS, se face cu ajutorul comenzii exit.
exit;
Rezumat
n acest capitol, v-a#i familiarizat cu sistemul de baze de date
rela#ionale Oracle. Modelul de baze de date rela#ionale este definit ca o
matrice bi-dimensional! compus! din linii $i coloane. Accesul la o
anumit! dat! se realizeaz! prin cunoa$terea numelui tabelului, coloanei $i
liniei n care se afl! data.
Sistemul de baze de date rela#ionale Oracle pune la dispozi#ie o
baz! de date care este u$or de n#eles, de utilizat $i suficient de flexibil!
pentru a satisface toate cerin#ele 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, a#i aflat
semnifica#ia termenului rela"ional, $i anume: o colec#ie de tabele care
sunt asociate ntre ele pe baza unei coloane comune.
""
LUCRAREA DE LABORATOR Nr. 2
Structuri logice de stocare a bazelor de date
Structurile logice de stocare dicteaz! modul n care este utilizat
spa#iul fizic al bazei de date, ele se pot manipula pentru a ajusta
utilizarea spa#iului de pe disc.
O structur! logic! de stocare este o unitate alocat! a spa#iului de
stocare. Scopul ei principal este de a defini modul n care va fi utilizat
spa#iul fizic de stocare a bazei de date. Este utilizat! pentru a crea
modelul de date rela#ional pornind de la structura fizic! a bazei de date.
Structurile logice de stocare includ spa#ii tabel, segmente, extinderi,
blocuri si fi$iere de date. Oracle aloc! spa#iul bazei de date pentru toate
datele bazei de date. Unit!#ile de stocare sunt blocurile de date,
extinderile $i segmentele. Aceste structuri pot fi manipulate prin opera#ii
de baze de date.
Structurile logice de stocare dicteaz! modul n care va fi utilizat
spa#iul fizic al bazei de date. Obiectele schemei $i rela#iile dintre ele
formeaz! profilul rela#ional al bazei de date. Aceast! configura#ie logic!
a bazei de date are influen#! asupra performan#elor bazei de date.
O baz! de date Oracle posed! att o structur! logic!, ct $i o
structur! fizic!. Structura fizic! con#ine fi$ierele de date, fi$ierele de
control $i fi$ierele jurnal curente. Prin separarea celor dou! tipuri de
structuri, fiecare poate fi gestionat! independent de cealalt! f!r! a afecta
accesul reciproc.
Atunci cnd sunt create structurile logice de stocare, spa#iul 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 spa#iului discului. Pentru a $ti s! aloca#i
spa#iu n mod eficient $i performant, trebuie s! n#elege#i cum este
utilizat spa#iul bazei de date.
Structura logic! a unei baze de date Oracle este definit! prin
urm!toarele caracteristici: spa#ii-tabel, segmente, extinderi, blocuri de
date.
Spa%ii-tabel
Atunci cnd o baz! de date este creat! de administratorul bazei de
date, este mp!r#it! n unit!#i logice multiple numite spa"ii-tabel. Datele
bazei de date sunt stocate logic n spa#iul-tabel, iar fizic sunt stocate n
fi$ierele de date care sunt asociate cu spa#iul-tabel.
"2
n afar! de stocarea logic! a datelor, administratorul bazei de date
poate folosi spa#ii-tabel pentru a realiza urm!toarele:
- controlul consum!rii spa#iului fizic de pe disc de c!tre baza de date;
- alocarea anumitor cote de disc utilizatorilor individuali;
- stabile$te reparti#ia stoc!rii datelor ntre dispozitive fizice multiple de
stocare.
Atunci cnd este creat un spa#iu-tabel, sunt create automat spa#iul-
tabel System $i fi$ierele de date. Spa#iul-tabel System con#ine ntregul
dic#ionar de date al bazei de date. Se recomand! s! fie creat cel pu#in un
spa#iu-tabel suplimentar pentru a p!stra informa#iile dic#ionarului de
sistem separat fa#! de date.
Utilizarea spa#iilor-tabel multiple asigur! flexibilitate n executarea
opera#iilor asupra bazei de date. Printre avantajele utiliz!rii spa#iilor-
tabel multiple se num!r! urm!toarele:
- separarea datelor de sistem fa#! de datele utilizatorului;
- permite separarea aplica#iilor ntre ele;
- posibilitatea dezactiv!rii anumitor spatii-tabel individuale $i men#inerea
celorlalte active;
- posibilitatea de a stoca spa#ii-tabel diferite pe unit!#i de disc distincte n
vederea mbun!t!#irii performan#elor $i reducerii conflictelor de acces
la date.
Spa#iul-tabel System con#ine, de asemenea, segmente de revenire si
unit!#i de program PL/SQL cum ar fi func#ii-procedur!, declan$atori $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
necesit!#ile de spa#iu aferente. Prin urmare, administratorul bazei de date
va aloca mai mult spa#iu pentru baza de date. Spa#iul-tabel System
trebuie s! fie ntotdeauna p!strat activ, deoarece Oracle trebuie s! aib!
oricnd acces la dic#ionarul de date.
Un spa#iu-tabel Oracle este p!strat de obicei activ (online) astfel,
nct datele pe care le con#ine s! fie accesibile tuturor utilizatorilor bazei
de date. Administratorul bazei de date poate s! dezactiveze spa#iul-tabel
(offline) pentru oricare dintre urm!toarele motive:
- pentru a efectua opera#iuni de ntre#inere sau copii de siguran#!
(backup) ale bazei de date;
- pentru a interzice accesul la un grup de tabele n timpul actualiz!rii sau
modific!rii unei aplica#ii;
"3
- pentru a interzice accesul la o por#iune a bazei de date n timp ce restul
bazei de date r!mne activ! (online).
Oracle mpiedic! executarea instruc#iunilor SQL care fac referire la
spatiile-tabel dezactivate. Orice tranzac#ie SQL activ! care face referire
la spatiile-tabel dezactivate va fi finalizat! normal. Integritatea datelor se
p!streaz! n segmentele de revenire (rollback segments) pentru
aceste segmente SQL active.
Un spa#iu-tabel nu poate fi dezactivat dac! exist! un segment de
revenire activ care face referire la el. Segmentul de revenire trebuie
rezolvat nainte ca spa#iul-tabel s! poat! fi trecut n stare inactiv!.
Un spa#iu-tabel dezactivat nu poate fi citit sau manipulat de nici o
alt! aplica#ie sau utilitate alta dect Oracle.
Spa%ii-tabel "i fi"iere de date
Fiecare spa#iu-tabel con#ine cel pu#in un fi$ier fizic de date. Fi$ierul
de date asociat cu un spa#iu-tabel con#ine datele pentru spa#iul-tabel
respectiv. Fi$ierele de date sunt asociate cu un singur spa#iu-tabel $i o
singur! baz! de date.
Fi$ierul de date ini#ial al fiec!rei baze de date este destinat p!str!rii
spa#iului-tabel System. Acest fi$ier este necesar pentru p!strarea
dic#ionarului de date $i a segmentului de revenire ce trebuie s! aib! o
dimensiune ini#ial! de cel pu#in 2KB. Pe m!sur! ce dimensiunea bazei de
date cre$te, pute#i ad!uga spa#iului-tabel fi$iere de date suplimentare. n
general, ideal este s! ad!uga#i mai degrab! pu#ine fi$iere de date de
dimensiuni mari dect mai multe fi$iere de date de dimensiuni mai mici.
Spa#iul-tabel $i fi$ierul de date asociat sunt goale n momentul n
care sunt create. Cu toate acestea, ele posed! spa#iu alocat n vederea
p!str!rii datelor viitoarei baze de date. n vederea p!str!rii acestor date,
n spa#iul-tabel sunt create segmente de date. Atunci cnd este creat un
segment ntr-un spa#iu-tabel sau cnd dimensiunea acestuia cre$te,
programul Oracle utilizeaz! spa#iul liber din fi$ierul de date asociat
pentru a aloca extinderi pentru segmentul respectiv. Remarca#i faptul c!
un obiect logic de stocare nu corespunde unui anumit fi$ier de date. n
schimb, un fi$ier de date este depozitarul datelor oric!rui obiect dintr-un
anumit spa#iu-tabel.
"4
Segmente
Segmentele sunt omoloagele fizice ale obiectelor bazei de date care
stocheaz! datele. Un segment este format din extinderi. Spa#iul alocat
segmentelor nu este eliberat dect atunci cnd segmentul este abandonat
sau trunchiat.
Oracle define$te 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 p!strate
datele. Aceste date sunt manipulate de un mare num!r de tranzac#ii SQL.
Pentru ob#inerea unor performan#e corespunz!toare, este important ca
administratorul bazei de date s! aloce cantitatea adecvat! de spa#iu de
stocare pentru fiecare segment. Dac! segmentul acumuleaz! continuu noi
extinderi, datele devin fragmentate, iar performan#ele scad. Baza de date
nu poate garanta alocarea contigu! a extinderilor.
Comanda pctfree poate fi folosit! pentru a monitoriza cantitatea
de spa#iu liber pe care o posed! un segment. Acest spa#iu liber poate fi
utilizat intern pentru spa#iul-tabel sau poate fi eliberat $i returnat bazei de
date.
Segmentul index
Segmentul index este creat pentru a p!stra datele unui index al
bazei de date. Sintaxa:
create index
Aceast! comand! v! permite s! defini#i parametrii extinderilor
segmentului index $i spa#iului-tabel n care va fi creat indexul.
Segmentul de revenire
Segmentul de revenire este o por#iune a bazei de date care
nregistreaz! ac#iunile unei tranzac#ii SQL n vederea derul!rii napoi a
acestora dac! se dore$te acest lucru. Un segment de revenire restabile$te
"5
baza de date n starea n care se g!sea la ultimul punct de salvare sau la
ultima acceptare.
Fiecare tranzac#ie are un segment de revenire asociat. De obicei,
acest segment este atribuit automat de c!tre baza de date. Ave#i totu$i
posibilitatea s! asocia#i o tranzac#ie cu un segment de revenire
corespunz!tor. Segmentul de revenire con#ine mai multe informa#ii.
Printre acestea se num!r! numele fi$ierului $i identificatorul blocului
pentru datele care au fost modificate $i pentru datele existente naintea
ultimei tranzac#ii. Aceste segmente de revenire pot fi citite $i scrise
exclusiv de c!tre programul Oracle.
Segmentul temporar
Un segment temporar este un spa#iu de lucru destinat prelucr!rii
unui tabel utilizat pentru p!strarea rezultatelor intermediare ale unei
tranzac#ii SQL. De exemplu, pentru o opera#ie de sortare va fi creat un
segment temporar reprezentnd zona de lucru pentru aceast! opera#ie.
Urm!toarele 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
num!r de blocuri contigue. Fiecare tip de segment este compus din una
sau mai multe extinderi. Atunci cnd un segment epuizeaz! spa#iul de
stocare care i-a fost alocat, programul Oracle i aloc! o nou! extindere.
Atunci cnd este creat, fiecare segment posed! cel pu#in o
extindere. La alocarea unei noi extinderi pentru un segment, se parcurg
urm!toarele etape:
". Programul Oracle parcurge spa#iul-tabel n c!utarea primului set
contiguu de blocuri de date libere care au mpreun! dimensiunea
incrementului stabilit pentru o extindere.
2. Programul Oracle g!se$te spa#iul liber necesar $i aloc! extinderii
respective o por#iune a acestui spa#iu liber egal! cu incrementul unei
extinderi.
3. Dic#ionarul de date este actualizat pentru a reflecta alocarea noii
extinderi $i faptul c! spa#iul alocat nu mai este liber.
"6
Extinderile segmentelor pot fi returnate atunci cnd nu mai sunt
necesare. n general, extinderile nu sunt returnate spa#iului-tabel ca
spa#iu 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, dic#ionarul de date este
actualizat pentru a reflecta extinderile recuperate ca reprezentnd spa#iu
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 octe#i de pe disc. n interiorul fi$ierelor de date spa#iul
de stocare este compus din blocuri de date. Formatul blocurilor de date
Oracle este identic, indiferent dac! blocul de date con#ine un tabel, un
index sau clustere de date.
Blocurile de date includ urm!toarele componente:
- antetul - con#ine informa#ii referitoare la bloc cum ar fi adresa
blocului $i tipul segmentului;
- catalogul de tabele - con#ine informa#ii despre tabele care posed! linii
n blocul respectiv;
- catalogul de linii - con#ine informa#ii despre liniile din bloc;
- spa#iu liber - folosit pentru inserarea noilor linii $i pentru actualizarea
liniilor care necesit! spa#iu suplimentar.
- linii de date - con#ine date apar#innd unor tabele sau unor indec$i.
Programul Oracle permite liniilor de date s! se ntind! pe spa#iul
mai multor blocuri. Spa#iul alocat liniilor de date nu este eliberat de
server atunci cnd sunt $terse linii. Acest spa#iu este reutilizat numai
atunci, cnd sunt inserate noi linii n blocul respectiv.
Pentru controlul utiliz!rii spa#iului liber al blocului de date,
proiectantul aplica#iei are la dispozi#ie doi parametri, pctfree $i
pctused. Ambii parametri pot fi specifica#i numai n momentul cre!rii
sau modific!rii tabelelor $i clusterelor.
Parametrul pctfree este folosit pentru a defini procentajul
blocului de date care urmeaz! s! fie p!strat liber pentru eventualele
actualiz!ri ale liniilor care exist! deja n blocul de date respectiv.
Parametrul din exemplul urm!tor, atunci cnd este folosit mpreun! cu
"7
comanda create table, va rezerva 35 de procente din blocul de date
utilizat pentru tabelul respectiv ca spa#iu liber pentru eventualele
actualiz!ri viitoare:
pctfree 35
Parametrul pctused este folosit pentru a defini procentul din
spa#iul existent n blocul de date pe care programul Oracle va ncerca
s!-" 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 pu#in 40 de procente din acesta:
pctused 40
Parametrii pctfree $i pctused sunt folosi#i mpreun! pentru a
optimiza utilizarea spa#iului din blocurile de date $i extinderile unui
segment de date.
Mersul lucr#rii:
". Activa#i comanda SQL*PLUS
2. Introduce#i numele de sistem SYSTEM $i ap!sa#i [Enter]. SQL*PLUS
va afi$a "Enter password:".
3. Introduce#i parola MANAGER $i ap!sa#i [Enter] din nou.
4. Introduce#i comanda pentru a avea fi$ierul spooller: spool
c:\1\trace2
Crearea noilor spa%ii-tabel "i a fi"ierelor de date
Pentru a crea un nou spa#iu-tabel trebuie s! poseda#i privilegiul de
sistem create tablespace. Instruc#iunea care urmeaz! creeaz! un
spa#iu-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.
"8
Urm!torul exemplu va ad!uga un nou fi$ier de date la un spa#iu-tabel
existent numit dbt_user_01:
alter tablespace dbt_user_01
add datafile 'c:\1/new_file_name_2' size
512k;
Rezultatul:
Tablespace altered.
Afi"area informa%iilor spa%iilor-tabel "i ale fi"ierelor de date
Oracle prevede mai multe vederi predefinite care v! permit s!
ob#ine#i informa#ii despre spa#iile-tabel $i fi$ierele de date. Iat! numele
acestor vederi:
Dba_tablespaces
user_tablespaces
dba_data_files
user_extents
user_segments
dba_extents
Urm!torul exemplu utilizeaz! vederea dba_tablespace pentru
a ob#ine informa#iile de stocare prestabilite pentru spa#iul-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
"9
Privi#i aceste vederi, pentru a dobndi o impresie de ansamblu a
spa#iilor-tabel $i fi$ierelor dumneavoastr! de date curente.
Rezumat
Structurile logice de stocare creeaz! modelul de date rela#ional 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 eficien#a bazei de date. De
asemenea, aceste structuri sunt folosite pentru a optimiza utilizarea
spa#iului de pe disc prin reducerea redundan#ei datelor.
Baza de date Oracle este mp!r#it! n unit!#i logice numite spa#ii-
tabel. Datele bazei de date sunt stocate n fi$iere de date. Un spa#iu-tabel
posed! cel pu#in un segment pentru stocarea datelor bazei de date.
Fiecare segment este compus din extinderi. O extindere este format! din
unit!#i contigue de spa#iu 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
parcurge#i n vederea preg!tirii cre!rii fizice a unei baze de date Oracle.
Etapele acestui proces includ identificarea opera#iunilor pe care le va
gestiona baza de date, precum $i crearea proiectului fizic al bazei de date.
n lipsa proiect!rii corecte a bazei de date, aceasta poate prezenta
urm!toarele deficien#e:
- Integritatea datelor este compromis! deoarece restric#iile de integritate
nu pot fi proiectate corect.
- Datele devin redundante.
- Performan#ele sunt afectate deoarece pentru finalizarea unei instruc#iuni
select pot s! fie necesare interog!ri suplimentare.
Pentru a crea o baz! de date Oracle este necesar! parcurgerea
urm!toarelor etape:
". Crearea unui model al activit!#ii companiei.
2. Crearea unui model al datelor.
3. Crearea unui proiect de baz! de date.
4. Crearea defini#iei tabelelor.
20
5. Crearea bazei de date rela#ionale.
Crearea unui model activit#%ii companiei
Aceast! etap! presupune strngerea de informa#ii despre activitatea
companiei pe care le va sus#ine baza de date Oracle. Pentru a dobndi o
bun! cunoa$tere a activit!#ii companiei, ve#i ntreprinde urm!toarele:
Ve#i lua interviuri:
a. Managerilor $i supervizorilor activit!#ilor companiei.
b. Poten#ialilor utilizatori.
c. Poten#ialilor beneficiari.
Descoperi#i obiectivul declarat al activit!#ii. Este util s! cunoa$te#i
scopurile activit!#ii unei companii astfel, nct baza de date s! fie
conceput! n vederea deservirii acestora.
Colabora#i cu utilizatorii $i supervizorii pentru a defini obiectivul
aplica#iei. Este obligatoriu s! defini#i preten#iile companiei referitoare
la ceea ce urmeaz! s! fac! baza de date $i aplica#ia.
Analiza#i specifica#iile de sistem curente.
Identifica#i viitoarele specifica#ii de sistem pentru baza de date.
n acest moment, ve#i fi n posesia unor cantit!#i mari de date. Este
necesar s! n#elege#i toate aceste informa#ii $i s! le ordona#i nainte de a
trece la etapa urm!toare.
Crearea unui model al datelor
Dup! ce a#i strns informa#iile precedente, trebuie s! construi#i un
model sau o reprezentare grafic! a necesit!#ilor $i regulilor companiei.
De exemplu, s! presupunem c! a#i aflat urm!toarele informa#ii despre
activitatea companiei n timpul interviurilor anterioare:
Compania are nevoie s! $tie ce agent de vnz!ri deserve$te fiecare
client.
De asemenea, trebuie s! cunoasc! numele $i telefonul clientului.
Vor s! aib! posibilitatea de a g!si rapid informa#ii despre un
anumit client.
O tehnic! de modelare verificat! pentru reprezentarea grafic! a
activit!#ilor companiilor este modelul ERD (Entity Relationship
Diagram - diagrama rela#iei dintre entit!#i). Acest model este format din
trei componente:
entitate - un element relevant n leg!tur! cu care sunt necesare
informa#ii;
atribut - ceva care descrie sau explic! o entitate;
2"
rela#ie - o asociere ntre dou! entit!#i.
Numai elementele relevante pentru activitatea companiei devin entit!#i.
Orice descrieri ale unei entit!#i devin atributele acesteia. Informa#iile pe
care le-a#i ob#inut privitor la activitatea companiei trebuie s! descrie
rela#iile ntre entit!#i. Ducnd acest exemplu mai departe, vom crea o
diagram! ERD simpl!. Consulta#i fig. 3." pentru un exemplu de
diagram! a rela#iilor dintre entit!#i.
Dup! ce a#i creat diagram! ERD ini#ial!, analiza#i-o mpreun! cu
responsabilii de compartimente pentru a v! asigura c! ea este corect! $i a
o mbun!t!#i dac! este cazul.
Printre avantajele utiliz!rii diagramei ERD se num!r! urm!toarele:
diagrama ERD documenteaz! cerin#ele informa#ionale ale companiei
ntr-un format clar $i precis;
aceast! abordare grafic! a model!rii o face u$or de n#eles;
simplitatea modelului l face u$or de utilizat.
Crearea unui proiect de baz# de date
Acum cnd diagrama ERD este complet!, acest model, mpreun!
cu informa#iile referitoare la activitatea companiei culese n Etapa ",
poate fi utilizat pentru crearea unui proiect de baz! de date. Figura 3.2
Informa!ii ob!inute n prima etap"
... Trebuie s" #tim care sunt clien!ii aronda!i agen!ilor de vnz"ri...

Trebuie, de asemenea, s" #tim numele si num"rul de telefon al


fiec"rui client

Un client va avea doar un singur reprezentant de vnz"ri arondat...


Client
-Nume
-Nr. telefon
Agent vnz"ri
-Nume
-ID
Fig. 3.". O diagrama simpl! a rela#iilor dintre entit!#i.
22
ilustreaz! modul n care diagrama ERD poate fi convertit! n schema
unei instan#e a unei baze de date standard.
Crearea defini%iei unui tabel
Schema instan#ei este compus! din rnduri care definesc
caracteristicile critice ale bazei de date. Entit!#ile din diagrama ERD
devin tabele; atributele devin coloane ale acestor tabele; iar rela#iile
devin chei externe. Dup! finalizarea acestei scheme, analiza#i-o din nou
cu responsabilii de compartimente pentru a v! asigura c! este complet! $i
corect!.
n Oracle, pentru crearea tabelelor fizice, este folosit! instruc#iunea
SQL create table. Mul#imea acestor tabele, mpreun! cu
considera#iile privind securitatea, reprezint! fundamentul bazei de date
rela#ionale.
Figura 3.3 ilustreaz! ct de u$or poate fi modelat! instruc#iunea
create table pornind de la tabelul schemei de instan#!.
Fig. 3.2 Conversia diagramei ERD n schema instan#ei.
Client
Nume
telefon
Vnz"ri Rep
-Nume,
-ID
Column Name ID Nume telefon vnz"ri_rep_id
Key Type PK
Nulls? NN
NN
FK
s emp.id
Exemple Data
$ Vasile 555$23$
23
Datatype nbr char
char nbr
Max.lungime
7 30 $2 7
23
Crearea unei baze de date rela%ionale
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 instruc#iune SQL.
Urm!toarea instruc#iune 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));
create table client_vanzari
(id number(7),
nume varchar2(30)
constraint s_client_nume_nn not null,
tel varchar2($2),
rep_vanzari_id number(7)
constraint s_client_pk_id pirimary key(id));
Fig. 3.3. Utilizarea schemei de instan#! ca baz! pentru
instruc#iunea create.
Column Name ID
nume telefon
rep_vanzari_id
Key Type
PK
Nulls? NN
NN
FK s_emp.id
Exemple Data
$ Vasile 555$23$ 23
Datatype
nbr char
char nbr
Max.lungime
7
30 $2
7
24
Odat! ce aceast! instruc#iune a fost lansat! prin intermediul programelor
SQL*PLUS sau SQL*DBA, tabelul exist! fizic n baza de date
rela#ional! Oracle.
Normalizarea datelor
Normalizarea este procesul prin care elimina#i problemele legate de
redundan#a datelor n proiectul bazei de date $i construi#i un model de
date care sus#ine diverse cerin#e func#ionale $i structuri alternative ale
bazei de date.
Normalizarea este un proces ordonat n care aplica#i urm!toarele trei
reguli referitoare la date:
Toate atributele trebuie specificate o singur! dat!. Aceasta este forma "
normal!. Aceasta nseamn! c! atributele nu trebuie s! se repete.
Un atribut trebuie s! depind! n ntregime de identificatorul (ID) unic al
entit!#ii pe care o descrie. Aceasta este forma normal! 2. Muta#i
atributele ntr-un tabel n care depind exclusiv de o cheie principal!.
Nu utiliza#i tabele n care atributele s! nu depind! exclusiv de o
singur! cheie.
Pentru a fi n forma normal! 3, o rela#ie 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.
Repeta#i de sine st!t!tor procedura de creare a unui tabel pornind
de la un model propriu , explica#i fiecare operator utilizat.
Rezumat
Proiectarea bazei de date presupune parcurgerea mai multor etape
pentru a colecta, a analiza $i a modela informa#iile referitoare la
activitatea companiei. In acest capitol, au fost prezentate etapele necesare
analiz!rii $i model!rii datelor.
Proiectarea judicioas! a bazei de date este necesar! deoarece n
lipsa ei performan#ele ar avea de suferit, integritatea datelor ar fi n
pericol, iar baza dumneavoastr! de date ar deveni prea mare datorit!
acumul!rii de date duplicate.
nsu$irea artei de a proiecta o baz! de date presupune acumularea
unei experien#e ndelungate. Cu toate acestea, parcurgnd etapele
25
prezentate n acest capitol, pute#i construi o baz! de date solid! $i bine
conceput!.
LUCRAREA DE LABORATOR Nr. 4
Tipuri de date. Tabele $
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 rela#ional!.
Coloanele tabelului definesc caracteristicile datelor $i n acela$i timp
atribuie un nume datelor din coloana respectiv!.
Coloanele, precum $i variabilele, $i constantele sunt caracterizate
din tipul $i lungimea datelor. Aceste propriet!#i fac ca serverul Oracle s!
trateze n mod diferen#iat tipurile de date diferite. Oracle recunoa$te
tipuri de date interne $i externe. Tipurile de date interne sunt cele care
descriu coloanele tabelelor, clusterele $i argumentele procedurilor.
Precompilatorul Oracle recunoa$te $i alte tipuri de date care se g!sesc 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! urm!toarele avantaje:
Restrng domeniul valorilor pe care le pot lua diverse entit!#i. De
exemplu, o entitate de tip date nu poate lua valoarea JIM.
Permit conservarea spa#iului de stocare prin adaptarea tipului la datele
stocate.
Permit conversia automat! a datelor n anumite condi#ii.
Urm!toarele 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 con#ine
$iruri de caractere de lungime fix!, cuprins! n domeniul "-255. Acest tip
de date stocheaz! date alfanumerice. Atunci cnd este utilizat tipul
char, Oracle efectueaz! urm!toarele opera#ii:
26
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 defini#ie a
coloanei, valorii i sunt ad!ugate spa#ii.
Dac! valoarea introdus! este mai lung! dect lungimea de defini#ie a
coloanei, Oracle returneaz! un cod de eroare.
Dac! valoarea care dep!$e$te lungimea coloanei posed! spa#ii la sfr$it,
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
con#ine $iruri de caractere de lungime variabil!, n domeniul "-2000
octe#i. 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! urm!toarele opera#ii:
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 defini#ie a
coloanei, nu sunt ad!ugate spatii la sfr$itul valorii. Acesta este un tip
de date n care valorile nu sunt completate cu spa#ii.
Dac! valoarea introdus! este mai lung! dect lungimea de defini#ie a
coloanei, programul Oracle returneaz! un cod de eroare.
Dac! valoarea care dep!$e$te lungimea coloanei posed! spa#ii la sfr$it,
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 "5 octe#i:
Nr_Articol varchar2(15)
Exemplu: "RX22723Y1"
Tipul varchar
n versiunea Oracle 7.", tipul varchar este sinonim cu tipul
varchar2.
27
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
num!rul total de cifre ale num!rului; scala se refer! la num!rul de cifre
din dreapta punctului zecimal. Aceste numere pot fi stocate cu o precizie
de pn! la 38 de cifre.
Exemplul urm!tor 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! urm!toarele:
6 este precizia. Precizia este sinonim! cu num!rul total de cifre
permise. Acest num!r include num!rul total de cifre din ambele p!r#i
ale punctului zecimal.
2 este scala, sau num!rul de cifre din dreapta punctului zecimal.
Este recomandabil s! specifica#i ntotdeauna precizia $i scala datei. n
acest fel se asigur! verificarea integrit!#ii 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
nop#ii.
Pentru opera#iile de intrare/ie$ire de date, formatul prestabilit este
DD-MON-YY. Ora este stocat! n format HH:MM:SS. Nu pute#i specifica
data n litere. Dac! nu specifica#i componenta pentru or! ntr-o valoare
de tip dat!, ora prestabilit! este "2:00:00 AM. n mod similar, dac!
omite#i componenta corespunz!toare datei calendaristice a unei valori de
tip dat!, data prestabilit! este prima zi a lunii curente. Domeniul valid
pentru date calendaristice este " Ianuarie 47"2 .E.N - " Ianuarie 47"2
E.N.
Pentru alte informa#ii despre: Formate pentru date calendaristice;
Modificatori de format, Sufixuri de formatare a datelor; Opera"ii
28
aritmetice cu date calendaristice, consulta#i 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! con#innd pn! la 2 gigaocte#i de
informa#ie. De$i tipul de date long este util n numeroase situa#ii, el
prezint! urm!toarele limit!ri:
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 ap!rea n restric#ii de integritate
Nu se pot face referiri la coloane de tip long n func#ii SQL cum sunt
substr, length $i a$a mai departe
Coloanele de tip long nu pot fi utilizate n clauzele where, group
by, order by $i connect by
n unit!#i de program PL/SQL nu pot ap!rea 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
fi$iere 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 opera#iunilor 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 apar#ine unui cluster. El este un identificator unic al
fiec!rei linii.
Fiecare tabel al unei baze de date Oracle posed! propria coloan!
rowid, pe care ns! nu o ve#i vedea afi$at! atunci cnd executa#i o
instruc#iune select * from sau describe. Adresa fiec!rei linii
poate fi citit! prin intermediul unei interog!ri SQL n care este folosit
cuvntul rezervat rowid drept nume de coloan!. Exemplul urm!tor
29
ilustreaz! o instruc#iune SQL care utilizeaz! tipul de date rowid,
precum $i valorile de ie$ire ale acesteia:
SELECT rowid, nume_ang FROM ang;
Rezultatul:
rowid NUME_ANG
------------------------------
000C0B7.0000.0001 'WHITE'
Aceast! adres! rowid se traduce n felul urm!tor:
000C0B7 Acesta este blocul de date care con#ine linia. Numerele
blocurilor sunt relative la fi$ierul de date la care apar#in $i nu la
spa#iul-tabel.
0000 Acesta este num!rul de secven#! al liniei n bloc. Num!rul primei
linii este ntotdeauna 0.
0001 Acesta este num!rul fi$ierului de date care con#ine 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 octe#i.
Conversii de tip
n anumite situa#ii, programul Oracle converte$te automat datele de
la un tip la altul. Pe de alta parte, pentru a converti datele n mod explicit
pute#i folosi urm!toarele func#ii Oracle:
to_char() to_date() to_number()
to_label() chartorowid() rowidtochar()
Pentru atribuiri, programul Oracle efectueaz! n mod implicit
urm!toarele 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 reu$e$te dac! Oracle poate converti tipul
valorii care urmeaz! s! fie atribuit! la tipul destina#iei atribuirii. Pentru
30
evaluarea expresiilor, Oracle efectueaz! n mod implicit urm!toarele
conversii de tip:
varchar2 sau char la number
varchar2 sau char la date
Conversiile char la number reu$esc numai dac! rezultatul de tip $ir de
caractere reprezint! un num!r valid. Conversiile char la date reu$esc
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 ap!rea n coloanele
tabelelor $i n expresii SQL. null se define$te ca o valoare care este
necunoscut!, f!r! sens sau irelevant!. Valorile null pot ap!rea n orice
coloan! att timp ct aceasta nu este supus! restric#iilor de integritate
not null sau primary key.
Nu confunda#i valoarea zero cu null. Zero este un num!r $i are o
semnifica#ie. Exemplul urm!tor ilustreaz! o instruc#iune 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 $
Tabelele reprezint! structurile fundamentale de stocare a bazelor de
date rela#ionale Oracle. Tabelele sunt compuse din linii $i coloane. O
coloan! con#ine date de un singur tip despre o anumit! entitate. Un
exemplu de coloan! ar putea fi nume sau ora$. O linie este o colec#ie de
date pentru fiecare coloan! a unui tabel. De exemplu, o linie a unui tabel
care con#ine coloanele nume_oras $i nume_stat ar putea fi
Chisinau" $i Moldova". Un tabel are un num#r fixat de coloane
predefinite $i mai multe linii. Num!rul de linii poate varia de la 0 la un
num!r practic nelimitat.
Tabelul Oracle poate fi folosit pentru p!strarea informa#iilor despre
o singur! entitate. Un asemenea tabel ar putea s! con#in! o list! a
numelor salaria#ilor sau o list! a numerelor departamentelor din
3"
companie. De asemenea, un tabel poate ilustra rela#ia dintre un angajat $i
num!rul departamentului la care apar#ine.
O baz! de date rela#ional! stocheaz! datele n unit!#i logice de stocare
numite tabele. Utilizarea tabelelor prezint! urm!toarele avantaje:
- baza de date devine mai u$or de n#eles datorit! structurii simple a
tabelelor;
- rela#iile dintre datele situate n diverse tabele sunt u$or de stabilit;
- regulile de integritate se pot construi rapid;
- tabelele reduc necesarul de spa#iu de stocare $i redundan#a datelor;
- pute#i da nume sugestive pentru tabele $i coloane, mbun!t!#ind
claritatea bazei de date.
Dup! ce a#i creat un tabel, pute#i s! insera#i linii de date n el folosind
instruc#iuni SQL. n continuare, informa#iile stocate n tabel sunt
disponibile n vederea interog!rii, actualiz!rii $i elimin!rii.
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 informa#iile provenind de la creatorul aplica#iei,
privind modul de utilizare a aplica#iei $i tipurile de date necesare
efectu!rii diverselor sarcini. n continuare sunt enumerate aspectele
generale care trebuie avute n vedere atunci, cnd inten#iona#i s! crea#i un
nou tabel.
Tabelele trebuie s! fie normalizate.
Coloanele care permit valori nule vor fi definite ultimele pentru a
conserva spa#iul de stocare.
Grupa#i tabelele n clustere ori de cte ori este posibil.
Specifica#i valori adecvate pentru parametrii pctfree $i pctused n
momentul cre!rii tabelului.
Specifica#i parametrii initrans $i maxtrans n momentul cre!rii
tabelului.
Specifica#i spa#iul-tabel n care vor fi p!strate tabelele.
Estima#i dimensiunea tabelului $i specifica#i parametrii de stocare.
Folosi#i, aceste estim!ri pentru a stabili resursele necesare de procesare
$i de spa#iu

de stocare pe disc.
32
n cazul n care constata#i c! ve#i avea tabele foarte mari, de genul
celor cu milioane de linii, trebuie s! lua#i anumite m!suri de precau#ie.
Dac! tabelul urmeaz! s! creasc! n timp ajungnd la dimensiuni foarte
mari, asigura#i-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, specifica#i parametrii de stocare astfel, nct
tabelul $i indec$ii lui s! se g!seasc! n spa#ii-tabel diferite; pe de alt!
parte, aloca#i suficient spa#iu temporar pentru ac#iuni, cum ar fi sortarea.
Calcularea dimensiunii tabelului
Parcurge#i urm!toarele $ase etape pentru a calcula dimensiunea
proiectat! a unui tabel. Aceste etape fumizeaz! o valoare estimativ!
rezonabil! $i nu un num!r precis.
". Determina#i spa#iul necesar pentru antetul blocului de date folosind
urm!toarea formul!:
antet bloc = (antet fix + antet de tranzac%ie variabil) + (catalog de
tabele + catalog de linii)
antet fix = 57 octe%i
antet de tranzac%ie variabil = 23*valoarea parametrului initrans
catalog de tabele = 4
catalog de linii = 2*num#rul de linii dintr-un bloc
2. Determina#i spa#iul disponibil pentru date per bloc de date, folosind
urm!toarea formul!:
Spa%iu disponibil pentru date = (dimensiune bloc - total antet
bloc) -((dimensiune bloc - (antet fix + antet de tranzac%ie variabil))
* (pctfree/$00))
Pute#i ob#ine dimensiunea blocului curent prin lansarea comenzii show
parameters db_block_size.
3. Calcula#i spa#iul de date combinat pe baza valorilor unei linii tipice.
Acest lucru se realizeaz! prin evaluarea num!rului de linii din tabel, a
tipului coloanelor $i a mediei dimensiunilor coloanelor de lungime
variabil!. Utiliza#i func#ia avg pentru fiecare linie pentru a-i afla
dimensiunea medie.
4. Calcula#i dimensiunea medie global! a unei linii folosind urm!toarea
formul!:
dimensiunea medie global! a liniei = antet linie +A + B + C
33
A = totalul lungimii tuturor coloanelor care stocheaz! 250 de octe#i sau
mai pu#in.
B = totalul lungimii tuturor coloanelor care stocheaz! 250 de octe#i sau
mai mult.
C = spa#iul de date combinat al tuturor coloanelor (calculat n etapa 3).
5. Determina#i num!rul mediu de linii per bloc cu urm!toarea formul!:
num!r mediu de linii/bloc = spa#iu disponibil/dimensiunea medie a
liniei. Spa#iul disponibil este cel calculat n etapa 2, iar dimensiunea
medie a liniei este cea calculat! n etapa 4.
6. Calcula#i num!rul de blocuri cu urm!toarea formul!:
num!r de blocuri = num!r de linii/num!rul mediu de linii per bloc.
Num!rul 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:
- folosi#i nume sugestive pentru tabel $i pentru coloane;
- selecta#i tipul de date adecvat pentru fiecare coloan!;
- normaliza#i tabelele atunci cnd este posibil;
- defini#i la sfr$it coloanele care accept! valori nule pentru a conserva
spa#iul de stocare;
- nu uita#i s! documenta#i numele tabelului $i scopul acestuia folosind
comanda comment;
- crea#i un tabel pentru rela#ii $i un tabel distinct pentru date.
nainte de a crea un tabel, trebuie s! stabili#i dac! sunt necesare
restric#ii de integritate. Pute#i defini restric#iile de integritate pentru
coloanele unui tabel pentru a impune automat anumite reguli de utilizare
pentru baza de date. De exemplu, dac! ave#i un tabel care con#ine
informa#ii referitoare la angaja#i, pute#i folosi restric#ia de integritate not
null pentru coloana nume_ang. Prezen#a acestei restric#ii va obliga
utilizatorul s! insereze o valoarea n aceast! coloan! pentru fiecare linie a
tabelului.
Not#. n exemplul urm!tor procedurile de Planificare a tabelelor $i
Calcularea dimensiunii tabelului nu sunt utilizate fiind utilizat spa#iul
predefinit al sistemului.
34
Crearea tabelelor
Pentru a crea un tabel, crea#i un script SQL folosind comanda
create table. Sintaxa general! a comenzii pentru a crea un tabel
este urm!toarea:
create table tablename
(nume_coloana tip_data restrictie,
(nume_coloana tip_data restrictie)
Numele tabelelor $i ale coloanelor pot fi formate din " pn! la 30
de caractere. Primul caracter trebuie s! fie o liter!. Numele tabelului nu
poate fi numele unui alt obiect de#inut de acela$i utilizator al serverului
Oracle. O restric"ie este o regul! care limiteaz! valorile datelor pentru
una sau mai multe coloane ale unui tabel.
Mersul lucr#rii:
". Activa#i comanda SQL*PLUS
2. Introduce#i numele parola de SCOTT
3. Introduce#i parola TIGER $i ap!sa#i [Enter].
4. Introduce#i comanda pentru a avea fi$ierul spooller: spool
c:\1\trace4
5. Introduce#i urm!torul script:
/* 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
);
35
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)
Explica%i fiecare rnd introdus "i returnat.
Rezumat
n aceast! lucrare, a#i f!cut cuno$tin#! cu tipurile de date Oracle ca
reprezentnd caracteristicile datelor $i cu tabelele, care sunt structurile
logice de stocare fundamentale ale bazei de date rela#ionale Oracle.
Aceste caracteristici sunt un set predefinit de informa#ii care definesc
felul $i lungimea datei. Programul Oracle trateaz! diferen#iat datele de
tipuri diferite.
Tipurile de date permit sistemului Oracle s! economiseasc! spa#iu
de stocare prin adaptarea tipului datelor la datele care urmeaz! a fi
stocate. n plus, utilizarea tipurilor de date v! permite s! restrnge#i
domeniul de valori pe care le poate con#ine o dat!, contribuind astfel la
asigurarea integrit!#ii datelor.
A#i nv!#at s! utiliza#i tipurile de date la definirea coloanelor,
variabilelor $i constantelor. n primul rnd stabili#i tipul datelor pe care le
vor con#ine, dup! care defini#i lungimea acestora. Oracle efectueaz!
conversii de tip fie implicit, fie explicit. Aceste conversii sunt permise
numai pentru anumite tipuri de date.
36
LUCRAREA DE LABORATOR Nr. 5
Crearea tabelelor 2
Mersul lucr#rii:
". Activa#i comanda SQL*PLUS
2. Introduce#i numele parola de SCOTT.
3. Introduce#i parola TIGER $i ap!sa#i [Enter].
4. Introduce#i comanda pentru a avea fi$ierul spooller: spool
c:\1\trace4
Exemplul care urmeaz! prezint! un script SQL care va crea un
tabel de angaja#i Ang cu cinci coloane. Tabelul va con#ine num!rul de
marc! al angajatului, numele $i prenumele angajatului, num!rul
departamentului de care apar#ine angajatul $i data angaj!rii.
Culege%i:
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 con#ine valori
duplicate). Restric#iile not null impuse unora dintre coloane indic!
faptul c! aceste coloane trebuie s! con#in! o valoare pentru fiecare linie.
Descrierea tabelului ang:
Describe ang;
Rezultatul:
Name Null? Type
---------------- -------- ----
MARCA_ANG NOT NULL NUMBER(15)
37
PRENUME NOT NULL VARCHAR2(20)
NUME NOT NULL VARCHAR2(40)
NR_DEPT VARCHAR2(12)
DATA_ANG NOT NULL DATE
Distrugerea tabelelor
Pentru a elimina din baza de date un tabel mpreun! cu toate datele
acestuia, folosi#i comanda drop table. De exemplu, urm!toarea
comand! distruge tabelul ang:
drop table ang;
Pentru a distruge un tabel, acesta trebuie s! se g!seasc! n schema
dumneavoastr!, n caz contrar, trebuie s! poseda#i privilegiul de sistem
drop any table.
Distrugerea unui tabel are urm!toarele efecte:
- defini#ia tabelului este eliminat! din dic#ionarul de date, tabelul si
datele devenind inaccesibile. Acest lucru este echivalent cu eliminarea
efectiv! a liniilor tabelului;
- to#i indec$ii $i declan$atorii asocia#i cu tabelul sunt distru$i, indiferent
dac! sunt crea#i 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 spa#iului-
tabel ca spa#iu 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!
utiliza#i comanda truncate table. Aceast! comand! elimin! toate
nregistr!rile din tabel $i elibereaz! spa#iul alocat care era folosit pentru
p!strarea nregistr!rilor 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 nregistr!ri cu
comanda delete from. n primul rnd, ei risc! s! primeasc! un mesaj
de eroare prin care sunt avertiza#i c! segmentul lor de revenire este prea
mic. Aceasta este o fals! eroare deoarece de obicei segmentul lor de
38
revenire este corect dimensionat, ns! tranzac#ia este prea mare. n al
doilea rnd, obiectul tabel p!streaz! ntregul spa#iu alocat atunci, cnd
comanda delete from este finalizat!. Programul Oracle nu
elibereaz! acest spa#iu dup! executarea acestei comenzi, deci c$tigul de
spa#iu este nul.
Comanda truncate table rezolv! ambele probleme. Ea
nu folose$te segmentul de revenire n timp ce este executat!. Prin
urmare, este mai rapid! $i nu este limitat! de spa#iul segmentului.
Folosirea comenzii truncate table duce la eliberarea spa#iului-
tabel imediat dup! execu#ia acesteia.
Comanda truncate table nu poate fi derulat! napoi; prin
urmare, trebuie s! o folosi#i cu precau#ie n aplica#iile dumneavoastr!.
Pentru a folosi comenzile truncate table sau truncate
cluster, tabelul, respectiv grupul trebuie s! se g!seasc! n schema
dumneavoastr! sau trebuie s! poseda#i privilegiul de sistem delete
any table.
n exemplul urm!tor, comanda truncate table este folosit!
pentru a elimina toate liniile din tabelul DEPT:
truncate table ang;
nc#rcarea unui tabel
Culege%i:
/* 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
39
);
Rezultatul:
Table created.
Descrierea tabelei
Culege%i:
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)
Culege%i:
/* 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');
40
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***************/
Observa%ie. Se acord! o deosebit! aten#ie formatului datei, dat fiind c! el
este legat de versiunea lingvistic! a sistemului de operare.
Afi"area (returnarea) tabelei Angajati
Culege%i:
select * from Angajati;
Rezultatul:
NAS NUME PRENUME S ANI ANGAJAT NR_ NR_POS
--------- --------- --------- - ---- --------- --- -----
-
199073432 Rusu Maria F 35 20-OCT-95 u12 ps272
198029823 Dionis Pavel M 42 17-NOV-98 u12 ps275
199549525 Bucatru Felix M 25 08-JAN-95 u14 ps71
199579013 Gurau christina F 35 27-JAN-94 u12 ps175
199571002 Ionescu Ilie M 35 19-SEP-95 u14 ps75
199487815 Dusca Lucia F 38 12-MAR-95 u18 ps410
199665972 Vasilescu Ion M 32 10-JAN-95 u10 ps235
199623961 Scutaru Maria F 35 26-JAN-96 u16 ps410
8 rows selected.
Modificarea tabelelor
Sistemul Oracle v! permite s! modifica#i orice tabel existent.
Motivele pentru care a#i putea dori s! modifica#i un tabel sunt
urm!toarele:
- pentru a ad!uga una sau mai multe coloane unui tabel;
- pentru a ad!uga sau a distruge restric#ii asociate unui tabel;
- pentru a modifica parametrii pctused $i pctfree;
4"
- pentru a modifica defini#ia unei coloane existente (tipul de date $i
lungimea).
Atunci cnd modifica#i defini#iile coloanelor unui tabel, acesta
trebuie s! fie gol pentru a putea face urm!toarele opera#ii:
- mic$orarea lungimii unei coloane;
- modificarea tipului de date ale unei coloane.
M!rirea 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, folosi#i comanda alter
table. Codul care urmeaz! adaug! o nou! coloan! tabelului dept:
alter table dept
add (profil_dept varchar2(35));
Urm!torul exemplu modific! tabelul ANG, indicnd faptul c! trebuie
completat cmpul salariu:
alter table emp
modify (sal not null);
Acest exemplu modific! tabelul ANG prin ad!ugarea unei restric#ii de tip
cheie extern!:
alter table ang
add constraint s_dept_man_id_fk foreign key
(nr_dept)
references dept;
Acest exemplu elimin! o restric#ie 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 g!seasc! n schema
dumneavoastr!; n caz contrar, trebuie s! poseda#i fie privilegiul alter
pentru tabelul respectiv, fie privilegiul de sistem alter any table.
Rezumat
n acest capitol, a#i f!cut cuno$tin#! cu tabelele, care sunt structurile
logice de stocare fundamentale ale bazei de date rela#ionale Oracle.
Tabelele pot fi privite ca matrice bi-dimensionale care con#in un num!r
predeterminat de coloane $i linii multiple.
42
Folosirea tabelelor este componenta esen#ial! a utiliz!rii bazei de
date rela#ionale Oracle. Tabelele furnizeaz! o structura logic!
simplificat! u$or de n#eles $i suficient de flexibil! pentru a satisface
cerin#ele bazei dumneavoastr! de date. A#i parcurs etapele necesare
cre!rii $i modific!rii tabelelor. Cu comanda create table, pute#i s!
optimiza#i spa#iul de stocare, precum $i s! stabili#i diverse restric#ii.
LUCRAREA DE LABORATOR Nr. 6
Integritatea datelor
O problem! critic! n gestionarea bazelor de date este asigurarea
respect!rii unui set predefinit de reguli n concordan#! cu activit!#ile, pe
care le sus#ine sistemul. Administratorul bazei de date, programatorul
aplica#iei $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. Restric#iile de
integritate sunt definite pentru tabele $i prin urmare toate vederile $i
sinonimele tabelelor sunt supuse restric#iilor de integritate. Dac! o
instruc#iune de manipulare a datelor ncearc! s! efectueze o ac#iune care
violeaz! o restric#ie de integritate, este generat! o eroare $i tranzac#ia este
derulat! napoi.
Restric#iile 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 nc!lcarea acestor
reguli, asigurnd astfel integritatea datelor.
Restric#iile de integritate sunt definite asupra tabelelor bazei de
date. Vederile $i sinonimele tabelelor sunt supuse restric#iilor de
integritate definite asupra tabelelor de baz!. n acest capitol sunt trecute
n revist! tipurile de restric#ii de integritate $i modul de utilizare a lor.
Este recomandabil s! defini#i regulile de integritate a datelor n
baza de date $i nu n aplica#ii. Este mai eficient s! o face#i la nivelul
bazei de date dect s! crea#i rutinele echivalente n aplica#ie. Integritatea
datelor la acest nivelul bazei de date asigur! viteza maxim!. Toate
43
aplica#iile pot beneficia de aceste restric#ii globale, deci nu este necesar
s! repeta#i structurile logice echivalente n fiecare aplica#ie.
Toate restric#iile au un nume. Pute#i denumi o restric#ie n timp ce o
crea#i. Dac! nu o face#i, programul Oracle i va atribui un nume. Numele
furnizat de utilizator trebuie s! fie diferit de toate celelalte restric#ii care
v! apar#in.
Tipuri de restric%ii de integritate
n baza de date rela#ional! Oracle, exist! urm!toarele tipuri de
restric#ii de integritate a datelor:
Null; Unique; Primary key; Referential; Check.
Restric#ia de integritate pentru un tabel este stabilit! atunci cnd
tabelul este creat sau modificat. Pentru a stabili o restric#ie de integritate,
pute#i include clauza constraint n comenzile create table sau
alter table. Exemplul urm!tor ilustreaz! sintaxa general! a clauzei
constraint:
CONSTRAINT nume_restric"ie tip_restric"ie
Tipurile de restric#ii sunt tratate n paragrafele care urmeaz!.
Restric%ia de integritate null
n mod prestabilit, toate coloanele unui tabel accept! valori nule
adic!, este permis! absen#a unei valori n coloan!. Prin stabilirea
restric#iei not nuil, impune#i coloanei specificate s! posede o valoare
pentru fiecare linie a tabelului.
Pentru a afi$a restric#iile null dintr-un tabel, folosi#i comanda
describe dup! care urmeaz! numele tabelului.
Restric%ia de integritate unique
Restric#ie 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! plasa#i aceast! restric#ie pe mai multe
coloane, definind astfel o a$a numit! restric#ie de unicitate compus!. O
restric#ie de unicitate compus! cere ca o combina#ie a coloanei cu cheie
unic! s! nu se repete. Instruc#iunea urm!toare creeaz! o restric#ie de
unicitate asupra coloanei marca_ang a tabelului ANG:
create table ang
(marca ang number(7)
constraint s_ang_marca_ang_uk unique,
44
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 restric#ia null. Pentru a afi$a alte restric#ii definite pentru un
tabel, trebuie s! folosi#i o alt! abordare. Consulta#i paragraful Afi$area
restric#iilor de integritate" care urmeaz! mai jos pentru a vedea care sunt
metodele de confirmare a restric#iilor unui tabel.
Restric#ia 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 restric#ii. In consecin#!, este
recomandabil s! plasa#i restric#ia not null pe coloanele cu valori
unice. n acest fel for#a#i introducerea unei valori pentru coloana
respectiv! si v! asigura#i c! valorile sunt .cu adev!rat distincte. In
declara#ia tabelului urm!tor sunt ad!ugate restric#iile 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));
Restric%ia de integritate primary key
Restric#ia de integritate primary key desemneaz! o coloan! sau
o combina#ie de coloane drept cheie principal! a tabelului. Cheia
principal! identific! n mod univoc fiecare linie a tabelului. De
asemenea, aceast! restric#ie creeaz! n mod implicit restric#iile not
null $i unique pe coloana respectiv!. De$i Oracle nu impune
existen#a unei chei principale pentru fiecare tabel, este bine s! v!
obi$nui#i s! o crea#i. De asemenea, este recomandabil s! desemna#i drept
cheie principal! o coloana sau o combina#ie de coloane ale c!ror valori
nu se modific! niciodat!.
45
Instruc#iunea urm!toare creeaz! o restric#ie 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 restric#ii asupra tabelelor, pute#i folosi o a doua
sintax!, cunoscut! sub numele de sintaxa restric"ie_tabel. Cu
aceast! sintax!, restric#iile sunt plasate la baza instruc#iunii create
table. Exemplul urm!tor creeaz! acela$i tabel ca n exemplul anterior,
folosind sintaxa restric"ie_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 existen#a a maxim o cheie principal!
pentru fiecare tabel. Cheia principal! nu poate fi de tip long sau long
raw. Nu pute#i desemna aceea$i coloan! sau combina#ie de coloane att
drept cheie principal! ct $i drept cheie unic! sau att drept cheie
principal! ct $i drept cheie de grup. Dac! ncerca#i s! face#i acest lucru,
programul Oracle genereaz! o eroare. Exemplul urm!tor 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;
Restric%ia de integritate prin referin%#
Restric#iile de integritate prin referin#! sunt folosite pentru a
impune regulile care dicteaz! rela#iile dintre coloanele diverselor tabele,
46
ntre tabele se creeaz! o rela#ie p!rinte-fiu. Tabelul p!rinte con#ine cheia
referit! iar tabelul fiu con#ine cheia extern!.
De exemplu, s! presupunem c! ave#i un tabel p!rinte care con#ine o
list! de 50 de state. Tabelul fiu poate fi un tabel de adrese care con#ine
numele $i adresa cunoscu#ilor dumneavoastr!. Tabelul de adrese are o
restric#ie prin referin#! care stabile$te c! singurele adrese valide sunt cele
n care statul se reg!se$te n tabelul p!rinte de state. Dac! ncerca#i s!
ad!uga#i o nou! adres! n care prescurtarea statului este ZZ, inserarea va
e$ua, deoarece ZZ nu exist! printre cele 50 de state ale tabelului p!rinte.
Exemplul urm!tor creeaz! aceast! restric#ie 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 folosi#i la stabilirea unei restric#ii de
integritate prin referin#!:
Cheie extern! - coloana sau setul de coloane incluse n defini#ia
restric#iei de integritate prin referin#!.
Cheie referit! - cheia unic! sau cheia principal! a aceluia$i tabel sau a
unui alt tabel la care face referire cheia extern!.
Tabel dependent - tabelul care con#ine cheia extern!.
Tabel referi - Tabelul care este referit de cheia extern!.
Sistemul Oracle impune cteva restric#ii n leg!tur! cu manipularea
cheilor prin referin#!. Nu pute#i s! modifica#i sau s! elimina#i cheia
referit! dac! cheia rezultant! ar viola restric#iile de integritate prin
referin#!. De exemplu, nu pute#i elimina o valoare a cheii referite,
deoarece acest lucru ar duce la violarea restric#iilor prin referin#!. Totu$i,
pute#i elimina valorile cheii referite dac! nu exist! nici o linie
dependent!.
Eliminarea n cascad# a cheilor externe
Exist! totu$i cazuri cnd este necesar s! elimina#i o valoare a cheii
referite. Atunci cnd nu exist! valori ale cheii externe care s! fac!
referire la valoarea respectiv!, pute#i elimina valoarea cheii referite. Dac!
ns!, exista linii avnd asociat! restric#ia foreign key ea va
mpiedica s! elimina#i valoarea cheii referite.
47
Pentru a rezolva aceast! problem!, stabili#i asupra cheii referite
restric#ia on delete cascade. Restric#ia on delete cascade
permite eliminarea din tabelul p!rinte a oric!ror valori ale cheii referite
care au linii dependente n tabelul fiu. Atunci cnd este eliminat! o
asemenea valoare n tabelul p!rinte, programul Oracle elimin! automat
liniile corespunz!toare din tabelul fiu.
Restric%ia de integritate check
Restric#ia de integritate check define$te n mod explicit o condi#ie
care trebuie s! fie adev!rat!. Fiecare linie a tabelului trebuie s! respecte
condi#ia. Condi#ia poate fi evaluat! $i la valoarea Unknown pentru a
permite prezen#a valorii null. Dac! se ncearc! executarea unei
instruc#iuni care ar duce la nerespectarea condi#iei, instruc#iunea este
derulat! napoi. Restric#ia check prezint! urm!toarele limit!ri:
Nu poate s! con#in! subinterog!ri
Nu poate s! con#in! func#iile sysdate, uid, user $i userenv
Nu poate utiliza pseudo-coloanele currval, nextval, level $i
rownum
Exemplul urm!tor creeaz! o restric#ie 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 restric#ii check.
Afi"area restric%iilor de integritate
In paragrafele anterioare, a fost utilizat! comanda describe
pentru afi$area restric#iilor nuil impuse coloanelor. Tabelul
USER_CONSTRAINTS con#ine informa#ii complete despre toate
restric#iile impuse unui tabel:
owner - Utilizatorul care este proprietarul defini#iei restric#iei.
constraint_name - Numele defini#iei restric#iei.
48
constraint_type - Tipul restric#iei. Tipurile sunt C pentru check,
P pentru cheie principal!, U pentru cheie unic! $i R pentru cheie
extern!.
table_name - Numele tabelului asociat cu defini#ia restric#iei.
search_condition - Textul condi#iei de c!utare pentru o condi#ie
check.
r_owner - Proprietarul tabelului la care se face referire ntr-o restric#ie
prin referin#!.
r_constraint_names - Numele restric#iei de integritate primary
key pentru coloana referit! de o restric#ie 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! op#iuni sunt
delete cascade $i no action.
Status - Valoare utilizat! intern de serverul Oracle.
Pentru a afi$a restric#iile asociate unui anumit tabel, efectua#i o
opera#iune select asupra tabelului USER_CONSTRAINTS pentru tabelul
vizat. De exemplu, instruc#iunea urm!toare afi$eaz! restric#iile asociate
tabelului LST_ARTICOLE:
select constraint name "Nume"
constraint_type "Tip"
from user constraints
where table name = 'lst_articole';
Date de ie$ire:
Nume Tip
S_COD_ARTICOLE_FK R
S_NR_ARTICOLE_UK U
S_ID_ARTICOLE_PK P
Tabelul USER_CONS_COLUMN furnizeaz! informa#ii suplimentare
n leg!tur! cu restric#iile impuse unui tabel. n continuare sunt prezentate
coloanele tabelului USER_CONS_COLUMN:
Owner Utilizatorul care este proprietarul defini#iei
restric#iei.
constraint_name Numele defini#iei restric#iei.
table_name Numele tabelului asociat cu defini#ia restric#iei.
column_name Numele coloanei specificate n defini#ia restric#iei.
Position Pozi#ia ini#ial! a coloanei n defini#ia restric#iei.
49
Instruc#iunea urm!toare afi$eaz! informa#iile referitoare la restric#iile
impuse coloanelor tabelului client:
select constraint_name "Restric"ie",
colmnn_name "Coloana"
from user_cons_coluinn where table_name =
"client";
Date de ie$ire:
Restrictie Coloana
--------- -------
S_CLIENT_ID_PK CLIENT_ID
S_ZONA_VANZARI_CLIENT_FK ZONA_VANZARI
Afi"area excep%iilor de la restric%iile de integritate
Pentru a ob#ine asisten#! la depanarea excep#iilor de la restric#ii,
include#i op#iunea exceptions n clauza enable a comenzilor
create table sau alter table. Op#iunea exceptions depune
identificatorul liniei (rowid), proprietarul tabelului, numele tabelului $i
numele restric#iei, pentru toate liniile care fac excep#ie de la restric#ii,
ntr-un tabel predefinit, EXCEPTIONS. Sistemul Oracle dispune de un
script, numit utlexcpt.sql, care creeaz! tabelul EXCEPTIONS.
Instruc#iunea urm!toare modific! un tabel $i adaug! o nou! restric#ie cu
op#iunea exceptions:
alter table personal,
enable primary key
exceptions into exceptions;
Odat! creat tabelul EXCEPTIONS, pute#i efectua asupra lui o
opera#ie de selectare pentru a ob#ine liniile care violeaz! o anumit!
restric#ie. Exemplul urm!tor folose$te o reuniune pentru a afi$a 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 ie$ire:
NR_DEPT MUME_DEPT DIR_DEPT
----- ------ --------
11 Ambalare Riley
50
11 Ambalare Riley
Activarea "i dezactivarea restric%iilor de integritate
O restric#ie de integritate definit! asupra unui tabel se poate afla n
dou! st!ri: activ! $i inactiv!. Dac! se ncearc! activarea unei restric#ii
asupra unui tabel care nu respect! regulile restric#iei de integritate,
programul Oracle genereaz! o eroare de excep#ie iar instruc#iunea n
cauz! este derulat! napoi. Dac! exist! o excep#ie, nu pute#i activa
restric#ia pn! cnd excep#ia nu este actualizat! sau eliminata.
Pentru activarea $i dezactivarea restric#iilor se folosesc comenzile
create table si alter table. Exemplul urm!tor dezactiveaz!
excep#iile impuse tabelului LST.ARTICOLE:
alter table lst_articole
disable constraint s_cod_articole_fk;
Exist! momente cnd este cu adev!rat necesar! dezactivarea
temporar! a restric#iilor. Acest lucru este necesar pe parcursul nc!rc!rii
datelor prin intermediul SQL*Loader $i pe parcursul proceselor de
import $i export. In ambele cazuri, dezactivarea temporar! a restric#iilor
poate mbun!t!#i eficien#a opera#iei.
Vederi predefinite pentru afi"area restric%iilor de integritate
Toate informa#iile referitoare la restric#iile de integritate sunt
stocate n dic#ionarul de date. Sistemul Oracle v! pune la dispozi#ie mai
multe vederi pe care le pute#i folosi pentru a vedea defini#iile curente ale
restric#iilor de integritate din dic#ionarul de date. Aceste vederi sunt
urm!toarele:
all_constraints - Defini#iile restric#iilor pentru toate tabelele
accesibile
all_cons_columns - Informa#ii n leg!tur! cu coloanele accesibile
care apar n defini#iile restric#iilor
user_constraints - Defini#iile restric#iilor asociate tabelelor
utilizatorului
user_cons_columns - Informa#ii n leg!tur! cu coloanele care apar
n defini#iile restric#iilor apar#innd utilizatorului
dba_constraints - Defini#iile restric#iilor pentru toate tabelele bazei
de date
5"
dba_cons_columns - Informa#ii n leg!tur! cu toate coloanele care
apar n defini#iile restric#iilor
Distrugerea restric%iilor de integritate
Pentru a distruge o restric#ie de integritate, lansa#i comanda alter
table cu clauza drop. n instruc#iunea urm!toare, este distrus!
restric#ia din tabelul
lst articole:
alter table lst_articole
drop constraint s_cod_articole_fk;
Mersul lucr#rii:
". Distruge#i eventualele tabele cu acelea$i nume:
drop table studenti;
drop table dates;
2. Crea#i 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));
Explica#i fiecare operator din procedura de mai sus.
3. Introduce#i 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');
52
4. Vizualiza#i 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. Crea#i 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. Introduce#i 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. Vizualiza#i 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
53
4 971253 1971 TI-972 8 n
5 971651 1971 AI-972 8.9 y
8. Introduce#i urm!torul rnd n tabelul "dates":
insert into dates values (00006,
971651,1971,'AI-973',8.9,'y');
9. Vizualiza#i din nou 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
4 971253 1971 TI-972 8 n
5 971651 1971 AI-972 8.9 y
6 971651 1971 AI-973 8.9 y
"0. Introduce#i nc! un rnd n tabelul "dates":
insert into dates values
(00003,961352,1995,'AST952',9.0,'y');
Rezultatul:
ERROR at line 1:
ORA-02291: integrity constraint
(SCOTT.STUDENTI_FOREIGN_KEY) violated - parent
key not found
Explica#i acest rezultat, compara#i cu opera#ia din punctul 8.
Introduce#i
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.
Explica#i acest rezultat
Introduce#i din nou:
54
drop table studenti;
Rezultatul:
Table dropped.
Rezumat
Integritatea datelor asigur! respectarea de c!tre baza de date a unui
set predefinit de reguli stabilite de administratorul bazei de date $i de
programatorul aplica#iei. Att administratorul ct $i programatorul preiau
aceste reguli din zona de activitate a companiei pe care o sus#ine baza de
date. Practic, activitatea comercial! este cu adev!rat cea care impune $i
define$te integritatea datelor.
Integritatea datelor $i restric#iile de integritate sunt mecanismele
folosite de serverul Oracle pentru a preveni introducerea datelor invalide
n baza de date. Aceste restric#ii asupra datelor asigur! respectarea cu
stricte#e a regulilor companiei.
n acest capitol, a#i f!cut cuno$tin#! cu diverse tipuri de restric#ii de
integritate $i a#i nv!#at s! le aplica#i la nivel de tabel. De asemenea, au
fost prezentate modurile de gestionare a restric#iilor.
LUCRAREA DE LABORATOR Nr. 7
Selectarea "i ntre%inerea datelor
Oracle stocheaz! datele n tabele pe care unii utilizatori le pot citi;
al#i 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 ac#iuni.
Selectarea datelor din baza de date Oracle este sinonim! cu
adresarea unei ntreb!ri bazei de date. Scopul dumneavoastr! este s!
primi#i informa#ii din baza de date ca r!spuns la ntreb!rile pe care le
pune#i sistemului Oracle. Pute#i pune tipuri diferite de ntreb!ri
sistemului Oracle, care sunt tratate n acest capitol.
ntre#inerea datelor n baza de date este o sarcin! predominant! fa#! de
alte sarcini n server. ntre#inerea datelor din baza de date Oracle implic!
eliminarea datelor nedorite, modificarea datelor existente $i inserarea
55
noilor date. Aceste ac#iuni sunt necesare pentru p!strarea intact! a
integrit!#ii $i preciziei datelor. Baza de date ar fi inutil! $i nu $i-ar
justifica existen#a dac! utilizatorii nu ar avea ncredere n datele acesteia.
Selectarea datelor din baza de date reprezint! ac#iunea de
interogare a serverului $i de ob#inere a unui r!spuns la aceast! interogare.
Utilizatorii, proiectan#ii, administratorii bazei de date $i al#ii au cu to#ii
nevoie s! selecteze date din baza de date. Utilizatorilor le este necesar
accesul la date pentru efectuarea sarcinilor zilnice legate de activit!#ile
comerciale ale companiei. Proiectan#ii $i administratorii bazei de date
trebuie s! poat! accesa datele pentru a dezvolta noi aplica#ii, pentru a
valida aplica#ii existente $i pentru a acorda asisten#! utilizatorilor finali.
Activit!#ile curente ale unei companii necesit! ntre#inerea continu!
a datelor. De exemplu, o companie poate ad!uga noi comenzi n baza de
date prin inserarea n server a unor linii noi con#innd comenzile. In plus,
aceast! companie poate s! modifice cantit!#ile din comenzile existente
prin modificarea liniilor din server corespunz!toare 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 ntre#inerea datelor bazei de date.
Mersul lucr#rii:
Afi"area coloanelor tabelelor
Pe parcursul acestui capitol, este esen#ial s! $ti#i exact ce tabele $i
coloane dori#i s! selecta#i sau s! ntre#ine#i. Comanda describe v!
poate ajuta s! stabili#i daca ntr-adev!r accesa#i tabelul, vederea sau
sinonimul dorit. Comanda describe afi$eaz! structura tabelului,
incluznd numele coloanelor, tipul, lungimea $i precizia datelor $i starea
null sau not null a acestora.
Crea%i tabelul Angajati, din Lucrarea de laborator Nr. 5,
pentru aceasta pute#i utiliza fi$ierul-spuller al lucr!rii precedente.
Exemplul cu utilizarea comenzii describe pentru a afi$a
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 face#i referire n instruc#iunile
dumneavoastr! de selectare $i de manipulare a datelor. Coloana Null?
specific! dac! o coloan! trebuie s! con#in! date. O coloan! trebuie s!
56
con#in! 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 afi$area datelor din baza de date Oracle, se
folose$te instruc#iunea SQL select. Sintaxa general! a instruc#iunii
select este urm!toarea:
select nume_coloana(e) from tabel (sau vedere sau
instantaneu)
Programul Oracle aliniaz! la stnga toate datele de tip caracter returnate
de instruc#iunea select, respectiv la dreapta datele de tip numeric.
Afi"area (returnarea) unei coloane a tabelei Angajati
Culege%i:
select NUME from Angajati;
Rezultatul:
NUME
---------
Rusu
Dionis
Bucatru
Gurau
Ionescu
Dusca
Vasilescu
Scutaru
8 rows selected.
Afi"area tuturor liniilor
Pentru a afi$a toate liniile unui tabel, folosi#i asteriscul (*) n
instruc#iunea se1ect. Exemplul urm!tor selecteaz! toate liniile din
tabelul ANG:
select * from Angajati;
Pute#i, de asemenea, s! afi$a#i toate coloanele unui tabel prin enumerarea
numelor tuturor coloanelor n instruc#iunea select.
57
Selectarea anumitor linii de date
Pentru a selecta anumite linii de date dintr-un tabel, folosi#i clauza
where n instruc#iunea select. Clauza where este compus! din
nume de coloane, operatori de compara#ie, constante $i expresii. Pute#i
folosi oricare dintre operatorii de compara#ie (=, <, >, <=, >=, like,
between, in sau null).
Clauza where accept! mul#i operatori diferi#i. n exemplul
urm!tor, instruc#iunea select folose$te 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 compara#ia cu tiparul numai pentru primele caractere ale
fiec!rei date din coloan!. Oracle caut! coinciden#ele 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 pozi#ie men#ionat!.
Culege%i:
Select * from Angajati
where NUME like 'D%';
Rezultatul:
NAS NUME PRENUME S ANI ANGAJAT NR_ NR_POS
--------- ------- --------- - ----- --------- --- ------
198029823 Dionis Pavel M 42 17-NOV-98 u12 ps275
199487815 Dusca Lucia F 38 12-MAR-95 u18 ps410
Selectarea liniilor folosind condi%ii complexe
Sistemul Oracle permite utilizarea unor condi#ii complexe n
instruc#iunea select. Acest lucru nseamn! c! pute#i folosi orice num!r de
condi#ii n clauza where a instruc#iunii select.
Culege%i:
select NAS,NUME,PRENUME,SEXE, ANI,
ANGAJAT, NR_POSTULUI from Angajati
where SEXE='M';
Rezultatul:
NAS NUME PRENUME S ANI ANGAJAT NR_POS
--------- --------- -------- - ----- --------- -----
198029823 Dionis Pavel M 42 17-NOV-98 ps275
199549525 Bucatru Felix M 25 08-JAN-95 ps71
58
199571002 Ionescu Ilie M 35 19-SEP-95 ps75
199665972 Vasilescu Ion M 32 10-JAN-95 ps235
Ordonarea liniilor selectate
Pute#i ordona liniile afi$ate de o interogare n ordine cresc!toare
sau descresc!toare. n mod prestabilit, programul Oracle afi$eaz! 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, folosi#i clauza order by n instruc#iunea select. Pute#i
include urm!toarele clauze mpreun! cu clauza order by pentru a
ob#ine rezultatul dorit:
ascordoneaz! liniile n ordine cresc!toare. Acesta este modul
prestabilit pentru clauza order by.
descordoneaz! liniile n ordine descresc!toare.
Exemplul urm!tor afi$eaz! liniile rezultante ale unei interog!ri n ordine
cresc!toare:
Culege%i:
select NUME "Nume"
from Angajati
order by NUME asc;
Rezultatul:
Nume
---------
Bucatru
Dionis
Dusca
Gurau
Ionescu
Rusu
Scutaru
Vasilescu
8 rows selected.
Instruc#iunea urm!toare afi$eaz! liniile interog!rii ordonate nti dup!
sex $i apoi dup! prenume.
Culege%i:
select prenume,sexe, ani from Angajati
order by sexe, prenume asc;
59
Rezultatul:
PRENUME S ANI
--------- - ---------
Lucia F 38
Maria F 35
Maria F 35
christina F 35
Felix M 25
Ilie M 35
Ion M 32
Pavel M 42
Interogarea condi%ionat#
Culege%i:
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
instruc#iuni SQL pentru ntre#inerea datelor din baza de date.
NOT!. Exemplele, care urmeaz# mai jos, transforma%i-le n a"a fel
ca s# poat# fi valabile pentru tabelul utilizat, "i proba%i-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
ad!ugate n linia respectiv! sunt specificate n clauza values a
instruc#iunii insert.
Exemplul urm!tor folose$te o instruc#iune insert simpl! pentru a
ad!uga o linie la tabelul ANG. Remarca#i faptul c!, pentru a genera
automat numere secven#iale unice pentru prima coloan!, n instruc#iune
se folose$te generatorul de secven#! s_marca_ang.
insert into ang values
(s_marca ang.nextval,'Ion','Petrescu', '23-B');
60
Pute#i 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 excep#ia coloanei comentarii. Coloana comentarii r!mne goal!,
cu alte cuvinte are valoarea null.
insert into lista articole (cod_articol,
nr_articol, nume_articol)
values (s_cod_articol.nextval,'19832-
003",'Ventilator');
Comanda urm!toare folose$te o subinterogare pentru generarea valorilor
de intrare pentru instruc#iunea insert. Acest exemplu copiaz!
informa#iile referitoare la angaja#i 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! modifica#i valoarea datelor din
orice coloan! pe care o specifica#i. Instruc#iunea update este cea care
efectueaz! aceast! sarcin!. Aceast! parte a capitolului descrie
instruc#iunea update $i diversele ei clauze.
Exemplul urm!tor actualizeaz! toate liniile din tabelul VANZARI
prin stabilirea unui comision de 0.25 pentru to#i agen#ii de vnz!ri:
update financiar.vanzari
set comision = '.25';
Instruc#iunea urm!toare modific! valoarea coloanei nr_dept pentru
angajatul cu numar_marca egal cu "0923:
update ang
set nr_dept = '982-C'
WHERE marca_ang = 10923;
Pute#i de asemenea s! efectua#i mai multe actualiz!ri simultan pe aceea$i
linie. De exemplu:
update ang
set nr_dept = '982-C', data_incepere = 'l-JUN-
1995'
where marca_ang = 10923;
6"
Exemplul urm!tor actualizeaz! mai multe linii ale unui tabel. n
acest exemplu, num!rul departamentului pentru to#i angaja#ii
departamentului Livr!ri 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, folosi#i comanda SQL delete. Nu pute#i s! elimina#i linii
dintr-o vedere dac! interogarea de definire a vederii con#ine una dintre
urm!toarele construc#ii:
join
operatorii set sau distinct
clauza group by
o func#ie de grup
Instruc#iunea urm!toare elimin! toate liniile din tabelul
CALIFICARE_":
delete from calificare_l;
Pentru a elimina toate liniile dintr-un tabel, este recomandabil s!
folosi#i comanda SQL truncate. Aceasta este mai eficient! dect
comanda delete.
Uneori dori#i s! elimina#i numai anumite linii ale unui tabel. Pentru
a face acest lucru, folosi#i comanda delete cu clauza where. De
exemplu, instruc#iunea urm!toare elimin! numai acele linii ale c!ror
cantit!#i vndute sunt mai mici dect "00:
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
urm!toarele motive:
truncate este o comand! DDL si prin urmare nu genereaz!
informa#ii de revenire. Aceast! comand! trebuie folosit! cu precau#ie
deoarece ea nu poate fi derulat! napoi.
62
Trunchierea unui tabel nu activeaz! nici unul dintre declan$atorii
delete ai tabelului.
Dac! trunchia#i un tabel principal al unui instantaneu, comanda
truncate nu nregistreaz! nici un fel de informa#ii n jurnalul de
instantanee al tabelului.
De asemenea, comanda truncate v! permite s! re#ine#i spa#iul
eliberat spre a fi utilizat n continuare de tabelul respectiv. n mod
prestabilit, sistemul Oracle returneaz! serverului spa#iul alocat eliberat.
Manipularea interactiv# a datelor
Programul Oracle v! permite s! scrie#i un script SQL care s!
solicite utilizatorului informa#iile care urmeaz! s! fie folosite ntr-o
ac#iune ulterioar! asupra bazei de date. De exemplu, pute#i solicita
utilizatorului valorile care urmeaz! s! fie folosite ntr-o instruc#iune
insert. Alternativ, scriptul poate solicita utilizatorului valorile care
urmeaz! s! fie folosite ntr-o instruc#iune select. Acest paragraf
folose$te comanda accept $i valoarea de substitu#ie (&).
Comanda accept for#eaz! serverul s! defineasc! valoarea unei
variabile ca fiind egal! cu valoarea introdus! ntr-o instruc#iune
accept. Caracterul & cere programului Oracle s! nlocuiasc! valoarea
variabilei cu valoarea care a fost introdus! de utilizator. Exemplul
urm!tor folose$te instruc#iunea accept pentru a solicita utilizatorului
valoarea nr_dept care va fi utilizat! n instruc#iunea select.
accept dept prompt 'Introduceti numarul
departamentului:' select from lista_dept where
nr_dept = &dept;
Exemplul urm!tor folose$te comanda accept $i caracterul &
pentru a indica programului Oracle s! foloseasc! valorile introduse n
instruc#iunea 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);
63
Rezumat
Selectarea datelor din baza de date nseamn! interogarea bazei de
date $i ob#inerea unor linii de date drept r!spuns. ntre#inerea 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 existen#ei bazelor de date
este ca oamenii s! le acceseze $i s! citeasc! datele stocate n ele. Pentru
satisfacerea cerin#elor acestor utilizatori, datele trebuie p!strate actuale $i
precise. ntre#inerea datelor este o condi#ie esen#ial! a eficien#ei bazei de
date.
Afi$area structurii tabelelor este un aspect important al select!rii $i
ntre#inerii tabelelor Oracle. Trebuie s! cunoa$te#i numele, tipul $i
lungimea datelor unei coloane pentru a reu$i s! selecta#i $i s! ntre#ine#i
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 rela#ionale, definit de ANSI
(American National Standards Institute). SQL este un limbaj
neprocedural. Opera#iile executate n baza de date Oracle sunt efectuate
folosind instruc#iuni SQL. SQL posed! un set cuprinz!tor 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 integrit!#ii $i consisten#ei datelor.
O instruc#iune SQL este un set de cuvinte rezervate cu o sintax!
determinat!, care specific! serverului Oracle s! efectueze o ac#iune. O
instruc#iune SQL incomplet! nu poate fi executat!; programul Oracle
returneaz! o eroare. Instruc#iunile SQL se mpart n urm!toarele
categorii:
Instruc#iuni DML (Data Manipulation Language - limbaj de manipulare
a datelor), interogheaz! sau manipuleaz! obiecte existente n schem!.
64
De exemplu, ele v! permit s! insera#i noi linii ntr-un tabel sau ntr-o
vedere.
Instruc#iuni DDL (Data Definition Language - limbaj de definire a
datelor), definesc sau modific! structura obiectelor din schem!. De
exemplu, pentru crearea unui tabel, ve#i folosi instruc#iuni DDL.
Instruc#iuni pentru controlul tranzac#iilor, gestioneaz! toate
modific!rile efectuate de instruc#iunile DML. De exemplu,
instruc#iunile pentru controlul tranzac#iilor salveaz! datele.
Instruc#iuni SQL ncapsulate, ncorporeaz! instruc#iuni DML, DDL $i
instruc#iuni pentru controlul tranzac#iilor ntr-un program scris ntr-un
limbaj procedural. De exemplu, o instruc#iune SQL ncapsulat! v!
permite s! crea#i $i s! elibera#i cursori.
Instruc#iunea pentru controlul sistemului alter session este
utilizat! pentru a termina execu#ia proceselor $i pentru a gestiona al#i
parametri de sistem.
Instruc#iuni pentru controlul sesiunii, gestioneaz! propriet!#ile sesiunii
unui utilizator. De exemplu, ve#i folosi instruc#iuni pentru controlul
sesiunii pentru a activa $i dezactiva roluri.
SQL este un limbaj utilizat de:
- administratorii bazei de date;
- creatorii de aplica#ii;
- administratorii de securitate ai bazei de date;
- utilizatorii finali.
Limbajul SQL permite s! dezvolta#i programe performante, s!
lucra#i cu grupuri mari de date, v! scute$te 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
interog!ri ca date de intrare pentru o alt! instruc#iune de interogare,
Limbajul SQL este folosit pentru a crea $i a manipula toate
obiectele Oracle. Aceste obiecte includ tabele, vederi, grupuri,
instantanee, secven#e, sinonime, roluri $i spa#ii-tabel.
Stilul "i structura limbajului SQL
Limbajul SQL reprezint! mijlocul principal de comunicare cu baza
de date Oracle. Trebuie n#elese cteva stiluri $i structuri, printre care:
Programul SQL*Plus trateaz! comenzile dumneavoastr! n mod
nediferen#iat indiferent dac! sunt tastate cu majuscule sau cu litere
65
mici. Singura excep#ie o reprezint! cazul n care se efectueaz! o
compara#ie.
Instruc#iunile SQL ncep cu comanda SQL, urmat! de restul
instruc#iunii. De exemplu, urm!toarea instruc#iune SQL folose$te
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
urm!toarea structur!:
error: cod_ eroare: descriere eroare
Denumirea obiectelor
Multe dintre obiectele Oracle sunt compuse din p!r#i pe care
trebuie s! le denumi#i atunci cnd crea#i obiectul. De exemplu, coloanele
tabelelor $i secven#ele sunt denumite n timp ce sunt create. Limbajul
SQL impune o serie de reguli privind denumirea obiectelor. Regulile
urm!toare sunt valabile pentru numele obiectelor, precum $i cele ale
utilizatorilor bazei de date:
". Numele trebuie s! aib! ntre " $i 30 de octe#i. Numele bazelor de date
sunt limitate la opt octe#i; leg!turile bazelor de date pot avea pn! la
"28 de octe#i.
2. Numele nu pot fi ncadrate ntre ghilimele simple (apostrofe).
3. Nu se face distinc#ie ntre majuscule $i litere mici.
4. Numele pot con#ine numai caractere alfanumerice $i caracterele _, $ $i
#. Numele leg!turilor bazelor de date pot con#ine $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 spa#iu al numelor. Toate
obiectele enumerate ntr-un anumit aliniat sunt con#inute n respectivul
spa#iu al numelor. Aceasta nseamn!, de exemplu, ca un tabel $i o
vedere se g!sesc n acela$i spa#iu al numelor drept pentru care nu pot
avea nume identice. Spa#iile-tabel se g!sesc n alt spa#iu al numelor
dect indec$ii $i prin urmare pot avea nume identice. Fiecare dintre
urm!toarele aliniate reprezint! un singur spa#iu al numelor.
Tabele, vederi, secven#e, instantanee, pachete, sinonime private,
proceduri de sine st!t!toare $i func#ii
Indec$i
Restric#ii
66
Grupuri
Declan$atori
Leg!turi private de baze de date
Leg!turi publice de baze de date
Spa#ii-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 con#ine blancuri
Dac! vre#i ca programul s! fac! deosebirea ntre majuscule $i
literele mici
Dac! vre#i s! ncepe#i numele cu orice altceva dect un caracter
alfabetic
Pentru a descrie acela$i element, este bine s! folosi#i acela$i nume de
coloan! n toate tabelele.
Referirea obiectelor Oracle
Sintaxa general! pentru referirea unui obiect sau a unei p!r#i a unui
obiect este:
schema.nume_obiect.nume_parte_obiect
@legatura_baza_de_date
Schema este locul n care se g!se$te obiectul. Acest identificator v!
permite s! face#i referire la un obiect situat n baza de date a altui
utilizator. Dac! omite#i acest identificator, Oracle consider! c! obiectul
se g!se$te n schema dumneavoastr!.
nume_obiect este numele obiectului la care se face referire.
nume_parte obiect v! permite s! face#i referire la o parte a unui
obiect, cum ar fi o coloan! a unui tabel. Acest parametru este op#ional.
legatura_baza_de_date este numele bazei de date care con#ine
obiectul. Aceasta nu poate fi baza dumneavoastr! de date - este baza de
date a altui utilizator, pe care vre#i s! o accesa#i. Dac! este omis acest
parametru, programul Oracle presupune c! face#i referire la un obiect din
propria dumneavoastr! baz! de date.
ntr-o instruc#iune SQL care face referire la un obiect Oracle,
programul evalueaz! contextul instruc#iunii SQL $i localizeaz! obiectul
n spa#iul numelor corespunz!tor. Dac! programul Oracle nu reu$e$te s!
67
g!seasc! obiectul n spa#iul numelor corespunz!tor, returneaz! o eroare.
Programul Oracle ncearc! ntotdeauna s! localizeze obiectul n schema
dumneavoastr! nainte de a lua n considerare spa#iile numelor din afara
schemei dumneavoastr!. Dac! obiectul nu se g!se$te n schema
dumneavoastr!, programul Oracle caut! n spa#iul numelor care con#ine
sinonimele publice. Dac! obiectul nu este g!sit, Oracle returneaz! un
mesaj de eroare.
Analiza instruc%iunilor SQL
Atunci cnd o aplica#ie lanseaz! o instruc#iune SQL, reprezentarea
analizat! sintactic a instruc#iunii SQL este nc!rcat! n zona SQL
partajat! din server. Analiza presupune efectuarea urm!toarelor opera#ii:
- verificarea corectitudinii sintactice $i semantice a instruc#iunilor SQL;
- stabilirea faptului dac! procesul care a lansat instruc#iunea SQL posed!
privilegiile necesare pentru executarea ei;
- consultarea dic#ionarului de date n vederea analiz!rii defini#iilor
tabelului $i ale coloanelor;
- instituirea de blocaje asupra obiectelor necesare astfel, nct defini#iile
acestora s! nu se modifice n timpul execu#iei;
- determinarea planului optim de execu#ie care urmeaz! s! fie utilizat n
momentul execut!rii instruc#iunii.
Analiza are loc numai dac! nu exist! nici o alt! instruc#iune SQL
identic! n zona SQL partajat!. Dac! n aceast! zon! exist! deja o copie,
sistemul Oracle folose$te copia din memorie n loc s! analizeze copia
codului surs!, pe care ncerca#i s! o executa#i. n cazul n care nu exist!
nici o copie, sistemul Oracle trece la analiza instruc#iunii. Analiza
instruc#iunii are loc o singur! dat!, indiferent de cte ori este executat!
instruc#iunea. Programul Oracle re-execut! instruc#iunea analizat! la
fiecare referire ulterioar! a instruc#iunii respective.
Validarea sintactic! $i semantic! efectuat! n timpul analizei
detecteaz! numai erorile care pot fi g!site naintea execu#iei instruc#iunii.
Exist! ns! erori pe care analiza nu le poate detecta. De exemplu, erorile
legate de conversia datelor nu pot fi depistate nainte de execu#ia
instruc#iunii.
Procesarea interog#rilor
Procesarea interog!rilor este pu#in diferit! de a altor tipuri de
instruc#iuni SQL, deoarece interog!rile returneaz! date sub form! de
68
rezultate daca execu#ia instruc#iunii s-a ncheiat cu succes. Instruc#iunile
non-interogative returneaz! fie succesul" fie e$ecul", ns! o interogare
returneaz! linii multiple de date. Aceste date sunt prezentate
utilizatorului n format tabelar.
Interog!rile pot deveni interog!ri implicite n anumite instruc#iuni
SQL. De exemplu, fiecare dintre instruc#iunile urm!toare necesit! o
interogare ca parte a execu#iei:
- update
- delete from
- create table as
Execu%ia instruc%iunilor SQL
Lista urm!toare specific! fazele execu#iei unei instruc#iuni SQL:
". Este creat automat un cursor n a$teptarea execu#iei instruc#iunii SQL.
2. Programul Oracle analizeaz! instruc#iunea SQL.
3. n cazul n care rezultatele unei interog!ri nu sunt cunoscute,
programul Oracle determin! caracteristicile (tipul datelor $i lungimea)
datelor rezultatului.
4. Programul Oracle define$te domeniile datelor de ie$ire. Acestea includ
loca#ia, 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, define$te valoarea fiec!rei variabile. De exemplu, programul
Oracle stabile$te valoarea ang_nume n timpul procesului de legare.
6. n sfr$it, programul Oracle execut! instruc#iunea SQL.
7. Liniile de date sunt selectate ($i ordonate dac! este necesar) $i fiecare
preluare succesiv! cite$te 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
rela#ionale. SQL*Plus este un instrument al serverului Oracle care
recunoa$te $i execut! instruc#iuni SQL. SQL*Plus nu este o extensie sau
un superset al limbajului SQL. Unul dintre avantajele SQL*Plus este c!
pute#i s! edita#i sau s! salva#i comenzi SQL care se g!sesc n tamponul
SQL. Tamponul SQL este o por#iune a memoriei gestionate de SQL*Plus
care stocheaz! o singur! comand! SQL la un moment dat. Aceast!
69
comand! SQL r!mne n tamponul SQL pn! cnd este lansat! o nou!
comand!.
Procesarea vectorial# a comenzilor SQL
Ori de cte ori aplica#ia dumneavoastr! transmite o instruc#iune
serverului Oracle, aplica#ia efectueaz! un apel de func#ie. Procesarea
vectorial! permite aplica#iei dumneavoastr! s! execute o singur!
instruc#iune SQL de mai multe ori cu o singur! apelare a programului
Oracle. De exemplu, folosind procesarea vectorial!, aplica#ia
dumneavoastr! poate efectua un singur apel pentru a executa o
instruc#iune SQL de 50 de ori. Prin reducerea num!rului de apel!ri ale
programului Oracle, se reduc proces!rile suplimentare $i cresc
performan#ele serverului.
Instrumentele Oracle cum sunt SQL*Forms, SQL*Plus $i
SQL*Loader utilizeaz! automat procesarea vectorial!.
Partajarea instruc%iunilor SQL
Programul Oracle detecteaz! mai multe aplica#ii care transmit
serverului instruc#iuni SQL identice. Atunci cnd programul
recep#ioneaz! o instruc#iune SQL duplicat, el nu analizeaz! aceast! a
doua instruc#iune SQL.
Programul consult! zona SQL partajat! pentru a detecta instruc#iuni
identice. Aceste instruc#iuni pot proveni de la aplica#ii, de la utilizatorii
interactivi sau chiar de la instruc#iuni SQL recursive.
Atunci cnd sunt detectate instruc#iunile SQL duplicate, prima
apari#ie a instruc#iunii 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
mbun!t!#irea performan#elor.
Func%iile SQL
Ce sunt func%iile?
Func#iile sunt opera#ii predefinite care manipuleaz! date $i
returneaz! un rezultat. Func#iile pot genera dou! tipuri de date de ie$ire.
Primul tip - datele de intrare dup! manipularea acestora, iar la doilea -
furnizeaz! informa#ii n leg!tur! cu datele de intrare. De exemplu, o
func#ie poate converti la majuscule toate caracterele $irului de intrare;
alt! func#ie poate returna num!rul de caractere din $irul de intrare.
70
Exist! dou! tipuri de func#ie:
Func#ii mono-linie;
Func#ii multi-linie sau de grup.
Deosebirea dintre aceste dou! tipuri de func#ii este dat! de num!rul de
linii asupra c!rora ac#ioneaz!. Func#iile sunt asem!n!toare operatorilor,
cu excep#ia faptului c! primele pot ac#iona asupra unor argumente
multiple.
Sintaxa general# a func%iilor este urm#toarea:
func"ie (argument1, argument2, ...)
n continuare sunt prezentate cele dou! categorii: func#ii mono-linie $i
func#ii de grup.
Mersul lucr#rii:
Verifica#i func#iile de mai jos n timpul efectu!rii lucr!rii. Repeta#i
toate exemplele de mai jos.
ASCII Returneaz! echivalentul zecimal al unui caracter ASCII
Sintax!: acii(char)
Culege%i:
select ascii('B') from dual;
Rezultatul:
ascii('B')
----------
66
CHR Returneaz! caracterul ASCII corespunz!tor valorii ntregi furnizate
ca argument. De exemplu, echivalentul ASCII al literei K este 75.
Sintax!: CHR(integer)
Culege%i:
select chr(75) from dual;
Rezultatul:
C
-
K
LENGTH Returneaz! num!rul de caractere (lungimea) al $irului de
intrare.
Sintax!: length(char)
Culege%i:
select length('ABcDEFGHIJ') from dual;
Rezultatul:
LENGTH('ABCDEFGHIJ')
--------------------
7"
10
LOWER Returneaz! $irul de intrare dup! trecerea tuturor caracterelor la
litere mici.
Sintax!: lower(char)
Culege%i:
select lower('NISPORENI') from dual;
Rezultatul:
LOWER('NI
---------
nisporeni
LPAD Returneaz! $irul de intrare n stnga c!ruia este ad!ugat!
secven#a de caractere din cel de-al treilea argument. Aceast! func#ie
are trei argumente: primul este $irul de intrare; al doilea este
lungimea maxim! a valorii returnate; iar al treilea este secven#a de
caractere care va fi ad!ugat!.
Sintax!:
lpad(sir de intrare, lungime, secventa de
completare)
Culege%i:
select lpad('AVERTISMENT: ',20,'***** ') from
dual;
Rezultatul:
LPAD('AVERTISMENT:',
--------------------
***** *AVERTISMENT:
REPLACE Returneaz! $irul de intrare n care fiecare apari#ie a $irului de
c!utare este nlocuit! cu $irul de nlocuire.
Sintax!: replace(sir intrare,sir cautare,sir
inlocuire)
Culege%i:
select replace(Pete','Pe','123') from dual;
Rezultatul:
REPLA
-----
123te
UPPER Returneaz! $irul de intrare dup! trecerea tuturor caracterelor la
majuscule.
Sintax!: upper(char)
72
Culege%i:
select upper('hincesti') From dual;
Rezultatul:
UPPER('H
--------
HINCESTI
Func%ii numerice
Func#iile numerice primesc date de intrare numerice $i returneaz! o
valoare numeric!.
ABS Returneaz! valoarea absolut! a valorii de intrare.
Sintax!: abs(n)
Culege%i:
select abs(3) from dual;
Rezultatul:
ABS(3)
-----
3
POWER Returneaz! valoarea de intrare ridicat! la puterea n.
Sintax!: power(valoare,n)
Culege%i:
select power(4,2) from dual;
Rezultatul:
POWER(4,2)
----------
16
ROUND Rotunje$te valoarea de intrare la num!rul specificat de pozi#ii
zecimale.
Sintax!: round(valoare intrare,precizie)
Culege%i:
select round(123.456,2) from dual;
Rezultatul:
ROUND(12'3.456,2)
-----------------
123.46
TRUNC Trunchiaz! valoarea de intrare la num!rul specificat de pozi#ii
zecimale.
Sintax!: trunc(valoare intrare,precizie)
73
Culege%i:
select trunc(213.456,2) FROM DUAL;
Rezultatul:
TRUNC(213.456,2)
---------------
213.45
Func%ii de tip dat# calendaristic#
Aceste func#ii primesc argumente de tip dat! calendaristic! (date).
ADD_MONTHS Returneaz! o dat! reprezentnd data specificat! plus
num!rul specificat de luni. n exemplul urm!tor, data curent! este
23 februarie 200".
Sintax!: add_months(data, numar de luni)
Culege%i:
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)
Culege%i:
select last_day('1-may-95') FROM DUAL;
Rezultatul:
LAST_DAY(
----------
31-MAY-95
MONTHS_BETWEEN Returneaz! num!rul de luni la care data2 precede
data1.
Sintax!: months_between(datal,data2)
Culege%i:
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!
func#ie nu necesit! argumente.
Sintax!: sysdate
74
Culege%i:
select sysdate from dual;
Rezultatul:
SYSDATE
---------
23-FEB-01
Func%ii de conversie
Func#iile de conversie transform! valorile de intrare dintr-un tip de
dat! n altul.
TO_CHAR Converte$te o dat! sau un num!r ntr-un $ir de caractere.
Sintax!: to_char(intrare,format)
Culege%i:
select to_char(SYSDATE,'mm/dd/yy') from dual;
Rezultatul:
TO_CHAR(SYSDATE,'MM/DD/YY')
-----------------------------
02/23/01
TO_DATE Converte$te o valoare numeric! sau de tip caracter la tipul
date.
Sintax!: to_date(sir,format)
Culege%i:
select to_date('04/21/99','MM/DD/YY') from
dual;
Rezultatul:
TO_DATE('
---------
21-APR-99
TO_NUMBER Converte$te un $ir de caractere ntr-un format numeric.
Sintax!: to_number(sir caractere,format)
Culege%i:
select to_number ('1234.56') FROM DUAL;
Rezultatul:
TO_NUMBER('1234.56')
--------------------
1234.56
75
Alte func%ii mono-linie
GREATEST Returneaz! cea mai mare valoare dintr-o list! de valori de
intrare.
Sintax!: greatest(valoarel,valoare2,...)
Culege%i:
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,...)
Culege%i:
select least('Ion','Vasile','Maria') from
dual;
Rezultatul:
LEA
---
Ion
USER Returneaz! numele utilizatorului curent al bazei de date Oracle.
Aceast! func#ie nu necesit! nici un argument.
Sintax!: User
Culege%i:
select user from dual;
Rezultatul:
USER
------
SCOTT
Func%ii de grup
Func#iile de grup returneaz! o singur! valoare pentru un grup de
linii interogate.
AVG Returneaz! valoarea medie pentru un grup de linii.
Sintax!: avg(valoare)
Culege%i:
select avg (ani) from angajati;
76
Rezultatul:
AVG(ANI)
---------
34.625
COUNT Returneaz! num!rul de linii dintr-o interogare. n func#ia
count, pute#i utiliza urm!torii specificatori:
Sintax!: count
Culege%i:
select count (*)from angajati;
Rezultatul:
COUNT(*)
---------
8
MAX Returneaz! valoarea maxim! a expresiei.
Sintax!: max(expresie)
Culege%i:
select max (ani) from angajati;
Rezultatul:
MAX(ANI)
---------
42
MIN Returneaz! valoarea minim! a expresiei.
Sintax!: min(expresie)
Culege%i:
select min (ani) from angajati;
Rezultatul:
MIN(ANI)
---------
25
SUM Returneaz! suma valorilor expresiei.
Sintax!: sum(expresie)
Culege%i:
select sum (ani) from angajati;
Rezultatul:
SUM(ANI)
---------
277
77
Rezumat
SQL este singurul limbaj de comunicare cu baza de date Oracle.
Acest limbaj posed! propria structur! $i sintax!. Limbajul SQL permite
s! lucra#i cu obiectele de nivel nalt ale schemei n locul liniilor
individuale. In plus, el limiteaz! magistralele prin intermediul c!rora
pute#i interac#iona cu serverul, mbun!t!#ind astfel securitatea serverului
$i reducnd riscul compromiterii datelor.
Pute#i comunica interactiv cu baza de date Oracle prin folosirea
limbajului SQL. n plus, chiar aplica#iile dumneavoastr! utilizeaz!
limbajul SQL pentru a accesa baza de date. Folosirea limbajului SQL
este simpl!; exist! doar cteva reguli care trebuie respectate la crearea
instruc#iunilor SQL, lucru care spore$te flexibilitatea $i puterea acestor
instruc#iuni.
Func#iile sunt rutine predefinite care manipuleaz! date $i returneaz!
o valoare. Func#iile returneaz! o valoare care fie descrie datele de intrare,
fie reprezint! rezultatul manipul!rii datelor de intrare.
Func#iile mono-linie returneaz! un rezultat pentru fiecare linie a
unei interog!ri, n timp ce func#iile de grup returneaz! un singur rezultat
pentru un grup de linii ale unei interog!ri.
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 afi$ate sau pot fi procesate n
continuare. Att reuniunea ct $i uniunea se realizeaz! n instruc#iunea
select.
Reuniunile si uniunile se folosesc pentru a grupa mpreun! date
stocate n tabele diferite. Aceste dou! metode de grupare adun! la un loc
78
date din tabele multiple care sunt nrudite ntre ele. Aceast! caracteristic!
simplific! procesul de interogare.
Reuniuni simple
O reuniune simpl! (simple join) este o instruc#iune select care
returneaz! linii din dou! sau mai multe tabele. Aceste tabele se afl! n
rela#ie, 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 instruc#iunii select. n acest capitol, este tratat! reuniunea a
dou! tabele, ns! aceste informa#ii sunt aplicabile $i reuniunii a trei sau
mai multe tabele.
Oracle nu impune nici o limitate n leg!tur! cu coloanele pe care le
pute#i selecta din fiecare tabel. Pute#i s! nu selecta#i nici o coloan! sau s!
selecta#i coloane multiple din fiecare tabel. Coloanele pe care le
specifica#i n clauza where nu este necesar s! apar! n lista select.
Reunirea a dou! tabele f!r! 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 "0 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.
Pute#i substitui numele real al tabelului cu aliasul acestuia n clauza
from a instruc#iunii select. In acest caz ns!, mediul Oracle impune
substituirea numelui tabelului cu aliasul pe tot parcursul instruc#iunii
select, att n lista select, ct $i n clauza where.
Mersul lucr#rii:
Pentru a putea urm!ri procesul reuniunilor, pe lng! tabelul creat
mai nainte Angajati mai cre!m 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 */
79
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 NUME PRENUME S ANI ANGAJAT NR_ NR_POS
--------- --------- --------- - --- --------- --- ------
199073432 Rusu Maria F 35 20-OCT-95 u12 ps272
198029823 Dionis Pavel M 42 17-NOV-98 u12 ps275
199549525 Bucatru Felix M 25 08-JAN-95 u14 ps71
199579013 Gurau christina F 35 27-JAN-94 u12 ps175
199571002 Ionescu Ilie M 35 19-SEP-95 u14 ps75
199487815 Dusca Lucia F 38 12-MAR-95 u18 ps410
80
199665972 Vasilescu Ion M 32 10-JAN-95 u10 ps235
199623961 Scutaru Maria F 35 26-JAN-96 u16 ps410
8 rows selected.
Sintaxa unei reuniuni simple este urm!toarea:
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! condi#ia
care reune$te cele dou! tabele.
Aceast! instruc#iune 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 introduce#i
n clauza where, pe lng! condi#ia de reunire, o condi#ie de c!utare:
select Angajati.nume, Angajati.prenume,
contabilitate.SALARIU
from Angajati, contabilitate
where Angajati.NAS = contabilitate.NAS
and Angajati.nume like 'B%';
8"
Rezultatul:
NUME PRENUME SALARIU
--------- --------- ---------
Bucatru Felix 225
Reuniuni externe
O reuniune extern! (outer join) este asem!n!toare cu o reuniune
simpl!. O reuniune extern! returneaz! toate liniile pe care le returneaz!
reuniunea simpl!, precum $i toate liniile ale c!ror valori din coloanele
dup! care se face reuniunea apar ntr-un tabel $i nu se reg!sesc n
coloanele corespunz!toare ale nici unei linii din cel!lalt 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! condi#ia
care reune$te cele dou! tabele.
Semnul plus (+) poate fi plasat n oricare parte a condi#iei din
clauza where, ns! nu n ambele p!r#i. Simbolul reuniunii externe
trebuie plasat n dreapta numelui tabelului n care nu apar linii care se
g!sesc n cel!lalt 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 cel!lalt tabel.
Pentru a ilustra reuniunea extern! cre!m tabelul departament,
n care sunt afi$ate 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
);
/* Inserarea datelor in tabelul contabilitate */
insert into departament values ('199073432', 'ps272');
insert into departament values ('198029823', 'ps275');
insert into departament values ('199549525', 'ps71');
82
insert into departament values ('199579013', 'ps175');
insert into departament values ('199571002', 'ps75');
insert into departament values ('199487815', 'ps410');
insert into departament values ('199665972', 'ps235');
insert into departament values ('199623961', 'ps410');
insert into departament values ('199623962', 'ps410');
insert into departament values ('199623963', 'ps410');
insert into departament values ('199623964', '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.
Instruc#iunea urm!toare creeaz! o reuniune extern! a tabelelor
Angajati $i departament. Remarca#i faptul c! simbolul reuniunii
externe este plasat n dreptul tabelului Angajati, deoarece acestuia i
lipsesc cteva linii care se g!sesc n tabelul departament. Remarca#i,
de asemenea, faptul c! sunt afi$ate 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
--------- --------- ------
83
Dionis Pavel ps275
Rusu Maria ps272
Dusca Lucia ps410
Bucatru Felix ps71
Ionescu Ilie ps75
Gurau christina ps175
Scutaru Maria ps410
ps410
ps410
ps410
Vasilescu Ion ps235
11 rows selected.
Reuniuni "i vederi
Pute#i folosi o reuniune pentru a simplifica crearea unei vederi. De
exemplu, pute#i folosi o reuniune pentru a defini o vedere care este o
colec#ie de coloane sau linii (din tabele multiple) aflate n rela#ie.
Vederea ascunde faptul c! aceste informa#ii provin din tabele multiple.
Reuniuni "i grupuri
n serverul Oracle, este recomandabil s! grupa#i numai acele tabele
care sunt reunite frecvent n instruc#iuni SQL pe baza coloanelor cheie
ale grupului. Gruparea determin! mbun!t!#irea performan#elor
reuniunilor ns! va duce cu siguran#! la sc!derea performan#elor
parcurgerii integrale a tabelelor, opera#iunilor de inserare n tabele $i a
instruc#iunilor update care modific! valori ale cheii grupului. nainte
de a grupa coloanele reunite, cnt!ri#i avantajele $i dezavantajele,
ntruct aceast! reuniune afecteaz! performan#ele serverului.
union
union este un operator care combin! rezultatele a dou! interog!ri
ntr-un singur rezultat. Acest operator returneaz! numai valorile distincte
rezultate din interogare.
Crea#i dou! tabele simple articole_1 $i articole_2:
create table articole_1(
articol varchar2(15)
);
84
insert into articole_1 values (bobina);
insert into articole_1 values (condensator);
insert into articole_1 values (dioda);
insert into articole_1 values (comutator);
create table articole_2(
articol varchar2(15)
);
insert into articole_2 values (bobina);
insert into articole_2 values (motor);
insert into articole_2 values (tranzistor);
insert into articole_2 values (cablu);
insert into articole_2 values (rezistor);
insert into articole_2 values (cablu);
Culege%i:
select articol articol1 from articole_1;
Rezultatul:
articol1
------------
bobina
condensator
dioda
comutator
Culege%i:
select articol articol2 from articole_2;
Rezultatul:
articol2
---------------
bobina
motor
tranzistor
cablu
rezistor
cablu
6 rows selected.
Instruc#iunea urm!toare efectueaz! o uniune a celor dou! liste:
select articol from articole_1
85
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 interog!rii.
Atunci cnd operatorii union $i union all sunt folosi#i n
instruc#iuni care selecteaz! date de tip caracter, tipul valorilor returnate
este dup! cum urmeaz!:
- dac! ambele interog!ri selecteaz! valori de tip char, valorile returnate
vor fi de tip char.
- dac! cel pu#in una dintre interog!ri selecteaz! valori de tip varchar2,
valorile returnate vor fi de tip varchar2.
union all
Operatorul union all combin! rezultatele a dou! interog!ri ntr-
un singur rezultat. Acest operator returneaz! toate valorile furnizate de
interog!ri.
select articol from articole_1
union all
select articol from articole_2;
Rezultatul:
ARTICOL
---------------
bobina
condensator
dioda
comutator
bobina
86
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 interog!rii, inclusiv liniile de
date duplicate.
order by
Pute#i folosi clauza order by n instruc#iunea select a unei interog!ri
union. Pentru a face acest lucru, trebuie s! specifica#i n instruc#iunea
union num!rul coloanei (nu numele acesteia) dup! care dori#i s! fie
ordonate datele. Instruc#iunea urm!toare folose$te clauza order by
pentru a sorta rezultatele n ordinea ascendent! a coloanei articol,
care este prima (n cazul dat unica).
Culege%i:
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! instruc#iuni select $i
returneaz! numai acele linii, care sunt returnate de ambele interog!ri.
Instruc#iunea urm!toare efectueaz! o intersec#ie a celor dou! liste:
87
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! interog!ri $i
returneaz! numai acele valori care sunt selectate de prima interogare
dar nu $i de a doua. Folosind acelea$i liste din exemplul anterior, fie
urm!toarea instruc#iune:
select articol from articole_1
minus
select articol from articole_2;
Rezultatul:
ARTICOL
--------------
comutator
condensator
dioda
n acest exemplu, instruc#iunea returneaz! numai acele linii care se
g!sesc n prima list!, dar nu $i n a doua.
Rezumat
n aceast! lucrare, a#i aflat c! reuniunea $i uniunea sunt dou!
metode de grupare logic! a datelor din tabele distincte. Odat! grupate,
pute#i s! afi$a#i grupul rezultant sau s!-" prelucra#i n continuare.
Reuniunea $i uniunea se folosesc pentru a grupa date din tabele
multiple n vederea afi$!rii lor pe ecran sau n vederea prelucr!rii lor n
continuare. Aceste tehnici v! permit s! interoga#i tabele multiple care se
afl! ntr-o rela#ie dat! de una sau mai multe coloane comune, pentru a
crea un singur set de rezultate.
Reuniunea $i uniunea folosesc instruc#iunea select pentru a interoga
baze de date multiple. Prin utilizarea diverselor tipuri de reuniuni $i
uniuni, pute#i controla domeniul de valori returnate de instruc#iunea
select.
88
LUCRAREA DE LABORATOR Nr. $0
Vederi
Vederile sunt tabele logice asem!n!toare unor ferestre prin care
pute#i privi unul sau mai multe tabele, sau vederi.
O vedere are aspectul unui tabel con#innd coloane si linii care pot
fi actualizate $i n care se pot efectua inser!ri sau elimin!ri ca $i cum ar fi
cu adev!rat 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 opera#iile 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 ni$te tabele, ele pot fi utilizate n majoritatea
situa#iilor pe post de tabele.
Vederile sunt dinamice $i afi$eaz! ntotdeauna informa#iile 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 modific!ri sunt reflectate instantaneu n vedere.
Vederile v! permit s! afi$a#i datele ntr-o form! diferit! de cea n
care sunt stocate n tabele. Vederile v! permit s! adapta#i prezentarea
datelor n conformitate cu cerin#ele specifice ale diverselor tipuri de
utilizatori.
n general, vederile sunt create n urm!toarele scopuri:
- pentru a asigura un nivel mai nalt de securitate al bazei de date prin
restrngerea accesului la un num!r predeterminat de coloane $i linii ale
unui tabel. Acest lucru permite utilizatorilor s! vad! un subset restrns
al datelor;
- pentru simplificarea prezent!rii datelor prin ascunderea structurilor
reuniunilor $i tabelelor care stau la baza vederii;
- pentru afi$area 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 interog!rii fiec!ruia 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 asem!n!tor cu tabelele.
89
De exemplu, ca $i n cazul tabelelor, pute#i avea pn! la 255 de coloane
ntr-o vedere. Vederile pot fi interogate, actualizate $i se pot efectua
inser!ri n ele. Toate opera#iile efectuate asupra unei vederi afecteaz!
practic tabelele de baz! ale vederii. In plus, vederile sunt supuse
restric#iilor de integritate $i declan$atorilor asociate tabelelor de baz!.
Crearea vederilor
Pentru a crea o vedere, folosi#i comanda SQL create view.
Pute#i defini o vedere cu orice interogare care face referire la tabele,
instantanee sau alte vederi. Defini#ia unei vederi este stocat! n
dic#ionarul de date.
Mersul lucr#rii:
Exemplul urm!tor 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 afi$at! cu ajutorul comenzilor asem!n!toare 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 urm!tor creeaz! o vedere mai complex! care reune$te date din mai
multe (dou!) tabele. Concret, reprezint! borderoul de pl!#i al salariului
remis casei $i bazat pe tabelul Angajati, aflat la sec#ia cadre $i tabelul
contabilitate aflat n contabilitate. Concomitent este f!cut! suma
total!, livrat! casei pentru salariu.
90
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
Studia%i de sine st#t#tor materialul care urmeaz# "i ncerca%i s#
implementa%i exemplele utilizate mai jos n schema dumneavoastr#
Comanda create view face obiectul urm!toarelor limit!ri:
with check option nu este specificat! n acest exemplu deoarece
ntr-o vedere definit! printr-o interogare care con#ine 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 dic#ionarul de date. De exemplu, urm!toarea
interogare va crea o vedere ang:
9"
CREATE VIEW ang AS SELECT * FROM comp.ang;
Oracle stocheaz! n dic#ionarul de date interogarea de definire a vederii
n forma urm!toare:
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
ini#ial cu ghilimele.
Oracle v! permite s! crea#i o vedere a unor tabele chiar dac!
tabelele nu exist!. Instruc#iunea create view force va obliga
programul s! creeze vederea chiar dac! tabelele nu exist! sau dac!
utilizatorul nu posed! privilegiile corespunz!toare n leg!tur! cu tabelele
respective. De$i programul va crea vederea chiar $i n aceste situa#ii,
utilizatorul nu va putea s! o foloseasc!. Vederea va deveni valid! $i
accesibil! utilizatorilor numai dup! crearea tabelelor de baz!, acordarea
privilegiilor corespunz!toare $i recompilarea vederii. Instruc#iunea
create view noforce va crea vederea numai dac! tabelele de baz!
exist! $i utilizatorul posed! privilegiile corespunz!toare n leg!tur! cu
aceste tabele.
Privilegii referitoare la vederi
Pentru a crea o vedere n schema dumneavoastr!, trebuie s!
poseda#i 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 ob#ine aceste privilegii prin
intermediul unui rol. n mod similar, pute#i utiliza o vedere numai n
conformitate cu privilegiile acordate proprietarului. De exemplu, dac!
proprietarul vederii beneficiaz! numai de privilegiul update pentru
tabelul ANG, pute#i folosi aceast! vedere numai pentru a actualiza liniile
din tabelul ANG.
92
nlocuirea vederilor
Pentru a modifica defini#ia unei vederi, vederea trebuie nlocuit!.
Vederile pot fi nlocuite n dou! moduri:
Vederea poate fi distrus! $i apoi re-creat! cu noua defini#ie. 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 instruc#iunea create
view cu clauza op#ional! or replace. Aceast! metod! este folosit!
pentru nlocuirea defini#iei curente a unei vederi cu conservarea tuturor
privilegiilor curente.
Exemplul urm!tor nlocuie$te vederea ang_dept_nume cu noua
defini#ie 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 urm!toarele efecte:
Defini#ia vederii din dic#ionarul de date este actualizat!. Nici unul
dintre obiectele de baz! nu este afectat de nlocuirea vederii.
Toate restric#iile care existau n vederea original! ns! nu se reg!sesc n
noua vedere, sunt distruse.
Toate vederile $i programele PL/SQL dependente de vederea nlocuit!
devin invalide.
Pentru a nlocui o vedere, trebuie s! poseda#i privilegiile de sistem
necesare pentru distrugerea $i crearea unei vederi.
Utilizarea vederilor
Vederile trebuie s! fie tratate similar tabelelor n instruc#iunile
SQL. De exemplu, instruc#iunea urm!toare interogheaz! vederea
ang_dept_nume:
select prenume, nume, marca_ang from
ang_dept_nume;
Urm!torul exemplu insereaz! o nou! nregistrare n tabelul ANG utiliznd
vederea ang_dept_nume:
insert into ang_dept_nume
values ('Thomas','Baker',281);
93
Pute#i folosi o vedere oriunde a#i folosi un tabel n oricare dintre
urm!toarele instruc#iuni SQL:
select
insert
update
comment
lock table
Utilizarea vederilor face obiectul urm!toarelor limit!ri:
Nu pute#i folosi o vedere pentru a efectua opera#ii insert,
update sau delete atunci, cnd interogarea vederii con#ine o
opera#ie join, operatorii set sau distinct, o clauz! group by sau
o func#ie group.
Nu pute#i 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! f!r! 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 utiliz!rii 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
pu#in viteza de r!spuns a serverului Oracle.
Recompilarea vederilor
Pentru a recompila n mod explicit o vedere, folosi#i comanda
alter view nume_vedere compile. Recompilarea permite
detectarea eventualelor erori referitoare la vederea respectiv! naintea
execut!rii vederii n mediul real al companiei. Este recomandabil s!
recompila#i n mod explicit vederea dup! orice modificare a oric!ruia
dintre tabelele de baza ale vederii. Instruc#iunea urm!toare va recompila
vederea ang_dept_nume:
ALTER VIEW ang_dept_nume COMPILE;
94
Comanda alter view nu modific! defini#ia vederii sau orice alt
obiect care ar putea s! depind! de ea. Pute#i s! recompila#i orice vedere
din schema dumneavoastr!; pentru a recompila o vedere din alt! schem!,
trebuie s! poseda#i privilegiul de sistem alter any table.
Distrugerea vederilor
Pentru a distruge o vedere, utiliza#i comanda drop view.
Exemplul urm!tor distruge vederea ang_dept_nume:
drop view ang_dept_nume;
Pute#i s! distruge#i orice vedere din schema dumneavoastr!. Pentru a
distruge o vedere din schema altui utilizator, trebuie s! poseda#i
privilegiul de sistem drop any view.
Rezumat
O vedere este un tabel logic care v! permite s! accesa#i datele din
alte tabele $i vederi. Vederile nu con#in date. Tabelele pe care se bazeaz!
vederea sunt cele care con#in datele $i sunt cunoscute sub numele de
tabele de baz!.
Vederile permit creatorului aplica#iei s! prezinte utilizatorului
informa#ii ntr-o form! diferit! de cea a tabelelor de baz!, dar care
satisface cerin#ele utilizatorului cu privire la date. De asemenea, vederile
mbun!t!#esc securitatea bazei de date prin mascarea adev!ratelor nume
$i loca#ii ale tabelelor de baz!.
Accesarea $i manipularea datelor prin intermediul unei vederi este
asem!n!toare lucrului cu tabele. Pute#i executa instruc#iuni select,
insert, delete $i update cu vederi n acela$i fel n care a#i face-o
cu tabele, atta timp ct vederea face referire la un singur tabel.
LUCRAREA DE LABORATOR Nr. $$
Siguran%a bazei de date
Gestionarea utilizatorilor bazei de date
Scopul principal al securit!#ii bazei de date este de a stabili nivelul
corect de securitate pentru diversele tipuri de utilizatori ai bazei de date.
Aceast! securitate define$te nivelul de acces la baza de date pentru
95
fiecare utilizator. n linii mari, exist! trei tipuri de utilizatori, care
necesit! trei nivele de acces diferite la baza de date. Ace$ti utilizatori
sunt administratorii bazei de date, creatorii de aplica#ii $i utilizatorii
finali.
Fiecare baz! de date Oracle posed! o list! a utilizatorilor valizi.
Ace$tia 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.
Organiza#ia trebuie s! stabileasc! politica de securitate a bazei de
date. De exemplu, este acceptabil s! ave#i un nivel sc!zut de securitate
fa#! de utilizatori ntr-un calculator didactic unde studen#ii nva#!
programarea calculatoarelor, n schimb, ve#i impune o securitate strict!
pentru calculatoarele unei b!nci.
Un alt aspect care se ncadreaz! n domeniul gestion!rii
utilizatorilor bazei de date l reprezint! licen#ierea. Pentru serverul
dumneavoastr! Oracle, ave#i o licen#! care stabile$te num!rul de
utilizatori concuren#i care se pot conecta la baza de date. Prin gestionarea
utilizatorilor $i a drepturilor lor de acces, pute#i impune respectarea
condi#iilor licen#ei.
Programul Oracle v! pune la dispozi#ie numeroase instrumente cu
care pute#i 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! autentifica#i utilizatorii prin dou!
metode diferite. Prima metod! o reprezint! autentificarea efectuat! de
baza de date Oracle. Programul Oracle solicit! fiec!rui utilizator s!
furnizeze un nume de utilizator $i o parol! atunci cnd ncearc! s! se
conecteze la baza de date. Atunci cnd crea#i noi utilizatori, nu uita#i s!
specifica#i clauza identified by.
A doua metod! de autentificare se bazeaz! pe sistemul de operare.
Cu aceast! metod!, pentru a autentifica utilizatorul, programul Oracle
96
folose$te informa#iile referitoare la utilizator, care sunt p!strate de
sistemul de operare. Pentru utilizator, aceast! metod! prezint!
urm!toarele avantaje:
- utilizatorul se poate conecta foarte simplu la baza de date f!r! 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 autoriz!rii 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! rula#i un server cu fire multiple de execu#ie, nu exist!
posibilitatea ca utilizatorii s! fie autentifica#i de sistemul de operare
atunci, cnd ncearc! s! se conecteze. Aceasta este restric#ia 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 re#elei. Pentru a
modifica aceast! op#iune prestabilit!, $i a permite accesul de la distan#!
ntr-un server cu fire multiple de execu#ie, atribui#i parametrului de
ini#ializare valoarea True.
Crearea utilizatorilor
Pute#i 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 crea#i un nou utilizator, trebuie s! specifica#i urm!toarele
informa#ii:
Numele utilizatorului - un identificator care este unic n raport cu toate
celelalte nume de utilizatori $i roluri.
Spa#iul-tabel prestabilit pentru segmente - identific! spa#iul-tabel pentru
obiectele pe care le creeaz! utilizatorul. n mod prestabilit, acesta este
spa#iul-tabel al sistemului.
Spa#iul-tabel pentru segmentele temporare - identific! spa#iul-tabel
pentru segmentele temporare ale utilizatorului. n mod prestabilit,
acesta este spa#iul-tabel al sistemului.
Cotele spa#iului-tabel - permite utilizatorului s! aloce spa#iu n spa#iul-
tabel $i, op#ional, stabile$te o cot! n octe#i.
97
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 con#ine parametrii care definesc
limitele prestabilite pentru toate resursele bazei de date.
Exemplul urm!tor 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 stabile$te parola utilizatorului. Dac!
dori#i ca sistemul de operare s! efectueze autentificarea utilizatorului,
nlocui#i 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, lansa#i comanda alter
user, dup! cum este ilustrat n exemplul urm!tor. Acest exemplu
stabile$te 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 con#ine limite bine definite ale cantit!#ii diverselor resurse
ale sistemului disponibile utilizatorului. Limitarea resurselor este o
component! vital! a gestion!rii 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,
98
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 dep!$it! limita
unei resurse la nivel de sesiune, instruc#iunea curent! este derulat! napoi
$i utilizatorului i este returnat un mesaj de eroare. Atunci cnd se
ntmpl! acest lucru, toate instruc#iunile din tranzac#ia 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!
opera#ie, programul Oracle genereaz! o eroare.
n timpul proces!rii comenzilor SQL, sunt efectuate mai multe
apeluri, ca parte a execu#iei instruc#iunii. Dac! este dep!$it! limita unei
resurse la nivel de apel, procesarea instruc#iunii curente este ntrerupt! $i
este derulat! napoi. De asemenea, programul Oracle returneaz!
utilizatorului un mesaj de eroare. Toate instruc#iunile anterioare ale
tranzac#iei curente r!mn 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 to#i utilizatorii.
Pentru a crea un profil, lansa#i comanda SQL create profile
sau folosi#i caseta de dialog Create Profile a programului SQL*DBA.
Pentru a crea profiluri, trebuie s! poseda#i privilegiul de sistem create
profile. La crearea profilului, ve#i stabili n mod explicit limitele
urm!toarelor resurse:
sessions_per_user Limiteaz! num!rul 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 Define$te durata maxim! de inactivitate continu!.
99
logical_read_per_session Limiteaz! num!rul de blocuri de
date citite ntr-o sesiune.
logical_reads_per_call Limiteaz! num!rul de blocuri de date
citite pentru ca un apel s! proceseze o instruc#iune SQL.
private_sga Limiteaz! cantitatea de spa#iu privat pe care o sesiune o
poate rezerva n zona global! a sistemului. Aceast! limit! este
aplicabil! numai dac! folosi#i un server multicanal.
composite_limit Limiteaz! costul total al resurselor pentru o
sesiune. Este o combina#ie a urm!toarelor resurse:
cpu_per_session, connect_time,
logical_reads_per_session #i private_sga. Pentru a
defini costul asociat acestor resurse, folosi#i comanda SQL alter
resource cost.
Pentru fiecare resurs! definit! n comanda create profile,
pute#i include cuvintele cheie unlimited $i default. Cuvntul cheie
unlimited indic! faptul c! un utilizator c!ruia 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 define$te ini#ial resurse nelimitate.
Administratorul bazei de date poate modifica limitele profilului
prestabilit cu comanda alter profile. Orice utilizator c!ruia nu i
s-a atribuit n mod explicit un profil face obiectul limitelor resurselor
definite n profilul prestabilit.
Instruc#iunea urm!toare creeaz! profilul numit func#ionar".
Aceast! instruc#iune define$te 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;
Instruc#iunea alter profile redefine$te resursa specificat!,
atribuindu-i valoarea furnizat!. De exemplu, instruc#iunea urm!toare
modific! profilul func#ionar, atribuind parametrului
sessions_per_user valoarea 3, $i stabile$te o limit! explicit!
"00
pentru logical_reads_per_call. Limitele tuturor celorlalte
resurse r!mn neschimbate.
alter profile functionar limit
sessions_per_user 3
logical_reads_per_call 100;
Dup! ce profilul a fost creat, atribui#i-l unui utilizator cu comenzile
SQL create user sau alter user. De asemenea, pute#i folosi
casetele de dialog Create User sau Alter User ale programului
SQL*DBA. Nu pute#i atribui profiluri rolurilor sau altor profiluri. De
asemenea, un utilizator nu poate avea n acela$i timp dou! profiluri.
Exemplul urm!tor asociaz! profilul func#ionar utilizatorului
tom_01. Acest nou profil intr! n vigoare la urm!toarea sesiune.
Alter user tom_01
profile functionar;
Pentru a distruge un profil, lansa#i comanda drop profile cu clauza
cascade.
Distrugerea utilizatorilor
Distrugerea unui utilizator elimin! utilizatorul $i schema asociat!
din dic#ionarul de date, precum $i toate obiectele con#inute n schema
utilizatorului. Pentru a distruge toate obiectele utilizatorului, specifica#i
clauza cascade n comanda drop user. Dac! specifica#i clauza
cascade, programul Oracle distruge automat orice restric#ii 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! r!mn! intact!, pentru
a sus#ine opera#iile altor utilizatori. n acest caz, revoca#i 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.
"0"
Mersul lucr#rii:
Pentru a ndeplini opera#iile care urmeaz! intra#i n sistemul Oracle
cu numele de administrator System $i parola Manager. Nu uita#i s!
crea#i fi$ierul-spuller.
Not#. n dependen#! de starea spa#iului predefinit al sistemul
Oracle (din cauza c! au lucrat al#i colegi), unele date de ie$ire pot fi
diferite de cele men#ionate mai jos. n referat explica#i aceste deosebiri.
Vederile dic%ionarului de date destinate gestion#rii
utilizatorilor
Pentru fiecare utilizator $i fiecare profil, sunt stocate n dic#ionarul
de date urm!toarele informa#ii:
- lista utilizatorilor conecta#i la baza de date;
- spa#iul-tabel prestabilit pentru tabele, grupuri $i indec$i al fiec!rui
utilizator
- utilizarea memoriei pentru fiecare sesiune curent!;
- spa#iul-tabel pentru segmente temporare al fiec!rui utilizator;
- cotele de spa#iu pentru fiecare utilizator;
- profilul fiec!rui utilizator $i limitele resurselor asociate;
- costul asociat fiec!rei resurse a sistemului.
Pentru ob#inerea informa#iilor despre utilizatori $i profiluri, ave#i la
dispozi#ie urm!toarele vederi ale dic#ionarului de date:
all_users - Informa#ii despre to#i utilizatorii bazei de date. Aceste
informa#ii includ numele utilizatorului, user_id, $i data la care a fost
creat user_id.
Culege%i:
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
"02
user_users - Informa#ii despre to#i utilizatorii curen#i bazei de
date. Aceste informa#ii includ numele fiec!rui utilizator, user_id, $i
spa#iile-tabel folosite de fiecare.
Culege%i:
select * from user_users;
Rezultatul:
USERNAME USER_ID DEFAULT_ TEMPORARY_ CREATED
TABLESPACE TABLESPACE
-------- --------- ------------------------------ ---
SCOTT 8 USER_DATA TEMPORARY_DATA 16-SEP-96
dba_users - Informa#ii despre utilizatori ai bazei de date. Aceste
informa#ii includ numele fiec!rui utilizator, user_id, $i spa#iile-tabel
folosite de fiecare.
user_ts_quotas - Informa#ii despre cotele spa#iului-tabel al
utilizatorului.
Culege%i:
select * from user_ts_quotas;
Rezultatul:
TABLESPACE_NAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS
----------------------- --------- ------- ----------
USER_DATA 204800 0 100 0
dba_ts_quotas - Informa#ii despre cotele spa#iilor-tabel pentru to#i
utilizatorii.
Culege%i:
select * from dba_ts_quotas;
Rezultatul:
no rows selected
user resource_limits - Afi$eaz! limitele resurselor pentru
utilizatorul curent.
dba_profiles - Informa#ii despre limitele resurselor atribuite
fiec!rui profil.
resource_cost - Afi$eaz! costul fiec!rei resurse.
Licen%iere
Programul Oracle v! ajut! s! respecta#i angajamentul de licen#!
ncheiat cu firma Oracle. Ave#i o licen#! care define$te num!rul maxim
admis de utilizatori simultani. De asemenea, s-ar putea s! ave#i o licen#!
"03
n care utilizatorii sunt nominaliza#i. n ambele cazuri trebuie s!
cunoa$te#i limitele privind num!rul 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 c!tre fi$ierul de avertizare $i c!tre ecran, un
mesaj care afirm! c! a fost atins num!rul maxim de utilizatori care
lucreaz! simultan. Pentru a v! ajuta s! respecta#i licen#a, sunt defini#i trei
parametri de ini#ializare. Ace$tia sunt urm!torii:
license_max_ sessions Define$te num!rul maxim de sesiuni
concurente.
license_sessions_ warning - Atribui#i acestui parametru o
valoare mai mic! a parametrului license max_sessions.
In acest fel, ve#i fi avertizat din timp c! v! apropia#i de limita
maxim! de sesiuni concurente.
license_max_users Define$te num!rul maxim de utilizatori
concuren#i.
Programul Oracle v! pune la dispozi#ie vederea dic#ionarului de date
v$license. Exemplul urm!tor selecteaz! $i afi$eaz! informa#ii
con#inute n aceast! vedere.
Culege%i:
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 a#i aflat ce se n#elege prin gestionarea utilizatorilor
$i, de asemenea, cum pute#i ndeplini aceast! sarcin!. Gestionarea
"04
utilizatorilor bazei de date presupune, printre altele, autentificarea
utilizatorilor, precum $i crearea de profiluri utilizatorilor.
Gestionarea utilizatorilor $i a resurselor bazei de date este esen#ial!
pentru prevenirea consumului nera#ional al resurselor sistemului.
Administratorul bazei de date folose$te 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 aplica#ie de baze de date sau
pentru gestionarea privilegiilor pentru un grup de utilizatori.
Unui rol aplica#ie i se acord! toate privilegiile necesare rul!rii unei
aplica#ii. O aplica#ie poate avea mai multe roluri. Practic, ve#i defini un
rol pentru fiecare tip de utilizator al aplica#iei. De exemplu, ntr-un
magazin a#i putea avea un rol pentru casier $i un rol diferit pentru
gestionarul magazinului
Rolurile utilizator sunt create pentru un grup de utilizatori cu
acelea$i 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 urm!toarele:
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! acorda#i toate privilegiile tuturor
utilizatorilor - acorda#i-le pur $i simplu rolul.
Gestionare dinamic! a privilegiilor individuale. Atunci cnd privilegiile
unui rol se modific!, aceste privilegii modificate sunt automat acordate
utilizatorilor c!rora le-a fost acordat acest rol.
Securitatea aplica#iei. Aplica#iile pot interoga dic#ionarul de date pentru
a activa sau a dezactiva automat un rol, atunci cnd un utilizatorul
ncearc! s! execute o aplica#ie prin intermediul unui anumit nume de
utilizator. Acest lucru permite aplica#iilor s! activeze rolurile
corespunz!toare parolei.
"05
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. Instruc#iunea
urm!toare creeaz! rolul numit func#ionar:
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! acelea$i
ac#iuni ca $i instruc#iunea SQL anterioar!.
Clauza identified by stabile$te o parol! care este folosit! la
activarea rolului. Ca alternativ!, pute#i folosi clauza identified
externally, dac! dori#i 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 atribui#i 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! asocia#i sau alte
roluri noului rol. Pentru a atribui privilegii $i roluri noului rol, folosi#i
comanda SQL grant. Acordarea privilegiilor este tratat! mai am!nun#it
ceva mai trziu n acest capitol.
Pentru a crea un rol, trebuie s! poseda#i privilegiul de sistem
create role. De asemenea, atunci cnd crea#i un rol, acesta v! este
acordat cu op#iunea admin. Op#iunea admin v! permite s! efectua#i
urm!toarele opera#ii:
S! acorda#i acest rol unui alt utilizator sau rol.
S! retrage#i rolul unui utilizator sau unui rol.
S! modifica#i rolul pentru a schimba autoriza#ia necesar! acces!rii
acestuia.
S! distruge#i rolul.
"06
Roluri definite de sistem
Programul Oracle prevede cinci roluri predefinite referitoare la
serverul Oracle. Pute#i s! acorda#i $i s! retrage#i privilegii $i roluri
predefinite, la fel ca n cazul oric!rui rol pe care l defini#i
dumneavoastr!.
n continuare, sunt prezentate rolurile Oracle predefinite $i
privilegiile asociate fiec!ruia:
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 op#iunea admin
Exp_full_database - select any table, backup
any table, precum $i insert, delete $i update n leg!tur!
cu tabelele SYS.INCVID, SYS.INCFIL $i SYS.INCEXP.
Imp_full_database - become user, writedown (numai
cu serverul Trusted Oracle)
Modificarea rolurilor
Pute#i 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 pute#i modifica:
Parola necesar! pentru activarea rolului.
Vre#i ca rolul s! fie verificat atunci cnd este activat? n caz afirmativ,
stabili#i dac! verificarea rolului va fi efectuat! de programul Oracle
sau de sistemul de operare.
Exemplul urm!tor stabile$te o nou! parol! $i specific! faptul c!
verificarea rolului urmeaz! s! fie efectuat! de sistemul de operare:
alter role func"ionar identified by JL10C3Q
Pentru a modifica un rol, trebuie fie s! poseda#i privilegiul de sistem
alter any role, fie s! v! fi fost acordat rolul respectiv cu op#iunea
admin.
"07
Modificarea rolului unui utilizator
Unui utilizator al bazei de date i se pot acorda mai multe roluri
prestabilite. De exemplu, unui creator de aplica#ii i se poate acorda un rol
de programator $i, de asemenea, rolul corespunz!tor aplica#iei pe care o
dezvolt!.
Pentru a stabili sau a modifica rolurile prestabilite ale utilizatorului,
folosi#i comanda SQL alter user sau caseta de dialog Alter User a
programului SQL*DBA. In exemplul urm!tor, comanda SQL alter
user este folosit! pentru a acorda n mod prestabilit toate rolurile
acordate utilizatorului, cu excep#ia rolului DBA:
alter user tom_01
default role all except dba;
Orice modificare a rolului prestabilit al utilizatorului va avea efect
ncepnd cu urm!toarea conectare a utilizatorului la baza de date.
Distrugerea rolurilor
Pentru a elimina un rol din baza de date, folosi#i caseta de dialog
Drop Role a programului SQL*DBA sau lansa#i 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
absen#a privilegiilor rolului distrus. Distrugerea unui rol duce la
eliminarea acestuia din lista de roluri prestabilite a utilizatorului.
Instruc#iunea urm!toare elimin! din baza de date rolul func#ionar:
drop role func"ionar;
Acordarea rolurilor
Rolurile pot fi acordate tuturor utilizatorilor, altor roluri sau
Public-ului. Public-ul reprezint! to#i utilizatorii sistemului. Pentru a
face acest lucru, folosi#i comanda SQL grant sau caseta de dialog
Grant System Privilege/Role a programului SQL*DBA.
Instruc#iunea urm!toare acord! rolul manager cu op#iunea admin
utilizatorului ABCDH:
grant manager to ABCDH with admin option;
Un rol de sistem poate fi acordat cu op#iunea admin. Aceast!
op#iune permite utilizatorilor s! fac! urm!toarele:
S! acorde sau s! retrag! rolul oric!rui alt utilizator sau rol din baza de
date.
"08
S! acorde rolul cu op#iunea admin altor utilizatori sau roluri.
S! modifice sau s! distrug! rolul.
Creatorului unui rol i este acordat automat rolul respectiv cu
op#iunea 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 urm!tor retrage utilizatorului tom_0" rolul func#ionar:
revoke functionar from tom_01;
Nu pute#i retrage n mod selectiv op#iunea admin a unui rol.
Pentru a retrage op#iunea admin, trebuie s! retrage#i rolul, dup! care s!
reacorda#i rolul f!r! op#iunea admin.
Orice utilizator posesor al op#iunii admin poate retrage rolul
oric!rui alt utilizator sau rol. Un utilizator nu-$i poate retrage un rol lui
nsu$i. 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! to#i utilizatorii bazei de date
$i fiecare utilizator are acces la acest grup. In consecin#!, orice rol
acordat grupului Public este accesibil fiec!rui utilizator al bazei de
"09
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 c#tre sistemul de
operare
Pute#i face astfel nct administrarea rolurilor s! fie efectuat! de
sistemul de operare n locul administr!rii explicite a acestora de c!tre
administratorul bazei de date. Sistemul de operare poate acorda roluri
utilizatorilor n momentul conect!rii. n continuare, aceste roluri sunt
administrate de sistemul de operare $i sunt transferate serverului Oracle
atunci, cnd utilizatorul ini#iaz! o sesiune.
Administrarea securit!#ii este centralizat! cu aceast! abordare a
gestion!rii rolurilor. Aceasta, deoarece att func#iile sistemului de
operare, ct $i func#iile de securitate ale bazei de date sunt grupate n
acela$i loc.
Pentru a opera o baz! de date astfel, nct aceasta s! utilizeze
sistemul de operare n vederea gestion!rii rolurilor fiec!rui utilizator n
momentul cre!rii unei sesiuni, atribui#i valoarea True parametrului de
ini#ializare os_roles $i relansa#i instan#a. ncepnd din acest moment,
atunci cnd un utilizator ini#iaz! o nou! sesiune de lucru cu baza de date,
programul Oracle ini#ializeaz! 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, ace$ti
identificatori indic! rolurile prestabilite ale utilizatorului $i rolurile care
au op#iunea admin. Fie c! utiliza#i UNIX, VMS sau alt sistem de
operare, specifica#ia rolului la nivelul sistemului de operare respect!
urm!torul format:
ora_<id>_<rol>[_[d][a]]
Identificatorii au urm!toarele semnifica#ii:
Id - Poate reprezenta lucruri diferite pentru sisteme de operare diferite.
De exemplu, id este identificatorul instan#ei 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.
""0
a - Caracter facultativ, care indic! faptul c! acest rol este acordat cu
op#iunea admin.
lat! dou! exemple de identificatori ai sistemului de operare:
ora_contabilitate_functionar
ora sisteme programator a;
Dac! rolurile sunt gestionate de c!tre sistemul de operare, toate
rolurile anterioare acordate utilizatorilor cu comanda SQL grant nu au
efect. Aceste roluri apar n continuare n dic#ionarul de date, ns! nu sunt
active. Numai rolurile acordate de c!tre sistemul de operare sunt active
pentru utilizator. Ca s! aib! loc toate acestea, parametrul de ini#ializare
os_roles trebuie s! aib! valoarea True.
Afi"area informa%iilor despre roluri
Serverul Oracle posed! o serie de vederi predefinite. Informa#iile
despre roluri $i despre utilizatorii c!rora le-au fost acordate sunt furnizate
de urm!toarele 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 - informa#ii despre rolurile acordate altor roluri;
role_sys_privs - informa#ii despre privilegiile de sistem acordate
rolurilor;
role_tab_privs - informa#ii despre privilegiile referitoare la tabele
acordate rolurilor;
sessions_roles - o list! a rolurilor activate de utilizator n
momentul respectiv.
Exemplele urm!toare interogheaz! aceste vederi ale dic#ionarului
pentru a ob#ine informa#ii despre roluri. Primul exemplu furnizeaz!
informa#ii despre fiecare utilizator $i despre rolurile acordate acestuia.
Culege%i:
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
"""
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
Urm!torul exemplu folose$te tabelul DBA_ROLES pentru a afla dac!
anumite roluri sunt protejate prin parol!.
Culege%i:
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
Culege%i:
select * from user_role_privs;
Rezultatul:
USERNAME GRANTED_ROLE ADM DEF OS_
----------- --------------- --- --- ---
SYSTEM DBA YES YES NO
Culege%i:
select * from role_sys_privs;
""2
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.
Culege%i:
select * from role_tab_privs;
Rezultatul:
ROLE OWNER 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
9 rows selected.
Rezumat
n acest capitol, a#i aflat c! rolurile sunt colec#ii de privilegii care
pot fi acordate anumitor utilizatori sau altor roluri.
Rolurile simplific! $i mbun!t!#esc 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.
""3
Rolurile sunt create n conformitate cu necesit!#ile diverselor
grupuri de utilizatori. Odat! create, rolurile sunt acordate utilizatorilor $i
altor roluri.
Privilegii
Un privilegiu este permisiunea de a executa o ac#iune sau de a
accesa un obiect apar#innd altui utilizator. n Oracle nu pute#i efectua
nici o ac#iune daca nu ave#i privilegiul s! o face#i. 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 ace$tia s! poat! s!
efectueze ac#iunile 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 ac#iune
asupra obiectelor de un anumit tip, n timp ce privilegiile obiect permit
utilizatorului s! efectueze o ac#iune asupra unui anumit obiect.
Privilegiile reprezint! una dintre cele mai importante mijloace
pentru asigurarea securit!#ii bazei de date. Nu pute#i efectua nici o
ac#iune n baza de date dect dac! ave#i privilegiul sau permisiunea de a
efectua respectiva ac#iune.
Privilegiile permit administratorului bazei de date s! atribuie
nivelurile adecvate de securitate obiectelor bazei de date $i utilizatorilor.
Privilegiile sunt puse la dispozi#ie de serverul Oracle, ca parte a
propriei scheme de securitate intern!. Utilizatorilor li se acord! privilegii
pentru a efectua anumite ac#iuni. 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! ac#iune asupra unui anumit obiect. De exemplu, dreptul de a
crea un spa#iu-tabel este un privilegiu de sistem. Exist! peste 80 de
privilegii de sistem distincte.
""4
ntruct privilegiile de sistem sunt foarte puternice, ele trebuie
acordate cu m!sur! utilizatorilor autoriza#i.
n continuare, sunt enumerate privilegiile de sistem ale programul
Oracle. Denumirile acestor privilegii sunt inspirate de ac#iunile 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
""5
- 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
""6
- 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. Instruc#iunea urm!toare acord!
privilegii de sistem utilizatorului ABCDED $i rolului financiar:
grant create session to ABCDED, financiar;
""7
Privilegiile de sistem nu pot fi acordate mpreun! cu privilegiile de
obiect $i cu rolurile n aceea$i comand! grant.
Pentru a acorda privilegii de sistem, trebuie s! poseda#i op#iunea admin
pentru privilegiul de sistem pe care l acorda#i sau s! poseda#i 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 op#iunea 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 ni$te func#ii, toate func#iile din schema
utilizatorului trebuie reautorizate nainte de a putea fi executate din nou.
La retragerea privilegiilor referitoare la instruc#iunile 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 ac#iune
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, urm!toarele obiecte nu posed! privilegii de obiect:
declan$atorii, grupurile, indec$ii $i leg!turile 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:
""8
Alter:
- Tabele
- Secven"e
Delete:
- Tabele
- Vederi
Execute:
- Proceduri (de sine st!t!toare $i subprograme)
Index:
- Tabele
Insert:
- Tabele
- Vederi
Reference:
- Tabele
Select:
- Tabele
- Vederi
- Secven#e
Update:
- Tabele
- Vederi
Acordarea privilegiilor de obiect
Privilegiile de obiect pot fi acordate utilizatorilor $i rolurilor cu
comanda SQL grant. Instruc#iunea urm!toare acord! privilegii de
obiect utilizatorului J9SK72D $i rolului financiar:
grant select, alter table to J9SK72D, financiar;
Pentru a acorda privilegii de obiect, trebuie s! fi#i proprietarul obiectului
specificat sau s! beneficia#i de privilegiile referitoare la obiectul
respectiv cu op#iunea grant. Privilegiile de sistem nu pot fi acordate
mpreun! cu privilegiile de obiect $i cu rolurile n aceea$i comand!
grant.
Retragerea privilegiilor de obiect
Privilegiile de obiect pot fi retrase folosind comanda SQL
revoke. Instruc#iunea urm!toare ilustreaz! retragerea unui privilegiu de
obiect:
""9
revoke update on lst_articole
from tom_01;
Nu pute#i s! retrage#i n mod explicit privilegii specifice coloanelor.
pentru a face acest lucru, trebuie nti s! retrage#i privilegiile de obiect
Pentru toate coloanele unui tabel sau unei vederi, dup! care s! reacorda#i
n mod selectiv privilegiile specifice coloanelor care vre#i s! r!mn!.
Retragerea privilegiilor de obiect provoac! de obicei un efect n
cascad!. De exemplu, dac! ntr-o procedur! sau o func#ie este utilizat! o
instruc#iune DML n leg!tur! cu un obiect pentru care au fost revocate
privilegiile, procedura sau func#ia devine invalid!.
Grupul de utilizatori publici
Orice baz! de date Oracle are un grup de utilizatori cunoscut sub
numele de Public. Public-ul reprezint! to#i utilizatorii bazei de date
$i fiecare utilizator are acces la acest grup. In consecin#!, orice rol
acordat grupului Public este accesibil fiec!rui utilizator al bazei de
date. Ca regul!, grupului Public i vor fi acordate numai acele roluri
care sunt necesare tuturor utilizatorilor bazei de date.
Afi"area informa%iilor referitoare la privilegii
Serverul Oracle posed! o serie de vederi predefinite. Informa#iile
despre roluri $i despre utilizatorii c!rora le-au fost acordate sunt furnizate
de urm!toarele vederi ale dic#ionarului de date:
all_col_privs - afi$eaz! informa#ii despre coloanele n leg!tur!
cu care au fost acordate privilegii utilizatorului Public;
user col_privs - afi$eaz! informa#ii despre coloanele n leg!tur!
cu care utilizatorul este proprietarul unor privilegii, precum $i cele n
leg!tur! cu care a primit sau a acordat privilegii;
dba col privs - afi$eaz! informa#ii despre toate coloanele din
baza de date n leg!tur! cu care exist! privilegii;
dba sys_privs - descrierea privilegiilor de sistem acordate
utilizatorilor $i rolurilor;
ali_col_privs_made - afi$eaz! informa#ii despre coloanele n
leg!tur! cu care utilizatorul este proprietar de privilegii sau a acordat
privilegii;
all_col_privs_recd - Afi$eaz! informa#ii despre coloanele n
leg!tur! cu care utilizatorul sau Publicul au primit privilegii;
"20
all_tab_privs - afi$eaz! informa#ii despre obiectele n leg!tur! cu
care utilizatorul sau Publicul posed! privilegii;
all_tab_privs_made - afi$eaz! informa#ii despre tabelele n
leg!tur! cu care utilizatorul este proprietar de privilegii sau a acordat
privilegii;
all_tab_privs_recd - afi$eaz! informa#ii despre tabelele n
leg!tur! cu care utilizatorul sau publicul au primit privilegii;
user_ro1e_privs - afi$eaz! rolurile acordate utilizatorului;
user_sys_privs - afi$eaz! privilegiile de sistem acordate
utilizatorului;
column_privileges - afi$eaz! informa#ii despre coloanele n
leg!tur! cu care utilizatorul este proprietarul unor privilegii, cele n
leg!tur! cu care a primit sau a acordat privilegii, precum $i cele n
leg!tur! cu care publicul a primit privilegii;
sessions_privs - Afi$eaz! privilegiile care sunt disponibile pentru
utilizator n momentul respectiv.
Exemplele urm!toare interogheaz! aceste vederi ale dic#ionarului
de date pentru a ob#ine informa#ii despre privilegii. Primul exemplu
furnizeaz! informa#ii despre posesorul fiec!rui privilegiu.
Culege%i:
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.
"2"
Exemplul urm!tor folose$te tabelul SESSIONS_PRIVS pentru a afi$a
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 instruc#iune SQL sau de a accesa obiectele altui utilizator. Exist!
dou! tipuri de privilegii: de sistem $i de obiect.
n acest capitol, a#i aflat c! privilegiile sunt unul dintre cele mai
importante controale ale bazei de date. Prin intermediul privilegiilor,
controla#i 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 ac#iunea la care i
d! dreptul privilegiul respectiv.
"22
ANEXE
Lista cuvintelor rezervate Oracle SQL:
ACCESS - Face un obiect al bazei de date disponibil utilizatorilor.
ADD - Utilizat n instruc#iuni SQL pentru a ad!uga o coloan! sau o
restric#ie de integritate.
ALL - Specific! un operator de compara#ie sau determin! un grup de
func#ii s! ia n considerare toate valorile dintr-un set de selec#ie
specificat.
ALTER - Utilizat n numeroase instruc#iuni, pentru a redefini valorile
curente ale instruc#iunii.
AND - Operator logic.
ANY - Operator logic.
AS - Clauz! utilizat! mpreun! cu comanda create pentru a insera n
tabel (n momentul cre!rii lui) liniile returnate de subinterogare.
ASC - Pentru crearea unei liste ascendente; se utilizeaz!, de exemplu,
mpreun! cu indec$i.
AUDIT - Activeaz! auditarea instruc#iunilor sau obiectelor specificate.
BETWEEN - Operator de compara#ie.
CHAR - Un tip de date CHARACTER de lungime fix!.
CHECK - O restric#ie care define$te n mod explicit o condi#ie.
CLUSTER - O metod! de a stoca la un loc date din mai multe tabele
atunci, cnd datele liniilor respective con#in informa#ii 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 dic#ionarul de date a
unui comentariu referitor la un tabel sau la o coloan!.
CONNECT - Salveaz! toate modific!rile, 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!.
"23
DEFAULT - O clauz! sau o valoare op#ional! 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 indec$i).
DISTINCT - Parte a unei instruc#iuni care indic! unicitatea.
DROP - Pentru ndep!rtarea sau eliminarea complet! a unui obiect din
baza de date.
ELSE - Instruc#iune care evalueaz! dou! condi#ii 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 pu#in 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 num!rului de ori de
care este executat! o instruc#iune.
GRANT - Utilizat pentru a acorda privilegii utilizatorilor $i rolurilor.
HAVING - Limiteaz! grupul de linii returnate la acelea pentru care
condi#ia specificat! are valoarea TRUE.
IDENTIFIED - Folosit n momentul modific!rii specifica#iilor unui
utilizatorindic! modul n care programul Oracle permite accesul
utilizatorului.
IMMEDIATE - Utilizat ntr-o comand! alter tablespace care nu
verific! dac! fi$ierele spadului-tabel sunt disponibile $i nu efectueaz!
o verificare la imprimare.
IN - Un operator logic utilizat ntr-o clauz! WHERE.
INCREMENT - Folosit la crearea secven#elor pentru indicarea
intervalului dintre numerele secven#iale.
INDEX - Un obiect al bazei de date utilizat pentru mbun!t!#irea vitezei
de acces. INITIAL - Specific! cerin#ele ini#iale de spa#iu de stocare.
INSERT - Utilizat pentru ad!ugarea liniilor ntr-un tabel sau n tabelele
de baz! ale unei vederi.
INTEGER - Tipul de date INTEGER.
"24
INTERSECT - Un operator set care returneaz! liniile comune din dou!
seturi distincte de linii.
INTO - Specific! tabelul sau obiectul care constituie receptorul unei
ac#iuni.
IS - Folosit mpreun! cu operatorul logic NULL (Null nu este operator
logic!) pentru a testa prezen#a unei valori.
LEVEL - Aceasta este o pseudocoloan! care ia valoarea " pentru nodul
r!d!cin!, 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 gigaocte#i.
MAXEXTENTS - Specific! num!rul 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 - Stabile$te modul procesului: mono-procesor sau multi-
procesor.
MODIFY - Modific! defini#ia unei coloane existente a unui tabel.
NOAUDIT - ncheie activit!#ile de auditare pentru a anumit! instruc#iune
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! absen#a 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 c!ruia va ac#iona instruc#iunea. ONLINE
- Trece un anumit obiect n stare online $i l face accesibil
utilizatorilor.
OPTION - Utilizat pentru a specifica o list! de op#iuni pentru
instruc#iunea respectiv!.
"25
OR - Un operator care combin! dou! expresii al c!ror rezultat este
TRUE sau FALSE.
ORDER - Asigur! crearea unei liste de numere n ordinea specificat!.
PCTFREE - Specific! pentru fiecare obiect procentul de spa#iu rezervat
pentru actualiz!rile viitoare ale obiectului.
PRIOR - Un operator care evalueaz! o expresie specificat! pentru linia
p!rinte a liniei curente ntr-o ierarhie.
PRIVILEGE - Permisiune acordat! unui utilizator, de a efectua o
anumit! ac#iune.
PUBLIC - Un grup al bazei de date la care au acces to#i utilizatorii bazei
de date.
RAW - Tipul de date RAW. Acest tip are format binar $i nu trebuie
interpretat direct.
RENAME - nlocuie$te 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 con#ine un num!r ce
indic! ordinea n care programul Oracle selecteaz! liniile dintr-un
tabel reprezentnd un set de linii reunite.
ROW - O colec#ie de informa#ii din coloanele unui tabel care corespunde
unei singure nregistr!ri.
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 octe#i.
SMALLINT - Un tip de date compatibil din DB2 pentru tipul de date
number la programului Oracle.
START - Utilizat pentru a ini#ia o ac#iune cum ar fi pornirea unei baze de
date.
"26
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! condi#ia care l preced! cu instruc#iunea care urmeaz!.
TO - Identific! elementul asupra c!ruia va fi efectuat! o ac#iune.
TRIGGER - O procedur! rezident! asociat! cu un tabel, care este
executat! automat, la producerea unui eveniment specificat.
UID - Pseudocoloan! care con#ine un num!r unic atribuit fiec!rui
utilizator.
UNION - Func#ie SQL care combin! rezultatele a dou! interog!ri.
UNIQUE - Specific! faptul c! un articol trebuie s! fie distinct n raport
cu toate articolele de acela$i fel.
UPDATE - Comand! pentru modificarea valorilor dintr-un tabel sau din
tabelele de baz! ale unei vederi.
USER - Pseudocoloan! care con#ine numele de conectare al
utilizatorului.
VALUES - Atribuie o list! de valori coloanelor corespunz!toare.
VARCHAR - Tipul de date VARCHAR; acesta este variabil ca lungime
$i poate avea o lungime maxim! de 200 de octe#i.
VARCHAR2 - Tipul de date VARCHAR2; acesta este variabil ca
lungime $i poate avea o lungime maxim! de 200 de octe#i. 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 instruc#iuni, numai n cazul cnd instruc#iunea este
executat! cu succes.
WHERE - Folosit n instruc#iuni pentru a specifica liniile care urmeaz!
s! fie afectate de comanda respectiv!.
WITH - Furnizeaz! un element suplimentar care va fi inclus n
instruc#iune.
"27
Cuvintele rezervate pentru SQL*Plus.
SQL*Plus, asemeni altor utilitare $i instrumente Oracle, trebuie s!
respecte conven#iile 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! fi$ierul de comenzi specificat.
@@ - Ruleaz! un fi$ier de comenzi imbricat.
ACCEPT - Cite$te o linie de date de intrare de pe ecran $i o depune n
variabila specificat! definit! de utilizator.
APPEND - Adaug! textul specificat la sfr$itul liniei curente din buffer.
BREAK - Specific! unde $i cum se va modifica formatarea ntr-un raport
sau afi$eaz! defini#ia saltului curent de formatare.
BTITLE - Plaseaz! $i formateaz! un titlu specificat la baza fiec!rei
pagini a raportului.
CHANGE - Modific! textul din linia curent! a buffer-ului.
CLEAR - Restabile$te sau elimin! valoarea sau parametrul curent ale
op#iunii specificate, cum ar fi breaks $i columns.
COLUMN - Specific! atributele de afi$are pentru o coloan! specificat!.
Sau, afi$eaz! atributele de afi$are curente pentru o singur! coloan!
sau pentru toate coloanele.
COMPUTE - Calculeaz! $i afi$eaz! 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 g!se$te
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, afi$eaz! valoarea $i tipul unei variabile
sau ale tuturor variabilelor.
DEL - Elimin! din buffer linia curent!.
DESCRIBE - Afi$eaz! defini#iile coloanelor pentru tabelul, vederea sau
sinonimul specificat.
DISCONNECT - Salveaz! toate modific!rile n a$teptare ale bazei de
date $i deconecteaz! utilizatorul curent de la serverul Oracle, f!r! a
p!r!si programul SQL*Plus.
EDIT - Apeleaz! un editor de text al sistemului de operare pentru
editarea con#inutului fi$ierului specificat sau al buffer-ului.
EXECUTE - Execut! o singur! instruc#iune PL/SQL.
"28
EXIT - Salveaz! toate modific!rile n a$teptare ale bazei de date,
p!r!se$te programul SQL*Plus $i cedeaz! controlul sistemului de
operare.
GET - ncarc! n buffer un fi$ier al sistemului de operare gazd!.
HELP - Acceseaz! sistemul de asisten#! soft al programului SQL*Plus.
HOST - Execut! o comand! a sistemului de operare gazd! f!r! p!r!sirea
programului SQL*Plus.
INPUT - Adaug! n buffer una sau mai multe linii dup! linia curent!.
LIST - Afi$eaz! una sau mai multe linii din buffer.
PAUSE - Afi$eaz! o linie goal! urmat! de o linie care con#ine text, dup!
care a$teapt! ca utilizatorul s! apese tasta Return. Ca alternativ!,
acest cuvnt rezervat poate duce la afi$area a dou! linii goale,
urmate de a$teptarea r!spunsului utilizatorului.
PRINT - Afi$eaz! valoarea curent! a unei variabile de leg!tur!.
PROMPT - Afi$eaz! mesajul specificat sau o linie goal! pe ecranul
utilizatorului.
REMARK - ncepe un comentariu ntr-un fi$ier de comenzi.
RUN - Afi$eaz! $i execut! comanda SQL sau blocul PL/SQL care se afl!
n bufferul SQL.
RUNFORM - Apeleaz! o aplica#ie SQL*Forms din cadrul programului
SQL*Plus.
SAVE - Salveaz! con#inutul buffer-ului ntr-un fi$ier al sistemului de
operare gazd! (un fi$ier de comenzi).
SET - Stabile$te un aspect al mediului SQL*Plus pentru sesiunea
curent!.
SHOW - Afi$eaz! valoarea unei variabile de sistem SQL*Plus.
SPOOL - Stocheaz! rezultatele interog!rilor ntr-un fi$ier al sistemului
de operare $i, op#ional, transmite fi$ierul la imprimanta prestabilit!.
SQL*Plus - Porne$te programul SQL*Plus de la promptul sistemului de
operare. START - Execut! con#inutul fi$ierului de comenzi
specificat.
TTITLE - Plaseaz! $i formateaz! un titlu specificat n partea superioar! a
fiec!rei pagini a raportului, sau afi$eaz! defini#ia curent! a titlului.
UNDEFINE - Elimin! variabila definit! utilizator specificat! pe care a#i
definit-o fie explicit (cu comanda define), fie implicit (cu un
argument n comanda start).
"29
VARIABLE - Declar! o variabil! de leg!tur! care poate fi definit! n
PL/SQL.
WHENEVER OSERROR - P!r!se$te programul SQL*Plus dac! o
comand! a sistemului de operare genereaz! o eroare.
WHENEVER SQLERROR - P!r!se$te programul SQL*Plus dac! o
comand! SQL sau un bloc PL/SQL genereaz! o eroare.
Simboluri
!= (inegalitate), operator de compara#ie,
% (semnul procent), caracter de nlocuire,
* (asterisc) instruc#iunea select, operator de nmul#ire,
= (operator de inegalitate),
|| (operator de concatenare),
+ (semnul plus) operator de adunare, operatorul outer join,
- (cratim!) caracter de nlocuire, operator de sc!dere,
- - (dublu minus), comentarii,
/ (bar!) comand! SQL*Plus, operator de mp!r#ire,
/*,*/ (comentarii multi-linie),
: (dou! puncte), referirea variabilelor variabile de leg!tur!, 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
". . G.Gardarin. Matriser les Bases De Donnes
"30
2. George Gardarin. Bases de donnes objet & relationnel. Edition
Eyrolles, "999.
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,
"994.
9. C. G. Date. Introduction aux bases de donnes. Vubert Informatique
Paris 2000.

S-ar putea să vă placă și