Documente Academic
Documente Profesional
Documente Cultură
Sisteme de Gestiune A Bazelor de Date
Sisteme de Gestiune A Bazelor de Date
CAPITOLUL 2
2.1
2.2
2.3
2.4
2.5
2.6
2.7
CAPITOLUL 3
INDEXAREA I RELA IONAREA TABELELOR,
INTEGRITATEA REFEREN IAL . ............................................................... 3-46
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
CAPITOLUL 4
PROGRAMAREA ORIENTATA PE OBIECT-CLASE I
OBIECTE N VISUAL FOX PRO.................................................................... 4-78
4.1
4.2
4.3
4.4
4.5
4.6
4.7
CAPITOLUL 6
EXPRESII ARITMETICE. OPERATORI.
RESTRIC IONAREA I SORTAREA DATELOR....................................... 6-149
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
6.10
CAPITOLUL 7
7.1
7.2
7.3
7.4
1-2
CAPITOLUL 8
8.1
8.2
8.3
8.4
8.5
8.6
8.7
8.8
CAPITOLUL 9
9.1
9.2
9.3
9.4
9.5
9.6
9.7
9.8
9.9
9.10
9.11
9.12
9.13
9.14
9.15
9.16
9.17
CAPITOLUL 10
10.1
10.2
10.3
10.4
10.5
10.6
10.7
10.8
10.9
CAPITOLUL 11
302
11.1
11.2
11.3
11.4
11.5
11.6
11.7
11.8
11.9
CAPITOLUL 12
1-4
12-343
1.2
Succesul unui SGBD este sus inut prin realizarea urm toarelor obiective:
1-6
1-7
1.3
1.4
Dr. E.F. Codd a propus modelul rela ional pentru baze de date n 1970
baza
(http://www.wikipedia.org/wiki/Edgar_F._Codd), model ce reprezint
pentru sistemele de gestiune a bazelor de date (DBMS).
Principiile modelului rela ional au fost subliniate pentru prima data de Dr.
E.F. Codd n lucrarea numit Un model rela ional de date pentru b nci de date
mari. Cele mai populare modele ale vremii erau cele ierarhice i de re ea sau
chiar fiierele simple de date. Apoi DBMS-urile au devenit foarte populare
pentru uurin a n utilizare i flexibilitatea lor.
Componentele modelului rela ional sunt:
1-11
i acurate e.
Modelul
sistemului
asa cum este
vazut de catre
client
Modelul
Entitate-relatie
a ceea ce este dat de
catre client
(modelul logic)
Modelul tabelar
(modelul fizic)
Server
Tabele pe disc
ANGAJAT
#* numr
* nume
o meseria
asignat la
compus din
DEPARTAMENT
#* numr
* nume
o localitate
Scenariu:
se asigneaz unul sau mai mul i angaja i la un departament
cteva departamente nu au nici un angajat
ntr-un sistem real, data este divizat n categorii discrete sau entit i. Un
model entitate rela ie (ER) este o ilustrare a entit ilor dintr-o problem i a
rela iilor dintre ele. Un model ER este derivat din specifica iile informa ionale ale
problemei i este construit n faza de analiza a sistemului. Modelul ER separ
informa iile cerute de problema de activit i. Chiar dac activit ile problemei se
schimb , tipul informa iilor trebuie s r mn constant. De aceea structurile de
date tind s r mn constante.
Avantajele modelului ER:
Documenteaz necesarul de informa ii pentru organiza ie ntr-o
form clar i precis ;
Prezint o imagine clar a scopului cerin elor informa ionale i uor
de n eles pentru proiectarea bazei de date;
Ofer un mediu efectiv de integrare a aplica iilor multiple.
Componente cheie:
Entitatea: Un obiect sau un grup de obiecte de acelai tip (cu aceleai
propriet i), cu o anumit semnifica ie, despre care este necesar a fi cunoscute
informa ii. Exemplu: departamente, angaja i, comenzi.
Atribut: Un aspect care descrie sau calific o entitate. Exemplu: pentru
entitatea Angajat atributele sunt: marca, meseria, data de angajare,
departamentul. Fiecare atribut poate fi obligatoriu sau op ional.
Rela ie: Un nume de asociere dintre entit i care arat op ionalitatea sau
gradul asocierii. Exemplu: angaja i i departamente, comenzi i articole.
Identificator unic (UID Unique IDentifier) este orice combina ie de
atribute sau/i rela ii care servete la distingerea apari iilor unei entit i. Fiecare
apari ie a entit ii trebuie sa fie identificat unic.
1-13
O baza de date relaional con ine una sau mai multe tabele. O tabel
reprezint structura de baz a unui SGBDR (Sistem de Gestiune a Bazelor de
Date Rela ionale). O tabel con ine toate datele necesare despre un aspect al
lumii reale. Se consider exemplul tabelei Angaja i.
No iuni:
Un singur rnd sau o tupl reprezint informa ia necesar pentru un
angajat specificat. Fiecare rnd din tabel trebuie identificat de o cheie
primar, care nu permite rnduri duplicate. Ordinea rndurilor nu este
semnificativ .
O coloan sau un atribut con ine marca angajatului care este i cheie
primar. Marca (cheia primar ) identific n mod unic un angajat n
tabela EMP. O cheie primar trebuie s con in o valoare. Alte tipuri de
coloane reprezint alte informa ii (de ex: func ia). Ordinea coloanelor nu
este important . Coloana care con ine num rul de departament este
numit i cheie extern. Cheia extern con ine coloane care definesc
modul n care sunt n rela ie tabele diferite. O cheie extern refer o
cheie primar sau o cheie unic din alt tabel.
Referirea mai multor tabele - Fiecare tabel con ine date care descriu
exact o entitate. De exemplu tabela Angaja i con ine informa ii despre angaja i.
Deoarece datele despre entit i diferite sunt stocate n tabele diferite, este
necesar combinarea a dou sau mai multe tabele pentru a afla r spunsul la o
interogare. De exemplu dac vre i s afla i localitatea n care este situat
departamentul n care lucreaz un anumit angajat sunt necesare tabelele
Angaja i i Departamente. Un SGBDR permite combinarea tabelelor diferite
folosind chei externe. O cheie extern este o coloan sau o combina ie de
coloane care refer o cheie primar din acelai tabel sau din unul diferit.
Propriet ile bazelor de date rela ionale
O baza de date rela ional :
Poate fi accesat i modificat
specifice;
1-14
1-17
1.7
1-18
2-22
n figura
Fiier index
Unui fiier de date FoxPro i se pot asocia unul sau mai multe fiiere
index cu scopul de a permite reg sirea rapid a articolelor n func ie de cheile
realizate pe baza unor cmpuri sau combina ii de cmpuri.
Organizarea fiierului index este prezentat n figura urm toare:
2-23
1
2
i`
n`
Valoare cheie (ordonat )
Valoare cheie: valorile cmpurilor sau combina iilor de cmpuri din fiierul de
date ordonate cresc tor sau descresc tor, dup op iune;
Nr. ordine articol n fiier: numerele de ordine ale articolelor din fiier.
Cu alte cuvinte un fiier index reprezint perechi formate din valori i
numere de articol pentru care s-au ob inut aceste valori, prin evaluarea unei
chei ordonate cresc tor sau descresc tor.
Num rul de perechi n` este mai mic sau egal ca num rul de articole din
fiierul de date asociat.
Avantajul c ut rii n fiierul de date printr-un fiier index asociat rezult
tocmai din faptul c valorile sunt ordonate, deci c utarea n index este relativ
simpl i rapid , dup care, prin ob inerea num rului de ordine al articolului
c utat, c utarea n fiierul de date devine de asemenea simpl i uoar .
n sistemul FoxPro, ncepnd cu versiunea 2.0 s-a introdus un nou tip de
fiier index i anume fiierul multiindex compact (CDX). Fiierul multiindex se
aseam n cu cel monoindex numai ca are mai multe perechi de coloane
valoare cheie-nr. ordine articol n fiier. Perechile de coloane valoare cheie i
nr. ordine articol au nume unic relativ la fiier i poarta numele de index (tag).
Macheta Crearea i gestionarea unei machete are la baz un program
special care realizeaz opera ii de afiare i/sau opera ii de ntre inere a
fiierelor de date, realiznd astfel o interfa ntre utilizator i sistemul FoxPro.
Avantajul folosirii machetelor const , n primul rnd, n existen a unui
editor specializat n crearea i modificarea acestor machete ntr-un mod facil.
De asemenea limbajul de programare dispune de instruc iuni de lucru cu
machete.
Raportul reprezint modalitatea prin care se pot realiza opera ii de
afiare sau de tip rire a informa iilor din fiierele de date. Un raport con ine mai
multe benzi pentru o grupare lizibil a informa iilor. Avantajul folosirii rapoartelor
const , n primul rnd, n existen a unui editor specializat n crearea i
2-24
2-25
(,)
** , ^
*,/,%
+,2-26
Operatori algebrici
Grupeaz expresiile
Ridicare la putere
nmul ire,mp r ire,modulo
Adunare,sc dere
2-27
Tipul logic are un singur octet lungime i poate memora doua valori:
adev rat (.T.) True i fals (.F.) False; valoarea nul este tratat de
FoxPro ca fiind .F. Se folosete pentru a stoca valori n cmpurile de
tip logic ale tabelelor din baze de date, pentru a stoca valorile
returnate de func ii, variabile de tip logic sau alte expresii logice.
(,)
! , NOT
AND
OR
Operator logic
Grupeaz expresiile
Nega ie logic
I logic
SAU logic
Exemplu :
? NOT (1=3)
.T.
? (1<=4) AND (5>3)
.T.
? 6<3 OR 4*2=9
.F.
2-28
Formatul de afiare
LL/ZZ/AA
AA.LL.ZZ
ZZ/LL/AA
ZZ/LL/AA
ZZ.LL.AA
ZZ-LL-AA
AA/LL/ZZ
LL-ZZ-AA
LL/ZZ/AA
ZZ/LL/AA
AA/LL/ZZ
Exemplu:
store {^2006-06-21} to data
? DATA
06/21/2006
SET DATE BRIT
? DATA
21/06/2006
SET CENTURY ON | OFF
Efect: ON se afieaz anul pe 2 cifre;
OFF se afieaz anul pe 4 cifre
SET MARK TO [<eC>]
Efect: Stabilete caracterul delimitator.
2-29
DOW(<eD>)
CDOW(<eD>)
DAY(<eD>)
MONTH(<eD>)
CMONTH(<eD>)
YEAR(<eD>)
DMY ( <expD>)
MDY ( <expC>)
TIME(<eN>)
<,>,=
<>, #
diferit de
==
identic
Observa ii: Operatorii de comparare returneaz un rezultat adev rat (.T.) sau
fals (.F.) putnd fi utiliza i n compararea a dou expresii de acelai
tip, indiferent de tipul lor. Compararea a 2 iruri de caractere se face
prin compararea codurilor ASCII ale caracterelor de pe pozi iile
echivalente.
Exemplu :
expresia :strada_ +Geroge _Cosbuc dup evaluare devine :
strada_George_Cosbuc
expresia Salut - prieteni ! dup evaluare devine: Salut prieteni!
Funcii pentru tipul de dat caracter
returneaz o valoare numeric ce indic
LEN (<expC>, <memo
num rul de caractere dintr-o expresie de tip
field>)
caracter sau dintr-un cmp memo
AT (<expC>,<expC>/<memo returneaz un num r ce indic pozi ia de la
care ncepe primul ir de caractere ca subir al
field>)
celui de-al doilea. Indicele primului caracter
dintr-un ir este 1.
LEFT (<expC>,/<memo
RIGHT (<expC>,/<memo
field>, <expN>)
SUBSTR (<expC>,/<memo
field>, <start
position>,<number of
characters>)
LOWER(<expC>)
UPPER(<expC>)
LTRIM (<expC>)/RTRIM
(<expC>)
TRIM (<expC>)
CHR (<expC>)
MAX (<expC1>,<expC2>)
MIN (<expC1>,<expC2>)
SPACE (<expN>)
LIKE (<pattern>,<expC2>)
Exemple :
? LEN ('ACEST ir ARE 26 CARACTERE')
? AT ('P','IN CE POZITIE ESTE LITERA P ? ')
? AT ('AB', 'ABAC,ABACD',2)
? AT ('AB', 'ABAC,ABACD,ABCDE',3)
? LEFT ('CALCULATOR',3)
? RIGHT ('CALCULATOR',3)
? SUBSTR('CALCULATOR',4,3)
? LOWER('AAAAAAAAAAAAAA')
2-32
o eficien
Observa ie: Prioritatea n cazul folosirii ntr-o expresie a mai multor operatori
este urm toarea :
1. operatori matematici i pe iruri de caractere
2. operatori de comparare
3. operatori logici
4. toate opera iile ce sunt pe acelai nivel se execut de la stnga
la dreapta.
Pentru modificarea ordinii opera iilor se pot folosi parantezele rotunde.
2.3
2-34
Zone de lucru
Clauze:
AGAIN deschiderea aceluiai fiier n mai multe zone de lucru;
NOUPDATE nu permite modificarea datelor (structur i con inut);
SHARE, EXCLUSIVE pentru lucru n re ea;
2-35
<precision>
n
n
-
<scale>
d
-
Descriere
ir de caractere de lungime n
Data calendaristic
Numeric, de l ime n cu d zecimale
Logic
Memo
ALTE COMENZI
2-38
2-40
APPEND permite ad ugarea unuia sau mai multor articole din fiierul surs
specificat la sfritul tabelei active.
se pot adaug date i din fiiere de alt tip, nu doar din DBF. Dac sursa
i destina ia sunt DBF, se copie doar cmpurile comune celor dou
tabele ;
dac SET DELETED este OFF se copie i articolele marcate pentru
tergere (dar nu i marcajul) ;
dac un cmp din surs este mai mare dect omologul sau din
destina ie, datele de tip caracter n exces se pierd iar cele numerice
sunt nlocuite de asteriscuri;
dac structurile celor dou fiiere nu corespund se afieaz mesajul 0
row(s) inserted. Coloanele ce nu apar n tabel sunt ignorate;
dac nu se indica TYPE se presupune ca este un fiier surs tip dbf;
se pot importa date din fiiere de mai multe tipuri;
pentru o mai bun
delimitatorul.
EXPORT transfer datele dintr-un fiier n altul, de alt tip (implicit fiierul se
consider a fi de tip.dbf)
DELETE [<scope>] [FOR <expL1>] [WHILE <expL2>]
[NOOPTIMIZE]
DELETE marcheaz pentru tergere articolele specificate din tabel. Implicit se
marcheaz articolul curent.
tergerea este logic , articolele putnd fi readuse cu RECALL
tergerea fizic se face cu comanda PACK
articolele marcate pentru tergere sunt marcate cu o stelu a n prima
pozi ie la folosirea comenzilor DISPLAY, LIST
RECALL [<scope>] [FOR <expL1>] [WHILE <expL2>]
[NOOPTIMIZE]
RECALL anuleaz marcajul pentru tergerea articolelor specificate
din tabel. Dac articolele au fost terse cu ZAP sau PACK, nu mai pot fi
ref cute.
PACK
PACK terge fizic articolele marcate pentru tergere. Toate fiierele
index deschise sunt automat reindexate.
ZAP
ZAP elimin toate articolele din tabel . Toate fiierele index
deschise sunt automat reindexate.
2-42
2-43
2.7
Exerciii
Tip cmp
Num
Char
Char
Memo
Char
Char
Date
Char
Memo
Num
Num
Num
Num
Char
Lungime cmp
4
25
25
15
15
15
15
15
15
15
25
2-45
Indexarea tabelelor
O tabel poate fi ordonat dup mai multe chei, caz n care se creeaz
mai multe intr ri de indeci pentru aceeai tabela n acelai fiier de index.
La deschiderea unei tabele indexate este necesar doar deschiderea
fiierului de index asociat, care con ine toate informa iile despre to i indecii.
Utilizarea indecilor se poate face prin specificarea indexului care s dea
3-46
Crearea indecilor
n fereastra pentru crearea tabelelor, n pagina Fields exist un fanion de
indexare care, prin pozi ionarea n modul s geat n sus sau s geat n jos,
determin crearea unei etichete de index n fiierul de index pentru cmpul
respectiv, cu acelai nume ca i cmpul, criteriul de ordonare fiind cmpul
respectiv. Ordinea cresc toare sau descresc toare este dat de tipul s ge ii.
Comanda de indexare este:
INDEX ON <expr> TO <idx file>|TAG <tag name>[OF <cdx
file>][FOR <expL>][COMPACT] [ASCENDING|DESCENDING]
[UNIQUE] [ADDITIVE]
<expr> - cheia de indexare care con ine cmpuri ale tabelei dar nu i
cmpuri memo.
Clauza FOR permite limitarea nregistr rilor ce vor putea fi accesate prin
fiierul index la cele care ndeplinesc condi ia <expL> .
3-47
cu fiierele INDEX
3-48
compus
structural
Dac sunt deschise mai multe fiiere index simple sau compuse, pentru a
schimba indexul (eticheta) activ( ) se folosete comanda:
SET ORDER TO [<expN1>|<file.idx>|[TAG]<tag name>[OF <cdx
file>][IN <expN2>|<expC>][ASCENDING|DESCENDING]]
CDX(<expN1>[,<expN2>|<expC>])
Actualizare indeci
Actualizarea indecilor asocia i unei tabele se face folosind comanda :
REINDEX
Sunt multe situa ii n care un index poate fi desincronizat (c deri de
tensiune, probleme de alocare clusteri dublii sau inexisten i) caz n care acesta
trebuie ref cut. Cei mai pu ini expui unor astfel de probleme sunt indecii
compui structurali, care sunt deschii odat cu tabela asociat . i acetia pot
suferi fragmentari semnificative, n urma ad ug rii sau tergerii de articole. De
asemenea tergerea unei etichete dintr-un index compus nu elibereaz spa iul
pe disc. Din acest motiv este recomandat utilizarea ritmic a comenzii
REINDEX.
tergere indeci
DELETE TAG <tag name1> [OF <file1.cdx>] [,<tag name2> [OF
<file2.CDX>]]... sau
DELETE TAG ALL [OF <cdx file>]
Comanda permite tergerea etichetelor dintr-un index compus fie
structural, fie specificat de clauza OF. Clauza ALL permite tergerea tuturor
etichetelor, caz n care fiierul index compus specificat este ters de pe disc.
3-49
Relaionarea tabelelor
3-50
3.3
Integritatea referenial
3-54
Lista con ine numele variabilelor la care se renun , separate prin virgul .
RELE ALL terge toate variabilele de memorie, mai pu in cele sistem. ntr-un
program, RELE ALL terge doar variabilele locale, create n programul curent
sau n cele de nivel inferior.
Afiarea de informa ii despre con inutul memoriei FOX se face folosind
comanda :
3-55
chiar
se execut programul.
3.6
Execu ia unui program se va opri n una din urm toarele situa ii:
la execu ia unei comenzi RETURN, CANCEL, QUIT cnd se ntlnete
sfritul fiierului;
cnd se ntlnete o alta comanda DO ;
prin ap sarea tastei ESC dac SET ESCAPE este ON.
Execu ia unui program din interiorul altui program folosind comanda DO
reprezint un pas important n structurarea aplica iilor de dimensiuni mari. Pe
m sur ce dimensiunea unei aplica ii crete, testarea i depanarea acesteia
devine din ce n ce mai dificil datorit num rului mare de variabile i
instruc iuni folosite.
Utilizatorul poate defini anumite proceduri i func ii ce pot fi executate de
mai multe ori n cadrul unui program, apelndu-le din diverse puncte de
program, cu diverse valori ale parametrilor.
Scrierea unei proceduri ncepe cu :
PROCEDURE <procedure name> i se ncheie obligatoriu cu RETURN.
Procedurile i func iile unui program se introduc, de regul , dup ultima
instruc iune a programului, n acelai fiier cu acesta. Acestea pot fi introduse i
n fiiere separate care vor fi asociate programului apelant prin comanda:
SET PROCEDURE TO [<fiier>]
Aceast comand asociaz programului curent n execu ie, fiierul
<fiier> unde se vor c uta procedurile ce nu se g sesc n programul apelant.
Parametrii sunt variabile de comunicare ntre programe,
definite de utilizator, ce realizeaz interfa a programului cu
exteriorul.
ntr-o procedur se pot defini dou tipuri de variabile :
Comenzi de intrare/ieire
? /?? [<exp1> ][PICTURE <expC1>][FUNCTION <expC2>]
[AT <expN2> ]
dac READ este comun pentru mai multe GET , se trece la urm toarea
citire prin ENTER sau s geata n jos;
dac PICTURE indic mai multe caractere dect cele specificate la
crearea variabilei de memorie sau a cmpului, se accept la citire dar
nu se memoreaz toate;
tergerea unor caractere se face cu BackSpace sau Del;
folosind clauza COLOR din comand se pot stabili culorile de afiare;
clauza WHEN indic o condi ie ce va fi evaluat cnd ncercam s
pozi ionam cursorul pe un cmp GET; dac este fals , se trece la
urm torul cmp;
DEFAULT furnizeaz o valoare implicit pentru GET; expresia trebuie
s corespund tipului de dat din GET, ce nu este evaluat dect la
ad ugarea nregistr rilor n tabel ;
RANGE stabilete intervalul nchis de valori permise. Se poate indica
numai limita inferioar sau numai cea superioar ;
dac
se introduce o valoare incorect , se afieaz
mesajul
corespunz tor i se ateapt ap sarea tastei Space dup care se cere
o nou valoare (pn la satisfacerea restric iilor) ;
VALID stabilete condi ia care trebuie sa fie ndeplinit nainte ca
datele sa fie acceptate de GET ( se poate folosi o func ie utilizator care
s returneze o valoare logic ; nu se face nici un control dac se apas
direct ENTER) ;
ERROR indic un mesaj personal care s
satisf cut validarea;
nu s-a
M ti
3-62
afieaz
irul de caractere corespunz tor
CURRENCY in locul zerourilor nesemnificative;
lui
SET
orice caracter;
Exemplu :
CLEAR
SET TALK OFF
NUME=SPACE(10)
VARSTA=0
DO WHILE VARSTA <> 99
@ 6,5 SAY "NUMELE : " GET NUME PICTURE "AAAAAAAAA"
@ 8,5 SAY "VARSTA : " GET VARSTA PICTURE "99"
MESSAGE "pentru ieire : vrsta este de 99 ani"
READ
@ 10,5 SAY NUME+" ARE "
@ 10, $+1 SAY VARSTA
3-63
ultima comand
ENDDO
B=0
@ 4,10 SAY "PRIMUL NUMAR " GET A PICTURE "9999"
@ 5,10 SAY "AL DOILEA NUMAR " GET B PICTURE "9999"
READ
SIR1="Primul Numar Este Mai Mare "
SIR2="Al Doilea Numar Este Mai Mare Sau Numerele Sunt Egale"
? IIF (A>B, SIR1,SIR2)
RETURN
3.9
Comenzi SQL
Interogare obinuit n SQL poate fi scris cu litere mari sau mici iar
cuvintele cheie sunt:
SELECT.... FROM..... WHERE
Exemplu:
Cre m un tabel numit Personal, cu structura Nume C(20), Salar
N(10) i dorim afiarea tuturor salaria ilor a c ror nume este
Popescu.:
SELECT NUME, SALAR FROM PERSONAL WHERE NUME=POPESCU
Cea mai simpla interogare este : SELECT * FROM PERSONAL
prin care se afieaz ntreg con inutul tabelei. Semnul (*) transmite comanda de
a returna toate coloanele din tabelul descris n clauza FROM.
Dac se dorete afiarea coloanelor n alt ordine putem specifica dup
clauza SELECT numele cmpurilor dorite separate prin virgul i spa iu.
SELECT SALAR, NUME FROM PERSONAL
3-67
3-68
Ordonarea agen ilor cresc tor dup nume, prenume i descresc tor
dup salariu.
SELECT NUME, PRENUME, SAL_BAZA
FROM AGENTI
ORDER BY NUME ASC,PRENUME, SAL_BAZA DESC
Exemple de interog ri:
Care sunt numerele de cod ale agen ilor care au contractat tranzac ii
cu dischete ?
SELECT NR_AGENT
FROM TRANZACT
WHERE COD_PRODUS IN
(SELECT COD_PRODUS FROM MARFURI WHERE
DENUMIRE=DISCHETE)
Care sunt numele agen ilor din Iai care lucreaz cu clien i de tip regii
autonome?
SELECT NUME, NR_AGENT, ORAS, DENUMIRE
FROM AGENTI, CLIENTI
WHERE ORAS=IASI AND TIP=RA
Care sunt clien ii din localit ile n care nu domiciliaz nici un agent comercial ?
SELECT DENUMIRE, NR_CLIENT, ORAS, JUDET
FROM CLIENTI
WHERE ORAS NOT IN (SELECT ORAS FROM AGENTI )
3.10
Depanarea programelor
n scrierea unui program deseori apar erori datorate fie neaten iei, fie
unei insuficiente cunoateri a limbajului de programare sau a omiterii unor
cazuri particulare de evolu ie a programului.
Exist dou mari clase de erori de programare :
erori de sintax ;
erori de rulare, cnd programul este corect scris dar nu
func ioneaz aa cum dorim .
La rularea unui program, apari ia unei erori de sintax determin
ntreruperea execu iei i afiarea unui mesaj de eroare, indicnd tipul erorii i
3-69
maxim
3-70
Form Wizard
v ajut s crea i un ecran pentru a gestiona informa iile din tabela dvs.
la acest tip de Wizard se afieaz mai nti un ecran din care alegem
tipul de ecran i anume:
Form Wizard-form asociat unui singur tabel;
ecranul pentru o
ecranul cu
Report Wizard
La acest tip de Wizard se afieaz mai nti un ecran din care alegem
tipul de raport i anume:
asist
la crearea unui
3-73
3.12 Exerciii
1.
2.
3.
4.
Pentru fiierul agen i, crea i urm toarele indexuri i afia i con inutul tabelei
cu fiecare index dintre :
nume+prenume,
nume+num r de identificare (marca) ,
nume+data naterii descresc tor,
nume+data angaj rii +salar (descresc tor)
5.
6.
7.
8.
9.
rela iile
CLIENTI
NR_CLIENT N (8,0)
DENUMIRE C (15)
TIP C (3) (SA, SRL,etc.)
LOCALITATE C (10)
JUDET C (2)
PRIVAT L
TRANZACT
NR_TRANZ N (6,0)
NR_CLIENT N (8,0)
NR_AGENT N (4,0)
COD_PRODUS N (6,0)
CANT
N (4,0)
DATA_TRANZ D
NR_FACT
N (6,0)
TIP C (1) (intr ri, ieiri)
MARFURI
COD_PRODUS N (6,0)
DENUMIRE C (12)
TIP_MODEL C (10)
UN_MAS
C (6)
PRET_UN N (8,0)
CANTITATE N (8,0)
AGENTI
NR_AGENT N (4,0)
NUME C (10)
PRENUME C (10)
ORAS C (10)
JUDET C (2)
ANGAJARE D
NASTERE
D
SEX
C (1)
CAS
L (casatorit,etc.)
SAL_BAZA N (6,0)
FACTURI
NR_FACT N (6,0)
NR_TRANZ N (6,0)
DATA_EM
D
ACH
L (achitata sau nu)
DATA_ACH D
VALOARE
N (10,0)
3-77
Descriere
Textul descriptiv de lng caseta de validare
Specific dac utilizatorul poate selecta sau nu caseta
de validare
Culoarea textului afiat drept titlu
Pozi ia marginii din stnga a casetei de validare
Felul n care arat indicatorul mouse-ului cnd se afla
deasupra casetei de validare
Pozi ia marginii de sus a casetei de validare
Specific dac pentru utilizator caseta de validare este
vizibil sau nu
Descriere
Utilizatorul execut click n caseta de validare
Utilizatorul selecteaz caseta de validare printr-un click de
mouse sau prin ap sarea tastei TAB
Utilizatorul selecteaz alt control
Valoarea casetei de validare este actualizat pentru a reflecta
modific rile survenite n cadrul sursei de date asociate
Casetei de validare i se atribuie focusul (devine inta intr rilor)
ca i cum utilizatorul ar fi ap sat tasta TAB
Clasele
Toate propriet ile , metodele i evenimentele asociate unui obiect sunt
specificate n cadrul defini iei clasei. n plus, clasele au o serie de caracteristici
ce permit scrierea de cod care este uor de ntre inut i poate fi reutilizat.
4-79
n Visual Fox Pro clasele pot fi de tip control sau container, dup cum
se arat n lista urm toare:
Descriere
Apare la crearea unui obiect
Destroy
Error
4-80
Descriere
Tipul clasei
Clasa de baz din care provine (Form,
CommandButton, etc.)
Biblioteca de clase n care este stocat
Clasa din care a fost derivat (dac deriv dintr-o
clas de baz , ParentClass este aceeai cu
BaseClass)
Command
Exit
Subclasa
Obiect n formular
4.1
Crearea claselor
Exemplu:
Scrie i un program numit navclass.prg
*Definirea clasei NAVBUTTON
Define class Navbutton as CommandButton
Height=25
Width=25
TableAlias =' '
Procedure click
if not empty(this.TableAlias)
select (this.TableAlias)
endif
endproc
Procedure refreshform
_screen.ActiveForm.Refresh
Endproc
Enddefine
4-83
4-84
Crearea formularelor
Descriere
Valoare implicit
AutoCloseTables
Adev rat(.T.)
AutoOpenTables
Adev rat(.T.)
InitialSelectedAlias
Dac nu se
specific , n
momentul execu iei
este selectat primul
cursor ad ugat n
DataEnvironment
Butoane de op iune
Grupurile de butoane de op iune sunt containere ce cuprind butoane de
op iune. Ele permit utilizatorilor sa aleag doar una dintre op iunile puse la
dispozi ie n loc s introduc direct datele. De exemplu, aceste butoane pot fi
folosite n cazul n care dorim ca o list sa fie afiat pe ecran sau trimis c tre
o imprimant . Implicit n grupul de butoane de op iune sunt introduse dou
butoane.
Prin modificarea propriet ii ButtonCount se poate specifica num rul
de butoane dorit.
Proprietatea Value indic butonul care a fost selectat. Dac utilizatorul
alege butonul 3, atunci Value va avea valoarea 3.
Dac proprietatea ControlSource a grupului este un cmp de tip
caracter, sau dac propriet ii Value i se atribuie o valoare de tip caracter
nainte de rularea formularului, proprietatea Value este dat de titlul butonului
selectat.
Configurarea propriet ilor se poate face manual pentru tot grupul de
butoane sau pentru fiecare buton n parte din fereastra Properties, sau n
timpul execu iei, indicnd numele butonului i valoarea respectiv pentru
proprietatea dorit .
Exemplu: consider m c avem un grup de dou butoane prin setarea c rora
dorim s stabilim dac un medicament se prezint sub forma de
tablete sau fiole. Va trebui s setam proprietatea Caption a
butonului, n fereastra de propriet i sau s scriem codul asociat.
ThisForm.optgr.Button(1).Caption=Tablete
ThisForm.optgr.Button(2).Caption=Fiole
unde-ThisForm este forma activa in care se lucreaz
-Optgr este numele grupului de butoane
-Button este butonul selectat
Configurarea propriet ilor tuturor butoanelor dintr-un grup se poate
face folosind metoda SetAll a grupului.
Exemplu:
ThisForm.optgr.SetAll(Enabled,.F.,OptionButton)
va dezactiva toate butoanele din grup.
Pentru a determina care dintre butoane este selectat la un moment
dat se folosete proprietatea Value a grupului.
Butoanele de op iune pot fi folosite i pentru p strarea informa iilor ntr4-87
Descriere
Num rul de coloane din caseta list
P streaz valoarea aleas de utilizator din cadrul
listei
Indic dac utilizatorul poate selecta mai multe
elemente la un moment dat
Sursa de provenien a elementelor afiate n list
Indic tipul pentru RowSource (o valoare, o tabela,
o interogare, etc.)
Descriere
Adaug un element la o list pentru care
proprietatea RowSourceType este 0
Elimin un element dintr-o list pentru care
proprietatea RowSourceType este 0
Actualizeaz
lista
dac
valorile
din
RowSourceType s-au modificat
cu
Exemple :
Dac RowSourceType este 0, elementele listei se pot ad uga
folosind metoda AddItem
ThisForm.list1.RowSourceType=0
ThisForm.list1.AddItem(Primul element)
ThisForm.list1.AddItem(Al doilea element)
ThisForm.list1.AddItem(Al treilea element)
Metoda Remove Item permite eliminarea elementelor din list .
ThisForm.list1.RemoveItem(3) pentru eliminarea celui de al treilea element
2-Alias
6-Cimpuri
0-Nici una
1-Valori
3-Instructiune SQL
4-Interogare (qpr)
4-90
Descriere
Indic dac sunt afiate sau nu primele dou cifre ale
anului
Formateaz datele de intrare ntr-unul dintre cele 15
formate de dat predefnite
Dac este 0 permite introducerea datelor ntr-un format
mai flexibil dect cel implicit 99/99/99.
ControlSource
4-92
Descriere
Seteaz tipul de aliniere a valorilor introduse n caseta
(stnga, dreapta, centru, automat). Alinierea depinde
de tipul de dat introdus.
Cmpul tabelei sau variabila a c rei valoare este
afiat
Caseta de editare
Casetele de editare permit afiarea i editarea unui text provenit din
cmpuri lungi de caractere sau cmpuri memo. Aceste casete asigur saltul
automat al textului pe rndul urm tor i posibilitatea de deplasare n cadrul
textului folosind s ge ile.
Casetele de editare, ca i casetele text au propriet i ce permit lucrul cu
textul selectat i anume: SelLenght, SelStart i SelText
De exemplu, putem selecta primul cuvnt dintr-o caseta astfel:
Form1.text1.SelStart=0
Form1.text1.SelLenght= AT( ,Form1.Text1.text)-1
Cele mai importante propriet i ce pot fi configurate pentru casetele de
editare sunt :
Proprietate
AllowTabs
HideSelection
ReadOnly
ScrollBars
Descriere
Stabilete dac este permisa utilizarea tastei TAB n
caseta de editare (caz n care trebuie verificat dac se
poate trece la controlul urm tor cu CTRL+TAB)
Stabilete dac textul din caseta de editare este selectat
n mod vizibil atunci cnd caseta nu de ine focusul
Stabilete dac textul din caseta poate fi modificat sau
nu
Indic prezenta sau absenta barelor de defilare
Casetele combinate
Acest tip de caset reunete func ionalit ile casetelor de tip list i a
celor de tip text.
Ele pot fi de dou feluri: casete combinate derulante i liste derulante,
func ie de specifica ia asociata propriet ii Style a controlului.
Cele mai importante propriet i ce pot fi configurate pentru casetele
combinate sunt :
4-93
RowSource
RowSourceType
Style
Descriere
Indic cmpul n care va fi p strat valoarea aleas
sau introdus de utilizator
Num rul maxim de elemente afiate n list
Tipul valorilor ce pot fi introduse
Indic dac controlul ncearc s g seasc un
element din list care s corespund cu literele deja
introduse
Sursa datelor din list
Indic tipul sursei casetei combinate. Valorile sunt
similare cu cele de la caseta tip list
Indica dac caseta este o caset combinat derulant
sau list derulant .
Exemplu :
Dorim s ad ugam noi valori la elementele afiate ntr-o caset
combinat cu list derulant . La evenimentul Valid vom scrie
urm toarea secven a de cod care, nainte de ad ugarea
elementului, s verifice dac acesta nu exist deja n list .
Elexista =.F. (presupunem ca valoarea nu exist )
For I=1 to This.ListCount
If This.List(i)= This.Text
Elexista=.T.
Exit
Endif
Endfor
If !Elexista
This.AddItem (This.text)
Endif
Casetele de incrementare/decrementare (Spinner)
Se folosesc pentru a permite utilizatorilor s introduc valori dintr-o
plaj anterior stabilit .
Intervalul de valori se specific
prin setarea propriet ilor
KeyboardHighValue i SpinnerHighValue (valoarea maxim posibil ) i
KeyboardLowValue i SpinnerLowValue (valoarea minim posibil ).
4-94
Buton de comanda
Grup de butoane de comanda
Butoanele de comanda permit executarea unor ac iuni. De obicei codul
asociat ac iunii este specificat n evenimentul Click.
Cele mai importante propriet i ce pot fi configurate pentru butoanele de
comanda sunt :
Proprietate
Cancel
Caption
DisablePicture
DownPicture
Enabled
Picture
Descriere
Indic dac se execut sau nu codul asociat
evenimentului Click la ap sarea tastei ESC
Textul afiat pe buton
Fiierul de tip imagine (bmp) afiat la dezactivarea
butonului
Fiierul de tip imagine (bmp) afiat la activarea
butonului
Dac butonul poate fi selectat sau nu
Fiierul de tip imagine (bmp) afiat pe buton
4-95
Descriere
Num rul de butoane din grup
Tipul de fundal (transparent sau opac)
Controlul imagine
Permite afiarea imaginilor stocate ntr-un fiier de tip bmp pe un
formular.
Propriet ile acestui control pot fi schimbate prin cod n timpul execu iei
astfel nct imaginea poate fi diferit de la un caz la altul.
Cele mai importante propriet i ce pot fi configurate pentru controlul
imagine sunt :
Proprietate
Picture
BorderStyle
Stretch
Descriere
Imaginea (fiierul bitmap) ataat
Exist sau nu chenar vizibil
0-Clip - por iunile imaginii ce dep esc dimensiunile
controlului nu sunt afiate
1-Isometric sunt p strate dimensiunile originale ale imaginii
2- Stretch imaginea este scalat
corespunz tor
dimensiunilor controlului
Controlul etichet
Difer de caseta text prin urm toarele : nu are surs de date, nu poate fi
editat direct din interiorul s u, nu se poate ajunge la el prin ap sarea tastei
TAB. Propriet ile Caption i Visible pot fi modificate prin program.
Cele mai importante propriet i ce pot fi configurate pentru controlul
etichet sunt :
4-96
Descriere
Textul afiat drept etichet
Dac dimensiunea etichetei este ajustata func ie de cea a
textului din Caption
Dac eticheta este opac sau transparent
Dac textul afiat continu pe mai multe rnduri
Descriere
Valoare cuprins ntre 0 (unghi de 90 grade) i 99
(cerc sau oval)
Modelul de umplere al formei geometrice
Dac forma este plan sau tridimensional . Are
efect doar pentru Curvature=0
Cele mai importante propriet i ce pot fi configurate pentru controlul linie sunt :
Proprietate
BorderWidth
LineSlant
Descriere
Grosimea liniei n pixeli
Direc ia liniei n cazul n care nu este orizontal sau
vertical (valorile valabile pot fi / sau \)
LinkMaster
RecordSource
RecordSourceType
Descriere
Cheia extern a tabelei fiu care este legat de cheia
primar a tabelei p rinte
Num rul de coloane: Dac este -1 grila va avea
attea coloane cte cmpuri exist n sursa de
nregistr ri
Tabela p rinte a nregistr rilor fiu afiate n gril
Datele ce vor fi afiate n gril
Provenien a datelor din gril (tabel , alias, etc)
Descriere
Datele ce vor fi afiate n coloan (cmp din tabele)
Dac este .T. controalele grilei sunt afiate doar
cnd celula respectivei coloane este selectat
Stabilete care dintre controalele grilei este activ
Cadre de pagina
Un cadru de pagin este un obiect container ce poate con ine mai multe
pagini. La rndul lor, paginile pot con ine controale.
Cele mai importante propriet i ce pot fi configurate pentru cadrele de
pagin sunt :
Proprietate
Tabs
TabStyle
PageCount
4-98
Descriere
Indic dac fiele paginilor sunt vizibile sau nu
Indic dac foile sunt toate de aceeai dimensiune
i dac toate mpreun au l imea cadrului de
pagin
Num rul de pagini din cadrul de pagin
Generatorul de rapoarte
Banda detaliu
Banda subsol pagin
pe ultima pagin
a raportului, o
4-100
dorim sau nu
selec ie obiecte
Etichet
Cmp
Elemente
geometrice
Imagine
4-101
i nregistr rile
deschiderea automat
4-102
o variabil a raportului.
Un cmp din raport se caracterizeaz prin :
Sursa de date;
Start group on new page when less than -ncepe grupul pe pagin
nou cnd spa iul r mas pe pagina curent este mai mic dect
valoarea indicat de proiectantul raportului.
Rularea unui raport
Comanda folosit este :
REPO FORM <numeraport>
Pentru previzualizarea raportului
REPO FORM <numeraport> PREVIEW
Pentru trimiterea listei direct la imprimant :
REPO FORM <numeraport> TO PRINT
Pentru salvarea listei direct ntr-un fiier de tip.txt
REPO FORM <numefisier.txt> to <numefisier>
Dac se dorete suprimarea afi rii listei pe ecran se va ad uga clauza
Noconsole. De obicei comanda de rulare a raportului se introduce n metoda
Click a butonului numit de exemplu Rulare Raport din programul de raportare.
Programe de raportare
n general, acelai raport poate fi folosit pentru mai multe tipuri de liste,
datele de raportare diferind n func ie de anumite variabile ce pot fi setate.
De exemplu, dac se dorete raportare unei situa ii a vnz rilor de
medicamente dintr-o farmacie, se pot specifica o serie de parametri cum ar fi :
anul, luna, intervalul (data de nceput i cea de sfrit), categoria de produse,
etc. Etapele ce trebuiesc parcurse pentru realizarea raportului sunt urm toarele:
4-104
Constructorul de meniuri
After Noul meniu va fi pozi ionat dup op iunea din meniul sistem
aleas din lista derulant .
Pot fi specificate secven e de cod care s fie executate la apari ia unor
evenimente i care vor fi scrise n zona Procedure sau n fereastra deschis
prin ap sarea butonului Edit.
4-105
Prima coloan con ine butonul de schimbare a pozi iei op iunii - prin
tragerea cu mouse-ul ea poate fi deplasat n sus sau jos.
n coloana Prompt se introduce textul explicativ al op iunii, text ca va fi
afiat ca bar de meniu (ex : Ad ugare).
Coloana Results cuprinde o list derulant ce con ine op iunile
descrise mai jos, fiec reia dintre ele asociindu-se codul scris n coloana a patra,
i anume :
4-106
scrierea caracterelor \< naintea unora dintre caracterele din irul din
coloana Prompt determina ca acel caracter s fie folosit ca o tasta
rapid de accesare a op iunii. Caracterul va ap rea ca fiind subliniat.
scrierea caracteruli \ naintea textului din coloana Prompt determin ca
op iunea respectiv s fie dezactivat , ea ap rnd pe ecran n culori
terse.
scrierea caracterelor \- n locul textului din coloana Prompt determin
ca linia de meniu s fie considerat ca o bar delimitatoare ntre mai
multe grupuri de op iuni ale aceluiai submeniu.
4-107
Constructorul de proiecte
Proiectele reprezint nglobarea elementelor unui sistem informatic ntrun tot unitar. Proiectul este o facilitate pus la dispozi ia proiectan ilor de
sisteme informatice, cu ajutorul c reia se poate ine cu uurin a evidenta tuturor
componentelor unui sistem, cum ar fi baze de date, tabele, vederi, programe,
forme, meniuri, rapoarte, interog ri, etc.
Se recomand folosirea proiectelor n momentul n care sistemul
informatic ce urmeaz a fi proiectat va con ine un num r mare de elemente. n
acest caz se va crea mai nti proiectul, iar n carul lui se vor defini, pe rnd,
toate elementele necesare. Toate opera iile ce se efectueaz asupra unui
element din cadrul proiectului se vor face din interiorul gestionarului de proiecte
astfel nct proiectul s fie n permanenta actualizat.
Proiectul este un fiier cu extensia.pjx.
Crearea unui proiect se face cu comanda:
MODIFY PROJECT <numeproiect>
Dac
proiectul exist ,
acesta va fi deschis, dac
nu se va crea sau din
meniul File, op iunea New
Project i se ac ioneaz
butonul New File. Tipurile
de elemente ce pot fi
incluse ntr-un proiect
sunt: baze de date, tabele
libere, interog ri, forme,
rapoarte,
etichete,
biblioteci
de
clase,
programe, biblioteci API,
aplica ii, meniuri, fiiere text, alte tipuri de fiiere.
Fereastra ce se deschide la pornirea generatorului de proiecte arat ca
n figura de mai sus i con ine mai multe pagini corespunz toare grup rii logice
a elementelor componente.
Ad ugarea de noi elemente la un proiect se face astfel: se activeaz
pagina proiectului n care va fi inclus respectivul element i se selecteaz din
4-108
4-109
4.7
Exerciii:
4-110
5-112
SQL*Plus
Recunoate instruc iuni SQL i le trimite la
server
Este o interfa proprietate Oracle pentru
executarea instruc iunilor SQL
Nu permite manipularea valorilor n baze
de date
Este permis o singur comand pe linie
care nu este stocat n bufferul SQL
Are caracterul (-) pentru continuarea unei
comenzi dac aceasta nu ncape pe o
singur linie
Nu are nevoie de caractere de terminare.
Se executa imediat
Pot fi abreviate
Folosete comenzi pentru format ri
Scop
Afecteaz comportamentul general al instruc iunilor SQL
pentru sesiunea respectiv
Formateaz rezultatele interog rii
Salveaz , nc rc i ruleaz fiiere de script
Trimite instruc iuni SQL din bufferul SQL la serverul Oracle
Modifica instruc iuni SQL in buffer
Permite crearea i trimiterea variabilelor la instruc iuni SQL,
afiarea variabilelor i listarea mesajelor pe ecran
Are diferite comenzi pentru conectarea la baza de date,
manipularea mediului SQL*Plus i afiarea coloanelor
5-113
se lanseaz
Sqlplus [username[/password[@database]]]
unde
username = numele utilizatorului din baza de date
password = parola de conectare la baza de date
@database = irul de conectare la baza de date
NOT : Pentru a nu deconspira parola, se introduce numele
utilizatorului i apoi la prompterul Password se introduce parola i irul
de conectare.
5.2
SAVE filename
GET filename
START filename
@ filename
la fel ca START
ED[IT]
ED[IT] filename
5-114
EXIT
5.3
Instruciuni SQL
Extragere de date
SELECT
Limbajul de manipulare a datelor (DML Data Manipulation Language)
(introduce rnduri noi, le terge pe cele nedorite i le actualizeaz pe cele
existente deja n tabele)
INSERT
UPDATE
DELETE
Limbajul de definire a datelor (DDL- Data Definition Language) (seteaz ,
schimb sau terge structuri de date din tabele )
CREATE
ALTER
DROP
RENAME
TRUNCATE
Controlul tranzac iilor (gestioneaz schimb rile f cute de instruc iunile DML;
actualiz rile efectuate asupra datelor pot fi grupate mpreuna in tranzac ii
logice)
COMMIT
ROLLBACK
SAVEPOINT
Limbajul de control al datelor (DCL- Data Control Language) (acord sau
retrage drepturi de acces asupra bazelor de date Oracle i a utilizatorilor s i)
GRANT
REVOKE
Oracle SQL este compatibil cu standardele acceptate de industrie.
Comitetele de standardizare acceptate de industrie sunt ANSI (Institutul
American pentru Standarde) i ISO (Organiza ia Interna ionala pentru
Standarde). Att ANSI cat i ISO au acceptat SQL ca limbajul standard pentru
baze de date rela ionale.
5-115
5-116
Instruc iunile SQL pot fi scrise cu litere mari sau mici, n afar
cazurile indicate;
de
Instruc iunile SQL pot fi introduse pe una sau mai multe linii;
Cuvintele cheie nu pot fi abreviate sau desp r ite pe linii diferite;
De obicei clauzele sunt plasate pe linii separate pentru a fi lizibile;
De obicei cuvintele cheie sunt introduse cu majuscule. Toate celelalte
cuvinte, cum ar fi numele de tabele i coloane sunt introduse cu litere
mici. Aceasta este doar o conven ie de NOT re, nu o regula.
n cadrul SQL*Plus, instruc iunile SQL sunt introduse de la prompterul
SQL, iar urm toarele linii sunt numerotate. Acesta este un buffer SQL.
Doar o singura instruc iune poate fi adus la un moment dat din buffer.
Executarea instruc iunilor SQL se face urmnd regulile:
5-117
Obiective:
Descriere
Table
View
Reprezentare logic
tabele.
Sequence
Index
Synonym
O baza de date Oracle poate con ine structuri de date multiple. Fiecare
structur trebuie definit la proiectarea bazei de date, astfel nct sa poat fi
creat n momentul construirii bazei de date.
5-118
5-119
5.6
5-120
5-121
Toate tabelele din dic ionarul de date sunt proprietatea utilizatorului SYS
i sunt accesate rar de c tre utilizatori pentru c informa iile pe care acestea le
con in sunt greu de n eles. De aceea, n mod obinuit, utilizatorii acceseaz
vederile din dic ionarul de date pentru c informa iile sunt prezentate ntr-o
forma uor de n eles.
Informa iile stocate n dic ionarul de date con in:
numele utilizatorilor bazei Oracle i drepturile acestora ;
obiectele bazei de date numele lor, constrngerile i informa ii
legate de audit.
n dic ionarul de date exist patru categorii de view-uri, fiecare dintre ele
avnd un prefix distinct ce reflect scopul n care poate fi folosit.
USER_View - con in informa ii despre obiectele aflate n
proprietatea userului.
ALL_View - con in informa ii despre toate tipurile de tabel
(obiecte tabel i tabele rela ionale) accesibile utilizatorului.
DBA_ View - Aceste view-uri sunt restric ionate, ele putnd fi
accesate doar de cei care au rolul de DataBase Administrator.
V$ - Aceste view-uri sunt view-uri cu performan e dinamice,
performan e ale serverului de baze de date, memorie i bloc ri.
5.8
Tipuri de date
Tipul de data
Descriere
VARCHAR2(size)
CHAR(size)
NUMBER(p,s)
DATE
LONG
CLOB
Dat de pn la 4 gigabytes.
RAW(size)
LONG RAW
BLOB
BFILE
la 2
NOT
5-124
5-125
5-126
5-127
5-128
Noua
coloa
na
JOB_
ID
tabela dept30
DEPT30
EMPLOYEE_ID FIRST_NAME LAST_NAME SALARY HIRE_DATE JOB_ID
----------- -------------------- ------------------------- ---------- ------------------------------------------------------114
Den Raphaely 11000 07-DEC-94 PU_MAN
115
Alexander Khoo 3100 18-MAY-95 PU_CLERK
116
Shelli Baida 2900 24-DEC-97 PU_CLERK
117
Sigal Tobias 2800 24-JUL-97 PU_CLERK
118
Guy Himuro 2600 15-NOV-98 PU_CLERK
Observa ii:
Observa ii:
Pute i folosi op iunea SET UNUSED pentru a marca una sau mai multe
coloane ca fiind nefolosite.
Pute i folosi op iunea DROP UNUSED COLUMNS pentru a terge
coloanele marcate ca fiind nefolosite.
ALTER TABLE table SET UNUSED (column);
sau
ALTER TABLE table SET UNUSED COLUMN (column);
ALTER TABLE table DROP UNUSED COLUMNS;
Op iunea SET UNUSED marcheaz una sau mai multe coloane ca fiind
nefolosite astfel nct ele s poat fi terse atunci cnd resursele sistemului
devin critice. Prin specificarea acestei clauze nu se terg efectiv coloanele din
fiecare rnd ci ele sunt tratate ca i cum ar fi terse. Dup ce coloana a fost
marcat ca fiind nefolosit ea nu poate fi accesat , comanda SELECT nu va
returna date din acest tip de coloan iar comanda DESCRIBE nu va afia
5-130
EXEMPLU
SQL> DROP TABLE dept30;
Table dropped.
Comanda DROP TABLE terge defini ia unei tabele din dic ionarul de
date Oracle. Cnd se aplic comanda DROP unei tabele, baza de date pierde
toate nregistr rile din tabel , mpreun cu indecii asocia i acesteia. Comanda
este ireversibil.
5-131
Observa ii:
EXEMPLU
SQL> RENAME departments TO departments_new;
Table renamed.
5-132
5.14
Includerea constrngerilor
Ce fac constrngerile ?
NOT NULL
UNIQUE KEY
PRIMARY KEY
FOREIGN KEY
CHECK
5-133
Descriere
NOT NULL
UNIQUE Key
PRIMARY KEY
FOREIGN KEY
CHECK
[table_constraint] [,]);
5-134
table
numele tabelei
DEFAULT expr
column
numele coloanei
datatype
column_constraint
table_constraint
Exemplu:
CREATE TABLE employees(
Employee_id number(6),
First_name varchar2(20),
Descriere
Column
Table
column ,
[CONSTRAINT constraint_name] constraint_type
(column, ),
5-135
constraint_type
FIRST_NAME
COMMIS
SION_P
CT
7839
KING
10
7698
BLAKE
30
7782
CLARK
10
7566
JONES
20
DEPARTMENT_ID
Constrngere
NOT NULL
(nici o nregistrare nu
poate con ine o
valoare NULL pe
aceasta coloana)
Absen a constrngerii
NOT NULL (orice
nregistrare poate
con ine null pentru
aceasta coloan )
Constrngere
NOT NULL
5-136
Nume dat de
sistem
Nume dat de
utilizator
LAST_NAME
100
King
SKING
101
Kochhar
NKOCHHAR
102
De Haan
LDEHAAN
103
Hunold
AHUNOLD
INSERT INTO
208
Smith
LSMITH
209
Smith
LSMITH
PERMIS
Nu este permis
exista deja
5-138
5.18
DEPARTMENT
PRIMARY
KEY
cu o valoare
DEPARTMENT _ID
DEPARTMENT_NAME
MANAGER_ID
10
Administration
200
20
Marketing
201
EMPLOYEES
EMPLOYEE_ID
LAST_NAME
DEPARTMENT _ID
100
King
90
101
Kochhar
90
102
De Haan
90
103
Hunold
60
200
Ford
201
Ford
60
FOREIGN
KEY
Nu este permis
9 nu exista
Observa ii:
poate fi definit
la nivel de
5-140
Constrngerea CHECK
5-141
constraint
type
column
5-142
unde:
table
column
constraint
Aten ie:
Cnd se terge o constrngere de integritate, aceasta nu mai este
folosita de c tre Oracle Server i nu mai este disponibila n
dic ionarul de date.
5.22 Dezactivarea constrngerilor
Executarea clauzei DISABLE din func ia ALTER TABLE pentru a
dezactiva o constrngere de integritate.
5-143
table
constraint
dezactiveaz
constrngerile
de
integritate
folosind
Un index de tip unic sau de tip cheie primar este automat creat dac se
activeaz constrngerile UNIQUE sau PRIMARY KEY.
table
5-144
Aten ie:
Daca se activeaz o constrngere, constrngerea este aplicat tuturor
datelor din tabel . Toate datele din tabel trebuie sa ndeplineasc
condi iile din constrngere.
Vizualizarea constrngerilor
Vizualizarea constrngerilor se poate face prin interogarea tabelei
USER_CONSTRAINTS pentru a putea afla toate numele i defini iile
constrngerilor.
5-145
5-146
5.24 Exerciii
1. Crea i tabelul DEPT bazat pe structura din tabelul urm tor. Salva i
instruc iunea n scriptul p1.sql , executa i scriptul i verifica i.
Column Name
Id
Name
Datatype
Number
Varchar2
Length
25
ID
LAST_NAME
FIRST_NAME
DEPT_ID
Datatype
Number
Varchar2
Varchar2
Number
Length
25
25
5-147
C
P
EMP_ID_PK
EMP_DEPT_ID_FK
OBJECT_TYPE
DEPT
TABLE
DEPT_ID_PK
INDEX
EMP
TABLE
EMP_ID_PK
INDEX
5-148
Descriere
Adunare
Sc dere
nmul ire
mp r ire
Exemplu:
SELECT last_name, salary, salary+300 FROM employees;
n exemplul dat s-a folosit operatorul adunare pentru a m ri salariile cu
300$ pentru to i angaja ii. Se afieaz noua coloan SALARY+300 . n urma
adun rii coloana rezultat (SALARY+300) nu este o coloan nou n tabela
EMPLOYEES; aceasta este vizibil doar la afiarea rezultatelor. Implicit,
6-149
pentru a specifica ordinea n care operatorii sa fie folosi i. n exemplul dat sunt
afiate numele, salariul i compensa ia anual a salaria ilor. Aceasta este
formata din salariul lunar plus o prima, totul nmul it cu 12. Datorit
parantezelor, adunarea are prioritate fa de nmul ire.
Definirea valorii nule (null vallue)
Valoarea null este nedisponibil , neatribuit , necunoscut
inaplicabil .
Valoarea nul nu este aceeai cu zero sau spa iu.
sau
Exemplu:
SELECT last_name, job_id,salary,commission_pct
FROM employees;
6-151
Exemplu:
SELECT last_name, 12*salary*commission_pct
FROM employees;
Dac o coloan dintr-o expresie aritmetic con ine valoarea null,
rezultatul este null. De exemplu, dac ncerca i s executa i o mp r ire la zero,
ob ine i o eroare. Oricum, dac mp r i i un num r la valoarea null, rezultatul
este null sau necunoscut.
6-152
6-153
Operatorul de concatenare
iruri de caractere
Un literal este un caracter, o expresie sau un num r inclus n
lista SELECT;
Valorile literale pentru datele calendaristice i caractere trebuie
incluse ntre ghilimele simple;
Fiecare ir de caractere este afiat odat pentru fiecare rnd
ntors.
Exemplu:
SELECT last_name || is a ||job_id as Employee Details
FROM employees;
6-155
n exemplul urm tor, numele i salariul fiec rui angajat este concatenat
cu un literal pentru a da rndurilor mai mult n eles.
SELECT last_name ||:1 Month salary = ||salary Monthly
FROM employees;
Rnduri duplicate
Implicit, interog rile afieaz
duplicate.
Exemplu:
SELECT department_id FROM employees;
6-156
6.4
6-157
Exemplu:
DESCRIBE EMPLOYEES
Descriere
NUMBER(p,s)
VARCHAR2(s)
DATE
CHAR(s)
6.5
DEPARTMENT
_ID
EMPLOYEE_ID
LAST_NAME
JOB_ID
100
King
AD_PRES
90
101
Kochhar
AD_VP
90
102
De Haan
AD_VP
90
103
Hunold
IT_PROG
90
returneaz
to i angaja ii
din
departamentul
90
60
EMPLOYEES
EMPLOYEE_ID
DEPARTMENT_ID
LAST_NAME
JOB_ID
100
King
AD_PRES
90
101
Kochhar
AD_VP
90
102
De Haan
AD_VP
90
6.6
Clauza WHERE
n sintaxa:
WHERE
restric ioneaz interogarea la liniile ce ndeplinesc condi ia.
condition
e compus din nume de coloane, expresii, constante i
operatori de compara ie.
Clauza WHERE urmeaz dup clauza FROM
Pute i reduce num rul de linii returnate de o interogare folosind clauza
WHERE.
O clauza WHERE con ine o condi ie ce trebuie ndeplinit i urmeaz
imediat dup o clauza FROM.
Clauza WHERE poate compara valorile din coloane, valori literale,
expresii aritmetice sau func ii. Clauza WHERE e compus din trei elemente ;
Numele coloanei;
Operatorul de compara ie;
Nume de coloana, constant sau list de valori.
6-159
Exemplu:
SELECT employee_id, last_name, first_name, department_id
FROM employees WHERE department_id=90;
6-160
Semnifica ie
Egal cu
Mai mare dect
Mai mare sau egal
Mai mic dect
Mai mic sau egal
Diferit de
Diferit de
dou
Sintaxa:
WHERE expresie operator valoare
Exemplu:
WHERE hiredate=01-JAN-95
WHERE sal>=1500
WHERE ename=SMITH
Folosirea operatorilor de compara ie
SELECT last_name, salary
FROM employees
WHERE salary<=3000;
n exemplul de mai sus SELECT-ul returneaz numele i salariul din
tabela EMPLOYEES acolo unde salariul angajatului este mai mic sau egal cu
3000. Cele dou
valori sunt luate din coloanele SALARY respectiv
LAST_NAME ale tabelei EMPLOYEES.
6-161
Semnifica ie
BETWEEN AND
IN(lista)
LIKE
IS NULL
Operatorul BETWEEN
Operatorul BETWEEN se folosete pentru afiarea valorilor cuprinse ntrun interval.
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500;
Limita
Limita
Inferioar
superioar
Folosind operatorul BETWEEN liniile afiate vor avea valori cuprinse n
intervalul cuprins ntre limita inferioar i limita superioar .
Valorile specificate cu operatorul BETWEEN sunt inclusive. Prima data
trebuie specificat limita inferioar .
SELECT-ul de mai sus returneaz liniile din tabela EMPLOYEES pentru
to i angaja ii cal c ror salariu este cuprins ntre 2500 i 3500.
Folosirea operatorului IN la testarea valorilor dintr-o list .
SELECT employee_id,last_name, salary,manager_id
FROM employees
WHERE manager_id IN (100,101,201);
Exemplul de mai sus afieaz num rul, numele, salariul i num rul
managerului pentru to i angaja ii ai c ror manageri au num rul 100,101 sau
201.
6-162
6-163
Simbol
%
Semnifica ie
Reprezint orice secven a de dou sau mai multe caractere
6-164
6.8
Operator
Operatori logici
Semnifica ie
AND
OR
NOT
6-165
n exemplul de mai sus ambele condi ii trebuie sa fie adev rate pentru a fi
selectat vreo nregistrare. De acea va fi selectat doar angajatul pentru care
numele codului func iei ncepe cu MAN i care ctig mai mult de 10000.
Toate c ut rile de tip caracter sunt case-sensitiv. Nu va fi returnat nici o linie
dac MAN nu este scris cu majuscule. irurile tip caracter trebuiesc incluse
ntre apostrof.
Tabela de adev r a operatorului AND
AND
TRUE
FALSE
UNKNOWN
TRUE
TRUE
FALSE
UNKNOWN
FALSE
FALSE
FALSE
FALSE
UNKNOWN
UNKNOWN
FALSE
UNKNOWN
Folosirea operatorului OR
Operatorul OR cere ca doar una din condi ii sa fie adev rat .
SELECT employee_id, last_name,job_id,salary
FROM EMPLOYEES
WHERE salary>=10000 OR job_id LIKE %MAN%;
n exemplul de mai sus oricare din condi ii poate fi adev rat pentru a fi
selectat vreo nregistrare. De acea un angajat pentru care numele codului
func iei ncepe cu MAN sau ctiga mai mult de 10000 va fi selectat.
6-166
TRUE
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
UNKNOWN
UNKNOWN
TRUE
UNKNOWN
UNKNOWN
6-167
TRUE
FALSE
FALSE
TRUE
UNKNOWN
UNKNOWN
Operator
To i operatorii de compara ie
Operatori de concatenare
Condi ii de comparare
IS [NOT] NULL, LIKE, [NOT] IN
[NOT] BETWEEN
NOT
AND
OR
Clauza ORDER BY
ORDER BY
ASC
DESC
Dac nu este folosit clauza ORDER BY ordinea sort rii este nedefinit i este
posibil ca Serverul Oracle s nu afieze liniile n aceeai ordine, pentru aceeai
interogare, de dou ori. Folosi i clauza ORDER BY pentru a afia liniile ntr-o
ordine specific .
6-169
6-170
6-171
6.10 Exerciii
6-173
Func ii de un
singur rnd
Exista dou tipuri distincte de func ii:
Func ii de un singur rnd
Func ii de mai multe rnduri
7-174
Func ii de mai
multe rnduri
unde:
Manipuleaz articole;
Ac ioneaz asupra fiec rui rnd rezultat din interogare ;
ntorc un singur rezultat pentru fiecare rnd;
Pot modifica tipuri de date;
Pot fi imbricate.
nume_funcie (coloana | expresie,
[arg1, arg2, ] )
nume_func ie
coloana
expresie
arg1, arg2,
Func iile de un singur rnd sunt utilizate pentru a manipula date. Ele
accept unul sau mai multe argumente i ntorc o singur valoare pentru fiecare
rnd rezultat din interogare. O func ie poate avea ca argument unul din
urm toarele:
o constanta furnizat de utilizator;
o variabil ;
o denumire de coloan ;
o expresie.
Caracteristici ale func iilor de un singur rnd
7-175
Numere
Funcii de un
singur rnd
Data calendaristic
Conversie
Func ii de conversie a
caracterelor din litere
mari in litere mici.
LOWER
UPPER
INITCAP
7-176
Func ii de manipulare a
caracterelor.
CONCAT
SUBSTR
LENGTH
INSTR
LPAD,RPAD
TRIM
REPLACE
Scop
CONCAT(expresie coloana1,
(expresie coloana2)
LENGTH(expresie coloana)
INSTR(expresie coloana,m)
TRIM
LENGTH(leading|trailing|both,
trim_character, trim_source)
7-177
Func ie
Rezultat
sql course
SQL COURSE
Sql Course
Clauza WHERE din prima instruc iune SQL specific numele angajatului
ca fiind higgins. Din moment ce toate informa iile din tabela EMPLOYEES sunt
memorate ca fiind scrise cu capitalizare, numele higgins (scris cu litere mici)
nu poate fi g sit i ca urmare nu se afieaz nimic.
Clauza WHERE din cea de-a doua instruc iune SQL face mai nti
conversia numelui memorat n tabela n litere mici i compar rezultatul ob inut
cu numele higgins. n acest caz ambii termeni din compara ie sunt scrii cu
litere mici i deci, de aceasta dat , se pot selecta informa iile necesare din
tabel . Clauza WHERE mai poate fi scris ca n exemplul de mai jos, efectul
instruc iunii fiind acelai. WHERE (last_name)=Higgins
Numele angajatului din partea dreapta a compara iei este scris cu
capitalizare adic aa cum apare n tabela. Pentru a afia numele cu prima
litera convertit n litera mare iar restul n litere mici utiliza i func ia INITCAP.
Func ii pentru manipulat caractere
FUNCTIE
CONCAT (Good,String)
SUBSTR (String,1,3)
LENGTH (String)
INSTR (String,r)
LPAD (salary,10,*)
REZULTAT
GoodString
Str
6
3
******5000
RPAD
7-180
TRUNC (coloana |
expresie, n)
MOD (m,n)
Scop
Rotunjete coloana, expresia sau valoarea la un num r
cu n pozi ii la partea zecimal . Dac n este omis
num rul rezultat din conversie nu are parte zecimal .
Dac n este negativ este rotunjit num rul din partea
stnga a punctului zecimal.
Trunchiaz coloana, expresia sau valoarea la un num r
cu n pozi ii la partea zecimal . Dac n este omis
num rul rezultat din conversie nu are parte zecimal .
Dac n este negativ este trunchiat num rul din partea
stnga a punctului zecimal ctre zero.
ntoarce restul mp r irii dintre m i n.
7-182
Opera ie
data + num r
Rezultat
dat
Descriere
adun un num r de zile la o dat
data num r
dat
data data
num r de zile
dat
Func ie
Descriere
MONTHS_BETWEEN
ADD_MONTHS
NEXT_DAY
LAST_DAY
Ultima zi a lunii.
ROUND
TRUNC
7-184
Dac data1 este mai trzie dect data2 atunci rezultatul este pozitiv.
Dac data2 este mai trzie dect data1 atunci rezultatul este
negativ. Partea nentreaga a rezultatului reprezint o parte din lun .
01-AUG-95
ROUND (25-JUL-95,MONTH)
01-JAN-96
ROUND (25-JUL-95,YEAR)
01-JUL-95
TRUNC (25-JUL-95,MONTH
01-JAN-95
TRUNC (25-JUL-95,YEAR)
Exemplu:
Compara i datele n care s-au f cut angaj ri pentru toate persoanele care
au nceput sa lucreze n anul 1997. Afia i num rul de ordine al angajatului,
data angaj rii, i luna n care acesta a nceput sa lucreze exprimat sub forma
unui interval, folosind func iile ROUND i TRUNC.
SELECT employee_id, hire_date,
ROUND (hire_date, MONTH), TRUNC(hire_date, MONTH)
FROM employees WHERE hire_date like %97 ;
7-186
Conversie
implicita a
tipului de date
Conversie
explicita a tipului
de date
7-187
IN
NUMBER (valoare numerica)
DATE
VARCHAR2 (ir de caractere)
VARCHAR2 (ir de caractere)
IN
NUMBER (valoare numeric )
DATE (dat calendaristic )
SQL pune la dispozi ie trei func ii cu ajutorul c rora se pot face conversii
dintr-un tip de data n altul.
7-188
Func ie
TO_CHAR (numr|data
calendaristica, [fmt])
Scop
Face conversia dintr-un num r sau o dat
calendaristic ntr-un ir de caractere de
tipul VARCHAR2 respectnd formatul fmt
specificat.
TO_NUMBER (caracter)
NOT : Lista prezentat mai sus reprezint un subset din func iile disponibile
pentru conversii. Pentru mai multe detalii consultai lucrarea: Oracle
Server SQL Reference. Release 9i Conversion Function
Modelul de formatare:
Trebuie inclus intre ghilimele simple i este:
case sensitive;
Poate include orice element valid al modelului de formatare pentru
date calendaristice ;
Are un element fm care elimina spatiile albe sau zerourile
nesemnificative;
Este separat de data calendaristic prin virgul ;
Determin afiarea datei calendaristice ntr-un anumit format.
Pn acum toate datele calendaristice au fost afiate respectnd formatul
DD-MON-YY. Func ia TO_CHAR permite conversia din formatul implicit ntr-un
format specificat de dumneavoastr .
7-189
Observa ii:
YEAR
Anul n litere
MM
MONTH
Numele lunii
DY
DAY
Descriere
SCC sau CC
Secolul
Anul
Y,YYY
7-190
Anul n litere
BC sau AD
Sfertul unui an
MM
MONTH
MON
RM
WW sau W
DAY
DY
15:45:32 PM
12 of OCTOBER
fourteenth
7-191
Element
Descriere
AM sau PM
indicator de meridian
ora
MI
minute (0-59)
SS
secunde (0-59)
SSSSS
Alte formate:
Element
Descriere
/..
of the
Specifica i sufixe :
Element
Descriere
TH
SP
7-192
sa
modelul pentru
7-193
Reprezint un num r
Semnul dolar
Afieaz un punct
Descriere
Exemplu
Rezultat
999999
1234
099999
001234
Semnul dolar
$999999
$1234
L999999
FF1234
999999.99
1234.00
999,999
1,234
MI
999999MI
1234 -
PR
999999PR
<1234>
EEEE
99.999EEEE
1.234E+03
9999V99
123400
B9999.99
1234.00
7-194
Observa ii:
Server-ul Oracle afieaz semnul (#) n locul valorii numerice a c rei num r
cifre a dep it valoarea specificat prin model. Server-ul Oracle rotunjete
valoarea zecimal stocat ca o valoare cu un num r de zecimale furnizat de
ctre modelul de formatare.
Func iile TO_CHAR i TO_DATE
TO_NUMBER (char)
TO_DATE (char [, fmt ] )
Pentru a face conversia dintr-un ir de caractere ntr-un num r folosi i
func ia TO_NUMBER.
Pentru a face conversia dintr-un ir de caractere ntr-o dat calendaristic
folosi i func ia TO_DATE.
Este posibil sa ap ra o situa ie n care dori i sa face i conversia dintr-un
ir de caractere ntr-un num r sau ntr-o dat calendaristic . Pentru a realiza
aceste tipuri de conversii utiliza i func iile TO_NUMBER i TO_DATE. Modelul
dup care se face formatarea va trebui alc tuit pe baza elementelor pentru
formatare prezentate anterior.
Specificatorul fx indic potrivirea perfect dintre caracterul argument i
modelul de formatare a datei.
Punctua ia i textul dintre apostrof trebuie sa se potriveasc exact cu
modelul din clauza de formatare.
Nu pot s fie scrise blank-uri suplimentare.
Datele numerice trebuie s aib acelai num r de caractere ca i
modelul corespunz tor din format.
Exemplu: Afia i numele i data angaj rii pentru toate persoanele
care au fost angajate pe 24.05.1999.
SELECT last_name, hire_date FROM employees
WHERE hire_date = TO_DATE (May 24, 1999, fxMonth DD, YYYY);
7-195
Data specificata
1995
1995
2001
2001
27-OCT-95
1995
1995
27-OCT-17
2017
1917
27-OCT-17
2017
2017
27-OCT-95
1995
2095
Dac cele doua cifre specificate ale anului sunt:
0-49
50-99
Data ntoars se
Data ntoarsa se ncadreaz n
0ncadreaz n secolul
secolul de dinaintea celui
49
curent
curent
50
99
Formatul RR
Data ntoars se
ncadreaz n secolul
de dup secolul curent
Formatul YY
Data specificata
Formatul RR
1994
1994
2001
27-OCT-95
27-OCT-17
27-OCT-17
1995
2017
2017
7.7
Formatul
YY
1995
1917
2017
Func ii diverse
Func ia NVL
Convertete o valoare nul ntr-o valoare efectiv ;
Tipurile de date care pot fi folosite sunt: dat calendaristic ,
caracter i num r;
Tipurile de date trebuie s se potriveasc .
- NVL (comm,0)
- NVL (hire_date,01-JAN-97)
- NVL (job, No Job Yet)
7-196
Exemplul de conversie
NVL (coloana ce con ine o valoare de tip
numeric, 9)
NVL (coloana ce con ine o valoare de tip dat
calendaristic , 01-JAN-95)
NVL (coloana ce con ine o valoare de tip
caracter,Unavariable)
7-197
7-198
7-199
7-200
Expresia CASE
Expresia de tip CASE ofer facilit ile date de o structur de tip IF THEN ELSE.
CASE expr WHEN comparison_expr1 THEN
return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_expr THEN return_expr
ELSE else_expr]
END
unde: expr1 este valoarea sau expresia sursa care se compar cu expr2
expr2 este valoarea sau expresia sursa care se compar cu expr1
ntr-o expresie simpl de tip CASE serverul verific dac prima condi ie
de tip WHEN THEN este egal cu comparison_expr i ntoarce return_expr.
Dac nici una din perechile WHEN THEN nu ndeplinesc condi iile i exist o
clauz ELSE atunci Oracle ntoarce else_expr. Altfel Oracle ntoarce null.
Literalul NULL nu poate fi specificat n return_expr i else_expr. Toate
expresiile trebuie s fie de acelai tip de dat .
SELECT last_name, job_id,salary,
CASE job_id WHEN IT_PROG THEN 1.10*salary
WHEN ST_CLERK THEN 1.15*salary
WHEN SA_REP THEN 1.20*salary
ELSE salary END Revised_salary
FROM employees ;
n exemplul de mai sus m rirea de salariu se aplic diferen iat pentru
anumite categorii de func ii i anume: programatorilor cu 10%, func ionarilor cu
15% iar vnz torilor cu 20%. Pentru celelalte func ii salariul r mne
neschimbat.
7-201
Func ia DECODE
Faciliteaz simularea unor structuri de tip CASE sau IF-THEN-ELSE
DECODE(col/expression, search1, result1
[, search2, result2,...,]
[, default])
Func ia DECODE evalueaz o expresie ntr-un mod similar structurii IFTHEN-ELSE, structur folosit n multe limbaje de programare. Func ia
DECODE evalueaz expresia dup ce o compar cu fiecare valoare search.
Dac valoarea expresiei este identic cu valoarea con inut n search atunci
este ntoars valoarea result .
Dac valoarea default (implicit ) este omis , func ia va ntoarce o valoare nul
n cazul n care valoarea expresiei nu este identic cu nici o valoare search.
SELECT job_id, salary,
DECODE(job_id, 'IT_PROG', salary*1.1,
'ST_CLERK', salary *1.15,
'SA_REP', salary *1.20,
SALARY)REVISED_SALARY
FROM employees;
7-202
Func iile de un singur rnd se pot imbrica de cte ori dorim. Evaluarea lor
se face din centrul expresiei imbricate spre exteriorul acesteia. Exemplele care
urmeaz va vor demonstra flexibilitatea acestor func ii.
SELECT last_name, NVL(TO_CHAR(manager_id),'No Manager')
FROM employees WHERE manager_id IS NULL;
7-203
7.9
Exerciii
7-204
Cteodat este necesar afiarea datelor ce provin din mai multe tabele.
n exemplul de mai sus rezultatul afieaz date din dou tabele: EMPLOYEES
i DEPARTMENTS.
8-205
8.1
Definirea JOIN-urilor
n vederea afi rii de date ce provin din mai multe tabele ale bazei de
date se folosete o condi ie de join. Liniile dintr-un tabel pot fi al turate liniilor
din alt tabel conform cu valorile comune existente n coloanele corespondente,
care sunt de obicei, coloane chei primare i chei str ine.
Pentru a afia date din dou sau mai multe tabele aflate n rela ie se
scrie o condi ie simpl de tip join n clauza WHERE.
SELECT
table1.column, table2.column
FROM table1, table2
WHERE
table1.column1 = table2.column2;
Unde :
table.column - specifica tabelul i coloana de unde este extras data
table1.column1= table2.column2 - este condi ia care al tura (leag )
tabelele mpreun
Condi ia de JOIN se scrie n clauza WHERE.
Numele coloanei se prefixeaz cu numele tabelului cnd acelai
nume de coloan apare n mai mult de un tabel.
Observa ii:
8.2
Produsul Cartezian
Un produs cartezian se formeaz atunci cnd:
- o condi ie join este omis ;
- o condi ie join este invalid ;
- toate liniile din primul tabel sunt al turate la liniile din tabelul al doilea.
8-206
8-207
Equijoin
Non-equijoin
Outer join
Self join
Cross Join
Natural Join
Using Clause
Full or two-sided outer join
Arbitrary join conditions for outer join
Echi-join
8-208
8-209
8-210
Observa ie:
ntotdeauna num rul de condi ii de join scrise n clauza WHERE
trebuie sa fie cu unu mai mic dect num rul de tabele scrise n
clauza FROM. De exemplu, dac num rul tabelelor este n,
num rul condi iilor de join din clauza WHERE trebuie sa fie ,n-1.
8.4
Non-echi-join
EMPLOYEES
Last_Name
JOB_GRADES
Salary
Grade
Lowest_sal
Highest_sal
King
24000
1000
2999
Kochhar
17000
3000
5999
De Haan
17000
6000
9999
Hunold
9000
10000
14999
Ernst
8000
15000
24999
Mourgos
5800
25000
40000
8-212
8-213
Outer-join
8-214
8-215
8.6
Self Join
8-216
"MGR din tabelul WORKER este egal cu EMPNO din tabelul MANAGER"
n acest proces c utarea n tabel se execut de dou ori. Prima dat se
caut n tabel angajatul Whalen n coloana Last_name i g sete valoarea
pentru Manager_ID care este egal cu 101. A doua oar se caut n coloana
EMPLOYEE_ID pentru a g si valoarea 101 pentru care n coloana Last_name
se valoarea este Kochhar.
SELECT worker.last_name || ' works for '|| manager.last_name
FROM employees worker, employees manager
WHERE worker.manager_id = manager.employee_id;
Exemplul de mai sus al tur tabela EMPLOYEES cu ea ns i. Pentru a
simula cele doua tabele n clauze FROM se folosesc dou aliasuri, numite
WORKER i MANAGER, pentru acelai tabel, EMPLOYEES.
n acest exemplu clauza WHERE con ine join-ul care nseamn "unde
num rul managerului pentru un subaltern este identic cu num rul angajatului
pentru acel manager".
8-217
n sintax :
table1.column - tabelul i coloana de unde se extrag datele;
CROSS JOIN - returneaz produsul cartezian a celor dou tabele;
NATURAL JOIN - face un join pe cele dou tabele pe baza unei coloane
comune;
JOIN table USING - column_name execut un echi-join bazat pe coloana
specificat ;
JOIN table ON table1.column_name = table2.column_name - execut un join
bazat pe condi ia specificat n clauza ON.
8-218
Not:
8-222
8-223
8-225
Exerciii
3.
8-226
8-227
8-228
9. Crea i o interogare care afieaz numele i data angaj rii pentru lucr torii
angaja i dup data de angajare a lui Davies.
10. Afia i toate numele angaja ilor i data angaj rii mpreun cu numele
managerilor i data lor de angajare, pentru to i cei care au fost angaja i
naintea managerilor lor. Eticheta i coloanele Employee, respectiv Emp,
Hiredate, Manager, i Mgr Hiredate.
8-229
11. Crea i o interogare care afieaz numele angaja ilor i salariile indicate
prin asteriscuri. Fiecare asterisc nseamn 100 $. Sorta i datele n
ordinea descendent a salariilor. Eticheta i coloana
EMPLOYEE_AND_THEIR_SALARIES.
EMPLOYEE_AND_THEIR_SALARIES
KING
*************************************************
FORD
********************************
SCOTT
********************************
JONES
*******************************
BLAKE
******************************
CLARK
*************************
ALLEN
****************
TURNER
***************
MILLER
*************
MARTIN
************
WARD
************
ADAMS
***********
JAMES
********
SMITH
*******
14 rows selected.
8-230
Spre deosebire de func iile de un singur rnd, func iile de grup opereaz
pe seturi de rnduri pentru a da un singur rezultat unui grup. Aceste seturi pot fi
ntregul tabel sau tabelul mp r it la rndul lui n grupuri. Func iile de grup sunt
urm toarele :
AVG
COUNT
MAX
MIN
STDDEV
SUM
VARIANCE
Fiecare din func ii accept /primete un argument. Urm torul tabel
identific op iunile pe care le pute i folosi n sintax .
9-231
COUNT({*|[DISTINCT|ALL]
expr})
MAX([DISTINCT|ALL]expr)
MIN([DISTINCT|ALL]expr)
STDDEV([DISTINCT|ALL]x)
SUM([DISTINCT|ALL]n)
VARIANCE([DISTINCT|ALL]x)
SELECT
FROM
[WHERE
[ORDER BY
Descriere
Valoarea medie a lui n, ignornd valorile
nule;
Num rul de rnduri, unde expresia
evalueaz altceva dect valori nule.
Num r toate rndurile selectate folosind
*, inclusiv duplicatele i rndurile cu valori
nule;
Valoarea maximal a expresiei, ignornd
valorile nule;
Valoarea minim a expresiei, ignornd
valorile nule;
Abaterea standard a lui n, ignornd
valorile nule;
Suma valorilor lui n, ignornd valorile
nule;
Varia ia lui n, ignornd valorile nule;
coloana, funcie_de_grup(coloana)
tabela
condiie]
coloana ];
9.2
Func iile AVG sau SUM se pot folosi pentru date de tip numeric.
9-232
Func iile AVG, SUM, MIN i MAX se pot folosi pentru coloanele care pot
stoca date numerice. Exemplul de mai sus afieaz media, maximul, minimul i
suma salariilor lunare pentru to i vnz torii.
Func iile MIN i MAX se pot folosi pentru orice tip de date.
SELECT MIN(hire_date), MAX(hire_date)
FROM employees;
Exemplul urm tor afieaz numele pentru primul i ultimul angajat din
lista alfabetic a tuturor angaja ilor.
SELECT MIN(last_name), MAX(last_name)
FROM employees;
9.3
9-233
COUNT(*)
COUNT(expr)
COUNT(DISTINCT expr)
Exemplul de mai jos afieaz num rul angaja ilor din departamentul 80
care pot sa ctige un comision.
SELECT COUNT(commission_pct)
FROM employees
WHERE department_id = 80;
9.4
9-234
Toate func iile grup, cu excep ia COUNT(*), ignor valorile nule din
coloan . n exemplul de mai sus media este calculata doar pe baza rndurilor
din tabel n care coloana COMMISSION_PCT con ine o valoare valid . Media
este calculat ca sum a comisioanelor pl tite c tre to i angaja ii, mp r it la
num rul angaja ilor care primesc comision.
Func ia NVL for eaz func iile de grup s includ valori nule.
SELECT AVG(NVL(commission_pct, 0))
FROM employees;
Func ia NVL for eaz func iile grup s includ valori nule. n exemplul de
mai sus media este calculat pe baza tuturor rndurilor din tabel indiferent dac
n coloana COMMISSION_PCT sunt stocate valori nule. Media este calculat
ca un comision total pl tit tuturor angaja ilor, mp r it la num rul total al
angaja ilor companiei.
9.5
Pn acum toate func iile grup au tratat tabelul ca fiind un larg grup de
informa ii. Uneori ns tabelul trebuie mp r it n grupuri mai mici de informa ii.
9-235
Sfaturi
Dac se include o func ie de grup ntr-o clauza SELECT nu se pot
selecta rezultatele individuale dect dac coloana individual
apare n clauza GROUP BY. Dac coloana respectiv nu este
inclus n clauza Group By va fi generat un mesaj de eroare ;
Clauza WHERE exclude rndurile nainte de a formarea grupurilor.
Implicit, rndurile sunt sortate n ordinea ascendent a coloanelor
incluse n lista GROUP BY. Se poate specifica o alt ordine
folosind clauza ORDER BY.
9-236
Clauza SELECT specific coloanele care s fie afiate, adic num rul
departamentului i media tuturor salariilor din grupul specificat n clauza
GROUP BY.
Clauza FROM specific tabelul pe care baza de date trebuie s -l
acceseze: tabelul EMPLOYEES.
Clauza WHERE specific liniile ce trebuie incluse. Dac nu exist nici o
clauz WHERE, implicit toate rndurile sunt incluse.
Clauza GROUP BY specific modul de grupare pentru rnduri.
Rndurile sunt grupate dup num rul departamentului, deci func ia
AVG care este aplicat coloanei salariilor va calcula media salariilor
pentru fiecare departament.
Coloanele GROUP BY care nu sunt in lista SELECT:
SELECT AVG(salary)
FROM employees
GROUP BY department_id;
9.6
Grupuri n grupuri
Cteodat sunt necesare rezultate pentru grupuri formate din subgrupuri.
Exemplul de mai sus arat un raport care afieaz totalul salariilor ce au fost
pl tite pentru fiecare nume de func ie, din fiecare departament.
Tabelul EMPLOYEES este grupat mai nti dup
num rul
departamentului i apoi aceast grupare se detaliaz dup numele func iei. De
exemplu, doi func ionari din departamentul 20 sunt grupa i mpreun i se
afieaz un singur rezultat ( salariul total ).
9-238
9-239
9.7
9-240
Nu pute i
grupurilor.
folosi
clauza
WHERE
pentru
restric ionarea
9-241
Exemplul de mai sus afieaz num rul departamentului i salariul maxim pentru
acele departamente la care salariul minim este mai mare de 10.000 $.
Se poate folosi clauza GROUP BY f r a se folosi o func ie de grup
n lista SELECT. Dac se restric ioneaz rndurile n baza unei func ii
de grup, este obligatoriu necesar o clauza GROUP BY i o clauza
HAVING.
Exemplul de mai jos afieaz numerele departamentelor i salariul
mediu la acele departamente la care salariul minim este mai mare
de 10.000 $.
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
HAVING max(salary)>10000;
9-243
9.9
9-247
Exemplu:
SELECT department_id, job_id, SUM(salary)
FROM employees WHERE department_id < 60
GROUP BY CUBE (department_id, job_id);
n exemplul de mai sus rezultatul interog rii se interpreteaz astfel:
Salariul total pentru fiecare func ie din cadrul departamentului (pentru acele
departamente ce au ID-ul mai mic de 50) este afiat de clauza GROUP BY
(eticheta 1);
Salariul total pentru acele departamente ce au ID-ul mai mic de 50 (eticheta
2);
Salariul total pentru fiecare func ie indiferent de departament (eticheta 3);
Salariul total pentru acele departamente ce au ID-ul mai mic de 50, indiferent
EXEMPLU:
SELECT department_id DEPTID, job_id JOB, SUM(salary),
FROM employees
WHERE department_id < 50
GROUP BY ROLLUP(department_id, job_id);
GROUPING(department_id) GRP_DEPT,GROUPING(job_id)
GRP_JOB
o
o
o
9-251
Exemplu
SELECT department_id, job_id, manager_id,avg(salary)
FROM employees
GROUP BY GROUPING SETS
((department_id,job_id), (job_id,manager_id));
9-252
Department_ID, Job_ID;
Job_ID, Manager_ID.
Este calculat media salariilor pentru fiecare dintre aceste grupuri, iar
seturile de rezultate sunt afiate pentru fiecare grup.
n lista rezultatelor, grupul marcat cu 1 poate fi interpretat astfel:
9-253
9-254
EXEMPLU:
SELECT department_id, job_id, manager_id, SUM(salary)
FROM employees
GROUP BY ROLLUP( department_id,(job_id, manager_id));
Consider m exemplul:
SELECT department_id, job_id,manager_id, SUM(salary)
FROM employees
GROUP BY ROLLUP( department_id,job_id, manager_id);
Interogarea presupune calcularea de c tre serverul Oracle Server a
valorilor pentru urm toarelor grupuri :
1. (department_id, job_id, manager_id);
2. (department_id, job_id);
3. (department_id);
4. ( ).
9-255
9-257
Se calculeaz salariul total pentru fiecare grup, exemplul afind urm toarele :
Salariul total pentru fiecare department, job ID, manager (eticheta 1);
Salariul total pentru fiecare department, manager ID (eticheta 2);
Salariul total pentru fiecare department, job ID (eticheta 3);
Salariul total pentru fiecare department (eticheta 4).
Pentru o n elegere mai uoar , detaliile pentru departamentul 10 sunt
eviden iate n figura de mai sus.
9-258
9.17 Exerciii
5. Modifica i p4.sql astfel nct s afieze aceleai informa ii pentru fiecare tip
de meserie. Salva i modific rile in p5.sql.
9-259
8. Scrie i o interogare care s afieze diferen a dintre salariile cele mai mari i
cele mai mici. Eticheta i coloana Diferen a.
9. Afia i num rul managerului i salariul celui mai prost pl tit angajat pentru
acel manager. Exclude i pe cei care nu au manager. Exclude i grupurile
care au salariul minim mai mic dect 1600$. Sorta i rezultatele in ordine
descresc toare dup salar.
9-260
11. Scrie i o interogare care afieaz num rul total de angajai i num rul total
de angaja i care au fost angaja i n anii 1995,1996,1997 i 1998. Eticheta i
coloanele corespunz tor. Vezi exemplul.
12. Afia i meseria, suma salariilor pentru meseria respectiv din cadrul
departamentelor 20, 50, 80, 90 precum i salariul total pentru acea meserie
pentru toate departamentele. Eticheta i coloanele corespunz tor. Vezi
exemplul.
9-261
9-262
9-263
17. Scrie i o interogare, folosind GROUPING SETS, pentru a afia urm toarele
grupuri:
- department_id, manager_id, job_id;
- department_id, job_id;
- manager_id, job_id.
Interogarea trebuie s
grupuri.
9-264
Capitolul 10
Subinterogari
Obiective:
n acest capitol se vor studia caracteristici mai avansate ale instruc iunii
SELECT cum ar fi scrierea subinterogarilor n clauza WHERE a altei instruc iuni
SQL n scopul ob inerii de valori bazate pe o valoare necunoscut a unei
condi ii.
Cerere principal
Ce angajat are un salariu mai mare dect Jones ?
Subinterogare
Care este salariul lui Jones ?
10.1
10-266
Tipuri de subinterog ri
10-267
Single-row : cereri care returneaz doar un rnd din instruc iunea SELECT
intern ;
Multiple-row : cereri care returneaz mai mult de un rnd din instruc iunea
SELECT intern .
10.3
Subinterogari single-row
Afiarea angaja ilor care lucreaz pe acelai post (au aceeai meserie) ca
i angajatul care are num rul de marc 141.
Executarea unei subinterog ri single-row:
10-268
10-269
10-270
10-271
10.6
Subinterogari multiple-row
Semnifica ie
Egal cu oricare din elementele listei
Compar valoarea cu fiecare valoare returnat de
subinterogare luat separat
Compar valoarea cu toate valorile returnate de
subinterogare
10-272
10.7
10.8
10-273
SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id NOT IN
(SELECT mgr.manager_id FROM employees mgr);
Comanda SQL de mai sus afieaz to i angaja ii care nu au nici un
subordonat. Logic, acesta interogare SQL ar trebui sa returneze 12 linii dar nu
se returneaz nici una. Una din valorile returnate de interogare este o valoare
de null i prin urmare ntreaga interogare nu returneaz nici o linie.
Motivul este c toate aceste condi ii care compar rezultatul unei valori
cu null transform rezultatul n null. Cnd exist valori de null n rezultatul
subinterog rii, nu folosi i operatorul NOT IN.
Operatorul NOT IN este echivalent cu <>ALL. Trebuie s ave i n vedere
c valorile nulle ale rezultatului subinterog rii nu vor constitui o problem dac
folosi i operatorul IN. Operatorul IN este echivalent cu operatorul ANY. De
exemplu, pentru afiarea angaja ilor care nu au subordona i, folosi i urm toarea
exprimare SQL:
SELECT last_name FROM employees
WHERE employee_id NOT IN
(SELECT manager_id FROM employees
WHERE manager_id IS NOT NULL);
10-274
10-275
Compara ie nepereche
10-278
10-279
10-280
10-281
10-282
10-283
pentru
10-284
10-285
pe o rela ie
10-286
Interog ri ierarhice
SELECT [LEVEL], column, expr...
FROM table
[WHERE condition(s)]
[START WITH condition(s)]
[CONNECT BY PRIOR condition(s)];
WHERE condition:
expr comparison_operator expr
10-287
LEVEL
FROM table
WHERE
Condition
START WITH
10-288
ncepe i
cu
King
care
este
10-289
Pute i afia n mod explicit rangul sau nivelul unui rnd n ierarhie folosind
pseudocolana LEVEL.
Aceasta va face ca raportul dvs. s fie mult mai explicit. Locurile unde
10-291
LPAD(last_name,LENGTH(last_name)+(LEVEL*2)-2,'_') definete
formatul de afiare.
10-292
T ierea ramurilor
Folosi i clauza WHERE
pentru a elimina un nod.
CONNECT BY PRIOR
employee_id = manager_id
AND last_name != Higgins'
10-293
10-294
10.20
Exerci ii
c rui nume con ine litera u . Salva i instruc iunea ntr-un fiier denumit
pq3.sql.
4.
6. Afia i num rul departamentului, numele i func ia tuturor angaja ilor din
departamentul numit Executive.
10-296
10. Scrie i o interogare care s afieze numele, data angaj rii i salariul pentru
to i angaja ii care au acelai salariu i comision ca al lui Kochhar, exclusiv
Kochhar.
11. Scrie i o interogare care s afieze angaja ii care ctig un salariu mai
mare ca al oric rui angajat cu JOB_ID = 'SA_MAN'. Afia i salariile ordonat
de la cel mai mare la cel mai mic.
12. Afia i coloanele employee_ ID, last_ name i department_ID pentru acei
angaja i care locuiesc n orae a c ror nume ncepe cu T.
13. Scrie i o interogare care s afieze to i angaja ii care ctig mai mult dect
salariul mediu din departamentul lor. Afia i coloanele last_name, salary,
department_ID i media salarial pentru departament. Ordona i datele dup
salariul mediu. Folosi i alias-uri pentru coloanele returnate de interogare,
dup exemplul de mai jos.
10-297
mai
16. Scrie i o interogare care s afieze numele angaja ilor care au unul sau mai
10-298
aib
10-299
10-300
10-301
Obiective:
Descrierea fiec rei comenzi DML(Data Manipulation Language);
Inserarea de nregistr ri ntr-un tabel (INSERT);
Actualizarea nregistr rilor dintr-un tabel (UPDATE);
tergerea nregistr rilor dintr-un tabel (DELETE):
Al turarea rndurilor unei tabele (MERGE):
Controlul tranzac iilor (COMMIT, SAVEPOINT i ROLLBACK).
O comand DML este executat atunci cnd:
- Se ad uga noi nregistr ri n tabel ;
- Se modifica nregistr rile existente ntr-o tabel ;
- Se terg nregistr ri existente dintr-o tabel .
O tranzac ie const
unitate logic de lucru.
11-302
11-303
11-304
INSERT care s
permit
utilizatorului s
11-305
de utilizator n
11-307
UPDATE table
SET column = value [, column = value,...]
[WHERE condition];
n sintaxa de mai sus:
tabel
este numele tabelului;
coloana este numele coloanei din tabelul n care se face modificarea;
Valoare este noua valoare sau o subinterogare ce produce noua valoare pentru
coloana ce se modific ;
Condiie identific nregistr rile care trebuie modificate i este alc tuita din
expresii, nume de coloane, constante, subinterog ri i operatori de
comparare.
Folosind comanda UPDATE se pot modifica simultan valorile pentru unul
sau mai multe rnduri din tabel .
Pute i avea confirmarea execut rii opera iei de modificare prin interogarea
11-308
11-309
11-310
11-314
Tranzacii
Tranzac iile constau dintr-un grup format din urm toarele comenzi:
Descriere
Limbaj de manipulare a
datelor (DML)
Limbaj de definire a
datelor (DDL)
Limbaj de control al
datelor (DCL)
UPDATE
INSERT
DELETE
Savepoint A
Savepoint B
ROLLBACK to Savepoint B
ROLLBACK to Savepoint A
ROLLBACK
11-317
Comanda
Descriere
COMMIT
SAVEPOINT nume
ROLLBACK
[TO SAVEPOINT
name]
Circumstan e
Commit automat
Rollback automat
11-318
11-322
partajat
(share lock)
Descriere
mpiedic partajarea unei resurse.
Prima tranzac ie care blocheaz resursa n mod exclusiv
este singura tranzac ie care poate modifica resursa pn
cnd protec ia exclusiv este anulat .
Permite partajarea resursei.
Mai mul i utilizatori care citesc datele le pot folosi n comun
prin crearea unor protec ii partajate ce mpiedic accesul
concurent pentru scriere (care necesit o protec ie
exclusiv ).
Mai multe tranzac ii pot ob ine protec ii partajate pentru
aceeai resurs .
11-326
11-327
11-329
Pivoting INSERT
Pivotarea este opera ia prin care crea i o transformare astfel nct fiecare
nregistrare din orice ir de intrare, cum ar fi o baz de date care nu este
rela ionat , trebuie s fie convertit n mai multe nregistr ri pentru o baz de
date rela ionat . Pentru a solu iona acesta problem trebuie s construi i o
transformare astfel nct fiecare nregistrare din tabela original din baza de
date nerela ionat , SALES_SOURCE_DATA, s fie convertit n cinci
nregistr ri pentru tabela SALES_INFO din baza de date rela ionat . Aceast
opera ie este numit de obicei pivoting.
INSERT ALL
INTO sales_info VALUES (EMPLOYEE_id,week_id,sales_MON)
INTO sales_info VALUES (EMPLOYEE_id,week_id,sales_TUE)
INTO sales_info VALUES (EMPLOYEE_id,week_id,sales_WED)
INTO sales_info VALUES
(EMPLOYEE_id,week_id,sales_THUR)
INTO sales_info VALUES (EMPLOYEE_id,week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
sales_WED, sales_THUR,sales_FRI
FROM sales_source_data;
DESC SALES_SOURCE_DATA
11-331
11-332
11.9 Exerciii
LAST_NAME
Patel
Dancs
Biri
Newman
Ropeburn
FIRST_NAME
Ralph
Betty
Ben
Chad
Audry
USERID
rpatel
bdancs
bbiri
cnewman
aropebur
SALARY
795
860
1100
750
1550
terge i
modifica i
date
tabelul
a anula i INSERT-ul
mgr_history
special_sal
11-334
11-335
11-336
Capitolul 12
Anexa 1
Tabela DEPARTMENTS
DESCRIBE departments
12-337
Tabela EMPLOYEES
DESCRIBE employees
12-338
Tabela JOBS
DESCRIBE jobs
12-339
Tabela JOB_GRADES
DESCRIBE job_grades
12-340
Tabela JOB_HISTORY
DESCRIBE job_history
12-341
Tabela REGIONS
DESCRIBE regions
12-342
Bibliografie
12-343