Documente Academic
Documente Profesional
Documente Cultură
Baze de Date
Baze de Date
fiier
tabel(relaie)
nregistrare
tuplu (linie)
cmp
atribut(coloan)
Tabelul 1.1.
valori
domeniu valori
BDR
logic i fizic
conceptual, logic i fizic
mare
simplificat prin model
n dicionarul BDR
Tabelul 1.2.
FIIERE
fizic
logic i fizic
mic
complicat
n programe.
cheie, la date.
Proiectarea modulelor funcionale ine cont de concepia general a
BDR, precum i de schemele proiectate anterior. n acest sens, se
proiecteaz fluxul informaional, modulele de ncrcare i manipulare a
datelor, interfeele specializate, integrarea elementelor proiectate cu
organizarea i funcionarea BDR.
3) Realizarea componentelor logice. Componentele logice ale unei
BD sunt programele de aplicaie dezvoltate, n cea mai mare parte, n
SGBD-ul ales. Programele se realizeaz conform modulelor funcionale
proiectate n etapa anterioar. Componentele logice in cont de ieiri, intrri,
prelucrri i coleciile de date. n paralel cu dezvoltarea programelor de
aplicaii se ntocmesc i documentaiile diferite (tehnic, de exploatare, de
prezentare).
4) Punerea n funciune i exploatarea. Se testeaz funciile BDR
mai nti cu date de test, apoi cu date reale. Se ncarc datele n BDR i se
efectueaz procedurile de manipulare, de ctre beneficiar cu asistena
proiectantului. Se definitiveaz documentaiile aplicaiei. Se intr n
exploatare curent de ctre beneficiar conform documentaiiei.
5) Dezvoltarea sistemului. Imediat dup darea n exploatare a BDR,
n mod continuu, pot exista factori perturbatori care genereaz schimbri n
BDR. Factorii pot fi: organizatorici, datorai progresului tehnic, rezultai din
cerinele noi ale beneficiarului, din schimbarea metodologiilor etc.
1.3. DEFINIREA SISTEMULUI DE GESTIUNE A BAZELOR DE
DATE RELAIONALE (SGBDR)
Teoria relaional, foarte bine pus la punct ntr-un domeniu de
cercetare distinct, a dat o fundamentare solid realizrii de SGBD-uri
performante. La sfritul anilor 80 i apoi n anii 90 au aprut, n special o
dat cu ptrunderea n mas a microcalculatoarelor, numeroase SGBDR-uri.
Aceasta a nsemnat o evoluie de la SGBD-urile de generaia nti
(arborescente i reea) spre cele de generaia a doua (relaionale). Aceast
evoluie s-a materializat, n principal n: oferirea de limbaje de interogare
neprocedurale, mbuntirea integritii i securitii datelor, optimizarea i
simplificarea acceselor.
Teoria relaional este un ansamblu de concepte, metode i
instrumente care a dat o fundamentare riguroas realizrii de SGBDR
performante.
Paralela ntre conceptele utilizate n evoluia organizrii datelor n
memoria extern pn la sistemele relaionale este prezentata in tabelul 1.3:
Tabelul 1.3
FIIERE
TEORIA BD
Fiier
nregistrare
Colecie de date
Familie de
caracteristici
Caracteristic
Domeniu de valori
Cmp
Valoare
TEORIA
RELAIONAL
Relaie
Tuplu
Tabela
Linie
Atribut
Domeniu
Coloan
Domeniu
SGBDR
CAPITOLUL 2.
FACILITATILE SI ARHITECTURA
SISTEMULUI ORACLE
2.1. EVOLUIA I FACILITILE SISTEMULUI ORACLE
Oracle este un sistem de gestiune a bazelor de date complet
relaional, extins, cu faciliti din tehnologia orientat obiect (OO). Sistemul
Oracle este realizat de firma Oracle Corporation care a fost nfiinat n
anul 1977 n SUA - California i acum este cel mai mare furnizor de
software de gestiunea datelor. Acesta este operaional pe toat gama de
calculatoare (micro, mini, mainframe) sub diverse sisteme de operare.
Prima versiune de SGBD Oracle a fost realizat la sfritul anilor '70
respectnd teoria relaional. n cadrul sistemului a fost implementat de la
nceput limbajul relaional SQL pe care l-a dezvoltat ulterior fa de
versiunea standard rezultnd SQL*Plus.
ncepnd cu versiunea 5.0 SGBD Oracle are urmtoarele faciliti
suplimentare: funcioneaz n arhitectura client/server; are limbaj
procedural propriu PL/SQL; are precompilatoare ca interfa cu limbajele
universale.
n iunie 1997 s-a lansat SGBD Oracle versiunea 8.0, inclusiv n
Romnia, care a marcat o nou generaie de baze de date Oracle deoarece
iniiaz trecerea de la arhitectura client/server la arhitectura NC (Network
Computing), are o mare deschidere, are optimizri performante i pune
accent mai mare pe analiz (modelare-funcionalitate) fa de programare
(codificare).
n noiembrie 1998 s-a lansat SGBD Oracle 8i ca sistem de baze de
date pe Internet. Aceast versiune are urmtoarele caracteristici:
Este reproiectat arhitectural n mod fundamental i se ncadreaz
n tendina de trecere de la arhitectura client/server la arhitectura
NC;
Permite dezvoltarea unei baze de date de orice dimensiune, n
mod centralizat sau distribuit;
Are faciliti de salvare/restaurare automate i inteligente;
Permite partiionarea integral pentru tabele i indeci;
Are mesagerie integral, prin comunicarea ntre aplicaii i
procesare offline (chiar dac aplicaiile nu sunt conectate);
Prelucrarea paralel pentru: replicare, cereri de regsire,
actualizare;
Ofer faciliti din tehnologia OO, prin care se permite definirea
Segmentul este format din mai multe extensii. Segmentele pot fi:
segmente de date (pentru memorarea datelor unei tabele), segmente de
indeci, segmente roollback (folosite pentru memorarea informaiilor
necesare pentru recuperarea datelor unei baze de date sau anularea unei
tranzacii) i segmente temporare (folosite pentru prelucrarea instruciunilor
SQL).
2) Structura fizic este definit de un set de fiiere specifice
sistemului de operare pe care rezid SGBD Oracle, folosite pentru
memorarea structurilor logice ale bazei de date i pentru pstrarea unor
informaii tehnice de control. Aceste fiiere sunt: fiiere de date (Data files),
fiiere Redo log (Redo Log files) i fiiere de control (Control files).
Fiierele de date (Data files) conin datele unei baze de date, sub
forma structurilor logice ale acesteia (tabele, vederi, secvene, proceduri
memorate, sinonime, indeci, clustere i link-uri de baz de date). Fiierele
de date au urmtoarele caracteristici: un fiier de date poate aparine unei
singure baze de date, pot fi extinse automat n anumite momente specifice
ale funcionrii bazei de date, unul sau mai multe fiiere de date pot memora
o tabel spaiu.
Fiierele Redo Log (Redo Log files) sunt folosite pentru memorarea
tuturor schimbrilor de date produse asupra unei baze de date, astfel nct
dac se ntmpl o cdere de curent s se previn distrugerea datelor bazei
de date. Se pot folosi simultan mai multe fiiere de acest fel care s rezide
pe discuri diferite.
Fiierele de control (Control files) sunt folosite pentru memorarea
informaiilor necesare pentru controlul structurii fizice a unei baze de date
(numele bazei de date, numele i locaiile fiierelor de date, data creerii
bazei de date etc).
B. Instana Oracle (Oracle instance) este combinaia logic dintre
structurile de memorie intern (SGA - system global area, PGA - program
global area) i procesele Oracle de baz activate la momentul pornirii unei
baze de date.
1) SGA este o regiune partajabil de memorie care conine datele i
informaiile necesare unei instane Oracle i conine:
Database Buffer Cache (conine blocurile de date cele mai recent
utilizate pentru a reduce utilizarea discului);
Redo Log Buffer (conine datele despre blocurile modificate);
Shared Pool (pentru prelucrarea instruciunilor SQL);
Cursorii (Statement Handles or Cursores) folosii pentru
manipularea instruciunilor unui limbaj gazd folosind facilitatea
Oracle Call Interface.
Tabelul 2.1.
Returneaz informaii despre spaiul
nefolosit dintr-un obiect (tabel, index sau
cluster)
Returneaz informaii despre blocurile
libere dintr-un obiect (tabel, index sau
cluster)
Permite recuperarea memoriei nefolosite
dup efectuarea operaiilor care cer o
cantitate mare de memorie (>100k)
Permite sql_trace ntr-o sesiune identificat
prin numrul serial i SID (valori luate din
V$SESSION).
Cheia primar este un atribut care are valori distincte. Deci, fiecare
linie se identific printr-o valoare distinct. Dou sau mai multe atribute
care pot fi chei primare se numesc chei candidate.
Coloana tabelei este format din valorile pe care le ia atributul n
liniile tabelei respective.
Rndul/tuplul/linia este format din valorile coloanelor ce se refer la
o entitate a tabelei.
Baza de date relaional este un ansamblu de tabele normalizate,
grupate n jurul unui subiect, n principiu, bine definit. ntr-o baz de date
relaional, entitile i legturile sunt transpuse n tabele.
Viziunea este o tabela logic i reprezint o fereastr la date, dintruna sau mai multe tabele.
Pentru ca accesul la date sa se fac mai rapid, se utilizeaz
indexarea. Un index reprezint o cheie pe una sau mai multe coloane.
Indexarea este dinamic deoarece se pot adaug sau terge indeci oricnd,
fr ca datele memorate sau aplicaiile scrise s fie afectate.
Pentru realizarea unor operaii sau pentru a utiliza n cereri nume
mai scurte, se pot defini sinonime ale unor nume de tabele sau viziuni.
Un cluster reprezint o anumit modalitate de grupare a rndurilor
uneia sau mai multor tabele. Aceast grupare mrete viteza de execuie a
unor operaii consumatoare de timp.
Comanda este o instruciune emis din SQL*Plus ctre o baz de
date Oracle.
Blocul reprezint un grup de instruciuni SQL i PL/SQL.
Cererea este o comanda SQL (SELECT) care regsete date din
baza de date. Rezultatul cererii l formeaz datele regsite din baza de date.
Raportul este rezultatul cererii formatat cu ajutorul comenzilor
SQL*Plus.
Numele unei baze de date, al unei tabele, coloane sau variabile
utilizator trebuie s aib lungimea ntre 1 i 30 caractere. Un nume nu poate
conine apostrofuri. Cu att mai puin, un nume utilizat ntr-o comand nu va
fi introdus ntre apostrofuri. Literele mici i mari sunt echivalente (nu se
face distincia ntre literele mici i mari). Un nume trebuie s nceap cu o
liter, s conin numai anumite caractere (A-Z, 0-9, $, #, @, -), s nu
duplice numele unui alt obiect de acelai tip i s difere de un cuvnt
rezervat ORACLE.
Cuvintele rezervate nu pot fi utilizate ca nume de tabele, coloane sau
orice alte obiecte definite de utilizator. Ele sunt prezentate n Anexa 1.
Rolul funciei
Returneaz valoarea absolut
a numrului n.
ACOS(n)
ASIN(n)
Arc sinus de n.
ATAN
Arc tangent de n.
Exemple
SELECT ABS(-15) "Absolut"
FROM DUAL;
Absolut
---------15
SELECT COS(.3)"Arc_Cosinus"
FROM DUAL;
Arc cosinus
---------1.26610367
SELECT ASIN(.3) "Arc_Sinus"
FROM DUAL;
Arc_Sinus
---------.304692654
SELECT ATAN(.3) "Arc_Tangent"
FROM DUAL;
ATAN2
CEIL(n)
COS(n)
Cosinus de n.
COSH(n)
Cosinus hiperbolic de n.
EXP(n)
FLOOR(n)
LN(n)
Returneaz logaritmul
natural de n, unde n > 0.
LOG(m,n)
MOD(m,n)
Arc_Tangent
---------.291456794
SELECT ATAN2(.3,.2) Arc_Tangent2"
FROM DUAL;
Arc_Tangent2
-----------.982793723
SELECT CEIL(15.7) "NUMR"
FROM DUAL;
NUMR
---------16
SELECT COS(180 * 3.14/180)
"Cosinus de 180 grade"
FROM DUAL;
Cosinus de 180 grade
---------------------1
SELECT COSH(0) "Cosinus
hiperbolic de 0"
FROM DUAL;
Cosinus hiperbolic de 0
---------------------1
SELECT EXP(4) "e la puterea 4"
FROM DUAL;
e la puterea 4
-----------------54.59815
SELECT FLOOR(15.7) "Floor"
FROM DUAL;
Floor
---------15
SELECT LN(95) "Logaritm natural de
95"
FROM DUAL;
Logaritm natural de 95
----------------4.55387689
SELECT LOG(10,100) "Log n baza
10 de 100"
FROM DUAL;
Log n baza 10 de 100
-----------------2
SELECT MOD(11,4) "Modulo 4"
POWER (n,m)
ROUND
(n[,m])
SIGN(n)
SIN(n)
SINH
Returneaz n rotunjit la un
numr de m yecimale. Dac
m este omis se elimin
zecimalele, iar dac este
negativ se face rotunjirea
numrului din dreapta
virgulei zecimale, dup
regula: m = -1 rotunjire la
nivel de zeci, m = -2 rotunjire
la nivel de sute i aa mai
departe.
FROM DUAL;
Modulo 4
---------3 2.
de n.
SQRT(n)
TAN(n)
Returneaz tangent de n.
TANH(n)
Returneaz tangent
hiperbolic de n.
TRUNC (n,m)
1"
FROM DUAL;
Sinus hiperbolic de 1
-------------------1.17520119
SELECT SQRT(26) "Rdcin ptrat"
FROM DUAL;
Rdcin ptrat
----------5.09901951
SELECT TAN(135 * 3.14/180)
"Tangent de 135 grade"
FROM DUAL;
Tangent de 135 grade
----------------------1
SELECT TANH(.5) " Tangent
hiperbolic de 5"
FROM DUAL;
Tangent hiperbolic de 5
-----------------------.462117157
SELECT TRUNC(15.79,-1) "Trunc"
FROM DUAL;
Trunc
---------10
Rolul funciei
Returneaz caracterul care
are valoarea binar n.
Exemple
SELECT CHR(67)||CHR(65)||CHR(84)
"Caractere"
FROM DUAL;
Caractere
CONCAT
(c1,c2)
INITCAP
('ir')
LOWER ('ir')
LPAD
('c1',n,'c2')
--CAT
SELECT CONCAT( CONCAT (nume, '
este '), funcie) "Funcie"
FROM tab1
WHERE codfuncie = 7000;
Funcie
----------------Popescu este PROGRAMATOR
SELECT INITCAP('cuvnt1 cuvnt2')
"Litere mari"
FROM DUAL;
Litere mari
--------Cuvnt1 Cuvnt2
SELECT LOWER('BUCURETI')
"Liter mic"
FROM DUAL;
Liter mic.
-------------------bucureti
SELECT LPAD('Page.1',10,'*.')
"LPAD exemplu"
FROM DUAL;
LPAD exemplu
--------------*.*.*Pag.1
REPLACE
('c1','c2','c3')
RPAD
('c1',n[,'c2'])
RTRIM
('c1','c2')
SUBSTR
('c1',m[,n])
IONESCU
MARINESCU
POPESCU
OLGA
Not: Numele care ncep cu o liter mai
mare dect 'O' nu se vor afia.
SELECT
RTRIM('BUCURETIyxXxy','xy')
"RTRIM exemplu"
FROM DUAL;
RTRIM exemplu
------------BUCURETIyxX
SELECT SUBSTR
('ABCDEFG',3.1,4) Subir1"
FROM DUAL;
Subir1
---CDEF
SELECT SUBSTR('ABCDEFG',-5,4)
"Subir2"
FROM DUAL;
Subir2
---CDEF
TRANSLATE
('c1','c2','c3')
UPPER('c1')
Rolul funciei
Returneaz
valoarea
zecimal
a
primului
caracter din irul 'c1'.
INSTR ('c1','c2'
[,n[,m]])
LENGTH
Exemple
SELECT ASCII('Q')
FROM DUAL;
ASCII('Q')
---------81
SELECT INSTR ('CORPORATE
FLOOR','OR', 3, 2) "INSTR"
FROM DUAL;
INSTR
---------14
SELECT INSTR ('CORPORATE
FLOOR', 'OR', -3, 2) "INSTR
INVERS" FROM DUAL;
INSTR INVERS
----------------2
SELECT LENGTH('BUCURETI')
caractere
caractere
CHAR.
a irului de
'c1' de tip
"LUNGIME IR"
FROM DUAL;
LUNGIME IR
-------------------9
Rolul funciei
Returneaz data
d plus un numr
de luni egal cu
n.
LAST_DAY (d)
Returneaz data
ultimei zile din
lun.
MONTHS_
BETWEEN (d1, d2)
Returneaz
numrul de luni
dintre datele d1
Exemple
Dac n coloana data1 aferent numelui
'POPESCU' din tabela tab1 avem data 17
septembrie2005 cu comanda de mai jos se va
ob'ine data 17 octombrie 2005.
SELECT TO_CHAR
(ADD_MONTHS(data1,1), 'DD-MON-YYYY')
"Luna urmtoare"
FROM tab1
WHERE nume = 'POPESCU';
Luna urmtoare
----------17-OCT-2005
Cu aceast funcie se poate determina numrul
zilelor rmase din luna curent.
SELECT SYSDATE, LAST_DAY(SYSDATE)
"ULTIMA",LAST_DAY(SYSDATE) - SYSDATE
"ZILE RMASE"
FROM DUAL;
SYSDATE
ULTIMA
ZILE RMASE
-------------------------23-SEP-05 30-SEP-05
7
SELECT
TO_CHAR(ADD_MONTHS(LAST_DAY(data1),
5), 'DD-MON-YYYY') "Cinci luni"
FROM tab1
WHERE nume = 'POPESCU';
Cinci luni
----------28-FEB-2006
SELECT MONTHS_BETWEEN
(TO_DATE('02-09-2005','MM-DD-YYYY'),
TO_DATE('01-08-2005','MM-DD-YYYY') )
ROUND (d[,fmt])
SYSDATE
TRUNC (d,[fmt])
i d2. Dac d1
i d2 sunt
acelei zile din
lun sau sunt
ultimele zile din
lun rezultatul
este un numr
ntreg, altfel
Oracle
calculeaz
fraciuni din
lun bazat pe o
lun cu 31 zile.
Returneaz data
primei zile a
sptmnii dup
ziua definit de
irul 'c1' i care
este dup data
d.
Returneaz data
d rotunjit la
unitatea de timp
specificat de
ctre formatul
fmt, conform
specificaiilor
de la sfritul
tabelului.
Returneaz data
i timpul curent.
Returneaz data
d fr timp
trunchiat la o
unitate
specificat de
formatul fmt, iar
dac este absent
se face
trunchierea la
ziua cea mai
"Luni"
FROM DUAL;
Luni
---------1.03225806
SELECT TO_CHAR(SYSDATE,
'MM-DD-YYYY HH24:MI:SS') "Data i timpul
curent"
FROM DUAL;
Data i timpul curent
------------------27-09-2005 20:27:11
SELECT TRUNC(TO_DATE
('27-SEP-05','DD-MON-YY'), 'YEAR')
"Anul nou"
FROM DUAL;
Anul nou
--------01-JAN-05
apropiat.
Formatul fmt utilizat de funciile ROUND i TRUNC
Formatul fmt
Semnificaia formatului fmt
CC, SCC
Se rotunjete la nivel de secol (primii doi digii ai anului
exprimat pe patru digii + 1)
Exemplu: 1898 se rotujete la 1998.
SYYYY, YYYY, YEAR SYEAR, Se rotunjete la nivelul 01 ianuarie a anului din data care
YYY, YY, Y
se rotunjete.
Exemplu: 27-sep-05 se rotunje;te la 01-jan-05.
Q
Rotunjire la nivel de trimestru (Se routunjete n sus la a
asesprezecea zi a lunii a doua a trimestrului).
MONTH, MON, MM, RM
Rotunjire la nivel de lun (Se routunjete n sus la a
asesprezecea zi a lunii).
HEXTOROW('c1')
RAWTOHEX(raw)
ROWIDTOCHAR
(rowid)
Semnificaia
Convertete un ir de
caractere de la un set
de caractere la alt set
de caractere. Setul
set_surs este setul de
caractere din care fac
parte caracterele
irului 'c1', iar
set_destinaie este setul
de caractere n care se
convertesc caracterele
irului 'c1'.
Convertete irul 'c1'
care conine digii
hexazecimali la tipul de
date RAW.
Convertete digii
hexazecimali de tip
RAW la irul 'c1'.
Convertete valoarea
ROWID la o valoare de
tip VARCHAR".
Rezultatul conversiei
Exemple
SELECT CONVERT('Gro', 'US7ASCII',
'WE8HP') "Conversie"
FROM DUAL;
Conversie
---------Gross
Seturile de caractere cele mai comune
sunt: US7ASCII, WE8DEC, WE8HP,
F7DEC, WE8EBCDIC500 , WE8PC850,
WE8ISO8859P1 .
INSERT INTO tab1 (raw_column)
SELECT HEXTORAW('7D') FROM
DUAL;
SELECT ROWID
FROM tab1
WHERE ROWIDTOCHAR(ROWID)
LIKE '%Br1AAB%';
ROWID
-----------------AAAAZ6AABAAABr1AAB
TO_CHAR pentru
conversie de caractere,
are sintaxa:
TO_CHAR
(d [, fmt])
Convertete data d de
tip DATE la o valoare
de tip VARCHAR2 n
formatul specificat.
TO_CHAR pentru
conversie de numere,
are sintaxa:
TO_CHAR
(n [, fmt])
Convertete numrul n
de tip NUMBER la o
valoare de tip
VARCHAR2.
CHARTOROWID
('c1')
Convertete o valoare
de tip CHAR sau
VARCHAR2 la o
valoare de tip ROWID
TO_DATE
('c1' [, fmt ])
Convertete irul de
caractere 'c1' de tip
CHAR sau VARCHAR2
la o valoare de tip
DATE n conformitate
cu formatul fmt .
Formatul fmt pentru
datele de tip DATE este
prezentat n tabelul 3.7.
Convertete irul de
caractere 'c1' de tip
CHAR sau VARCHAR2
la o valoare numeric
de tip NUMBER n
conformitate cu
formatul fmt. Forma
acestui format este n
tabelul 3.6.
TO_NUMBER
('c1',[,fmt ])
UPDATE tab1
SET salariu = salariu +
TO_NUMBER('100.00', '9G999D99')
WHERE nume = 'ION';
Exemple
9999
0999 9990
$
B
MI
S
$999
B999
999MI
S999
D
G
,
.
RN sau rn
99D99
99G999
99,999,99
999.99
RN sau rn
Se specific
n
TO-DATE
Da
Da
Da
Da
Nu
D
DAY
DD
DDD
HH sau HH12
HH24
J
Da
Da
Da
Da
Da
Da
Da
MI
MM
MON
MONTH
PM sau P.M.
RR sau RRRR
SS
SSSS
Da
Da
Da
Da
Nu
Da
da
Da
WW
W
YYYY,YYY,YY,Y
Nu
Nu
Da
EMPTY_
[B|C]LOB()
BFILENAME
('director',
'nume_fiier')
GREATEST (expr
[,expr] ...)
Rolul funciei
Returneaz o valoare de tip
VARCHAR2 coninnd codul
tipului de date, lungimea n
baii i reprezentarea
intern a expresiei expr
return_format este codul
sistemului de numeraie n
care este reprezentat
valoarea returnat de
funcie pentru irul 'c1';
Dac se furnizeaz ca o
valoare egal cu codul
sistemului de numeraie +
1000 se returneaz i
numele sistemului de
numeraie.
start_position determin
poziia din irul 'c1' de unde
s nceap DUMP-u
length este lungimea
DUMP-ului.
Returneaz un pointer sau
locator care poate fi folosit
pentru iniializare unei
variabile de tip LOB, ntr-un
INSERT, ntr-un UPDATE
pentru iniializarea unei
coloane de tip LOB sau ca
atribut EMPTY, care
nseamn c LOB-ul a fost
iniializat dar nu a fost
populat cu date.
Returneaz un pointer sau
locator asociat cu un LOB
de tipul unui fiier binar de
pe server.
director este numele
directorului unde se afl
fiierul LOB de tip binar.
nume_fiier este numele
fiierului.
Returneaz valoarea cea
mai mare dint-o list de
valori.
Exemple
SELECT DUMP('abc', 1016)
FROM DUAL;
DUMP('ABC',1016)
----------------------------------Typ=96
Len=3 CharacterSet=WE8DEC:
61,62,63
SELECT DUMP(nume, 8, 3, 2)
"OCTAL"
FROM tab1
WHERE nume = 'SCOTT';
OCTAL
---------------------------Type=1 Len=5: 117,124 Sistemele
de numeraie sunt: 8 = sistemul
octal; 10 = sistemul zecimal; 16 =
sistemul hexazecimal; 17 =
rezultatul este returnat sub forma
de caractere singulare.
INSERT INTO lob_tab1
VALUES (EMPTY_BLOB());
UPDATE lob_tab1
SET clob_col = EMPTY_BLOB();
LEAST (expr
[,expr] ...)
UID
USER
USERENV (option)
Returneaz informaii
despre sesiune curent.
VSIZE(expr)
HARRY
SELECT
LEAST('HARRY','HARRIOT','HAR
OLD') "Mic"
FROM DUAL;
Mic
-----HAROLD
SELECT nume,
NVL(TO_CHAR(comision), 'NOT
APPLICABLE') "COMISION"
FROM tab1
WHERE codepart = 30;
NUME COMISION
---------- -----------------ALLEN 300
WARD
500
MARTIN 1400
TURNER 0
JAMES NOT APPLICABLE
Semnificaia
Returnez media celor n
valori
COUNT ({* |
[DISTINCT|ALL] expr})
Returneaz toate
rndurile cererii. Dac
avem argumentul = * se
returneaz toate
rndurile indiferent de
valoarea lor (NULL sau
NOT NULL)
MAX([DISTINCT|ALL]
expr)
MIN([DISTINCT|ALL]
expr)
Exemple
SELECT AVG(salariu) "Medie"
FROM tab1;
Media
---------2077343.21429
SELECT COUNT(*) "Total"
FROM tab1;
Total
---------18
SELECT COUNT(job) "Count"
FROM tab1;
Count
---------14
SELECT COUNT(DISTINCT
job) "Jobs"
FROM emp;
Jobs
---------5
SELECT MAX(salariu)
"Maximum"
FROM tab1;
Maximum
---------5000
SELECT MIN(data1) "Minim"
FROM tab1;
Minimum
SUM([DISTINCT|ALL] n)
--------17-DEC-80
SELECT SUM(salariu) "Total"
FROM tab1;
Total
---------29081
Exemplu:
(10, 20, 40)
('SCOTT', 'BLAKE', 'TAYLOR')
(LENGTH('MOOSE') * 57, -SQRT(144) + 72, 69)
3.5. CONDIIILE
Condiia este o combinaie de una sau mai multe expresii i
operatori logici evaluat cu una din valorile TRUE, FALSE sau
UNKNOWN. Condiiile se pot folosi n clauza WHERE a instruciunilor
SQL DELETE, SELECT i UPDATE sau ntr-una din clauzele WHERE,
START WITH, CONNECT BY sau HAVING ale instruciunii SELECT.
Exemple:
1) Expresia 1=1 este evaluat ca TRUE
2) Expresia NVL(sal, 0) + NVL(comm, 0) > 2500 adun valoarea
sal cu comm i evalueaz rezultatul dac este >= cu 2500000. Dac sal sau
comm sunt NULL se vor nlocui cu valoarea zero.
Condiiile au opt forme de prezentare.
Forma I este folosit pentru compararea unei expresii cu alt
expresie sau cu o subcerere i are sintaxa:
expresie1 = | != | <> | > | < | >= | <= expresi2 | (subcerere)
sau
list_de_expresii = | != | <> (subcerere)
Forma II este folosit pentru compararea unei expresii sau a unei
liste de expresii cu unul sau toi membrii unei liste de xepresii sau ai unei
subcereri i are sintaxa:
expresie1 = | != | <> | > | < | >= | <= ANY | SOME | ALL
list_de_expresii | (subcerere)
sau
list_de_exp = | != | <> ANY | SOME | ALL (list_expr1,
list_expr2, ) | (subcerere1,
subcerere2, . )
Forma III este folosit pentru cutarea unei expresii sau a unei liste
de expresii dac figureaz ntr-o list de expresii sau ntr-o subcerere i are
sintaxa:
expresie1 NOT IN list_de_expresii | (subcerere)
sau
list_de_exp NOT IN ( list_expr1, list_expr2, ) |
(subcerere1, subcerere2, . )
Forma IV este folosit pentru testarea existenei sau inexistenei
expresiei ntre dou limite i are sintaxa:
expresie1 NOT BETWEEN expr2 AND expr3
Forma V este folosit pentru testarea valorii NULL i are sintaxa:
expresie1 IS NOT NULL
Forma VI este folosit pentru testarea existenei unui rnd nt-o
subcerere i are sintaxa:
EXISTS ( subcerere )
Forma VII este folosit pentru testarea egalitii unei ir de caractere
cu un format anume, cu un alt ir de caracter i are sintaxa:
ir_ caracter1 NOT LIKE ir_cacrater2 ESCAPE
'caracter_de_schimbare'
Forma VIII este folosit pentru specificarea unei combinaii de mai
multe condiii i poate avea sintaxele:
NOT condiie
sau
condiie1 NOT AND | OR condiie2
3.6. DESCHIDEREA I NCHIDEREA UNEI SESIUNI DE LUCRU
SQL*PLUS
Pentru a avea acces la componentele unei baze de date (tabele, viziuni, clustere etc.), utilizatorul trebuie mai nti s se conecteze la ea. La
sfritul sau n timpul unei sesiuni SQL exist posibilitatea deconectrii de
la baza de date. O prim conectare se face atunci cnd se ncepe lucrul cu
SQL*Plus. Efectul comenzii sau utilizrii meniului sistem l constituie
deschiderea unei sesiuni de lucru sub SQL*Plus.
Comanda are urmtoarele forme sintactice:
SQLPLUS [nume-utilizator[/parol]
[@nume-baz-de-date]
[@nume-fiier]
[-SILENT]
SQLPLUS /NOLOG [-SILENT]
SQLPLUS -?
unde:
nume-utilizator i parol: sunt numele i parola unui utilizator cu drept de
acces la baza de date.
@nume-baz-de-date: este numele unei baze de date cu care se lucreaz n
reea (este alt nume dect cel al bazei de date implicite, de pe calculatorul la
care se lucreaz).
@nume-fiier: reprezint numele unui fiier de comenzi SQL care va fi fi
rulat de SQL*Plus.
SILENT: are ca efect inhibarea facilitii de afiare a tuturor informaiilor i
mesajelor furnizate de SQL*Plus
/NOLOG: lanseaz n execuie SQL*Plus dar nu face conectarea la o baz
de date.
-?: are ca efect afiarea versiunii curente a componentei SQL*Plus, dup
care returneaz controlul sistemului de operare
Dac n linia de comand se specific parola i @nume-baz-dedate atunci ntre ele nu trebuie s existe spaiu. Parola sau @nume-baz-dedate vor fi separate printr-un spaiu de @nume-fiier.
Conectarea utilizatorului la o baz de date
Dac n timpul unei sesiuni de lucru SQL*PLUS se dorete conectarea la o alt baz de date dect cea deschis iniial se poate folosi comanda
CONNECT.
Sintaxa acestei comenzi este:
CONN[ECT] [nume-utilizator[/parol]]
[@nume-baz-de-date];
unde:
nume-utilizator i parol: sunt numele unui utilizator cu drepturi de acces la
baza de date i parola unui astfel de utilizator. Chiar dac nu se specific
parola (n linia de comand este opional), ea este cerut de sistem printrun mesaj explicit. Parola introdus la mesajul sistemului va fi invizibil.
@nume-baz-de-date: se specific n cazul lucrului n reea, cnd se dorete
conectarea la o alt baz de date dect cea aflat pe calculatorul la care se
lucreaz.
Abreviaia
A text
C /old/new/
C/text
CL BUFF
Fr abreviaie
I
I text
L
L n sau n
L*
L LAST
Lmn
Funcia
Adaug text la sfritul unei linii
Schimb un text cu altul
terge textul unei linii
Cur bufferul
terge o linie
Adaug una sau mai multe linii
Adaug o linie format dintr-un text
Listeaz toate liniile din buffer
Listeaz linia n
Listeaz linia curent
Listeaz ultima linie
Listeaz liniile de la m la n
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --*/
/* &v1_col_grup = nume coloan din tabel dup valorile creia se
va face gruparea
/* &v2_tip_calc = tipul calculului: min, max, sum pentru un anumit
grup de valori numerice
/* &v3_col_calc = numele coloanei de tip numeric dup care se va
face calculul
/*&v4_nume_col_calculat = numele coloanei, n list, pe care se
vor afia valorile calculate
/* &v5_tip_sort = tipul ordonrii(sortrii), desc(descending) sau
asc(ascending)
SELECT &v1_col_grup,
&v2_tip_calc(&v3_col_calc),
&v4_nume_col_calculat
FROM pers100
GROUP BY &v1_col_grup
ORDER BY &v2_tip_calc(&v3_col_calc,) &v5_tip_sort;
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- - - - - - - - - - - --*/
Dup apelul fiierului cu comanda @calc& sistemul ne va cere
succesiv s furnizm valorile dorite pentru variabilele definite astfel:
Enter value for v1_col_grup: nume
Enter value for v2_tip_calc: min
Enter value for v3_col_calc: salariu
Enter value for v4_nume_col_calculat: MINIMUM
Enter value for v1_col_grup: nume
Enter value for v2_tip_calc: min
Enter value for v3_col_calc: salariu
Enter value for v5_tip_sort: desc
Iar rezultatul dup executare comenzii va arta ca mai jos:
NUME
MINIMUM
------------------------------ --------ionescu
3500000
petrescu
2500000
mihai
1500000
b) Substituirea variabilelor prefixate cu dou
&. Pentru
exemplificare vom crea, pornind de la fiierul de comenzi CALC&.SQL,
fiierul de comenzi CALC&&.SQL n care variabilele vor fi prefixate cu
doua caractere &, ca mai jos:
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- - - - - - - - - - - -*/
/* &&v1_col_grup = nume coloan din tabel dup valorile creia
se va face gruparea
/* &&v2_tip_calc = tipul calculului: min, max, sum pentru un
anumit grup de valori numerice
/* &&v3_col_calc = numele coloanei de tip numeric dup care se
va face calculul
/*&&v4_nume_col_calculat = numele coloanei, n list, pe care se
vor afia valorile calculate
/* &&v5_tip_sort = tipul ordonrii(sortrii), desc(descending) sau
asc(ascending) */
SELECT &&v1_col_grup,
&&v2_tip_calc(&&v3_col_calc),
&&v4_nume_col_calculat
FROM pers100
GROUP BY &&v1_col_grup
ORDER BY &&v2_tip_calc(&&v3_col_calc), &&v5_tip_sort
/* - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- - - - - - - - - - - - - - -*/
La momentul executrii fiierului de comenzi CALC&&.Sql
sistemul va cere s introducem valorile dorite pentru variabilele definite la
fel ca la apelul precedent cu deosebirea c valorile ce le vom furniza vor fi
memorate de fiecare dat astfel c indiferent de cte ori apare o variabil
pentru ea se va furniza valoarea o singur dat. Orice execuie ulterioar a
unui fiier de comenzi n care apare una din variabilele create anterior
(definite implicit ca variabile utilizator) se vor folosi aceste valori. Execuia
acestui fiier de comenzi va produce acelai rezultat ca i execuia fiierului
CALC&.SQL. Rulnd comanda DEFINE vom gsi n sistem pe lng alte
variabile utilizator i variabilele create prin execuia fiierului
CALC&&.SQL.
Exemplu:
SQL> DEFINE
DEFINE _EDITOR
= Notepad (CHAR)
DEFINE _RC
= 1 (CHAR)
DEFINE V1_COL_GRUP = nume (CHAR)
DEFINE V2_TIP_CALC = min (CHAR)
DEFINE V3_COL_CALC = salariu (CHAR)
DEFINE V4_NUME_COL_CALCULAT = minimum (CHAR)
DEFINE V5_TIP_SORT = desc (CHAR)
Dac vom dori rularea procedurii create anterior dar dnd variabilelor alte
valori, va trebui nti s tergem aceste variabile cu comanda UNDEFINE.
unde:
ON expr determin o ntrerupere cnd se schimb valoarea expresiei expr;
expr este fie o expresie care implic una sau mai multe coloane dintr-o
tabel, fie o etichet ataat unei coloane declarat in comanda SELECT
sau COLUMN.
Dac ON expr apare de mai multe ori n comand, atunci expresiile respect
"ierarhia de ntrerupere", aceasta fiind chiar ordinea n care sunt specificate
expresiile. Cnd se folosete ON expr, trebuie utilizat i clauza ORDER
BY, pentru a ordona rndurile din "ierarhia de ntrerupere*. Ordinea de
apariie a expresiilor expr n comanda BREAK ON trebuie s rte aceeai cu
cea prezent n SELECT...GRDER BY:
ON ROW determin o ntrerupere cnd se selecteaz un rnd cu SELECT.
Aceast ntrerupere este reinut la sfritul ierarhiei de
ntrerupere;
ON PAGE determin o ntrerupere la sfritul fiecrei pagini;
ON REPORT determin o ntrerupere la sfritul raportului sau cererii,
ntrerupere care este reinut la nceputul ierarhiei de ntrerupere.
SKIP determin saltul peste n linii, nainte de a se tipri linia
asociat ntreruperii respective.
PAGE sau SKIP PAGE determin saltul la o pagin nou nainte de a tipri
linia asociat respectivei ntreruperi.
NODUPLICATES determin tiprirea de spaii cnd valorile de JJS coloana
de ntrerupere sunt identice. DUPLICATES determin tiprirea valoarii
coloanei de ntrerupere n fiecare rnd selectat. Valoarea
NODUPLICATES este implicit.
Comanda BREAK fr clauze indic poziia ntreruperii curente.
Exemple:
1) S fie definit o ntrerupere generat de schimbarea valorilor coloanei
FUNCT. La apariia acestui eveniment s fie afiate dou linii vide.
SQL> BREAK ON FUNCT SKIP 2;
SQL> SELECT MARCA,NUME,CODD,
2 SALA, VENS
3 FROM SALARIAI
4 ORDER BY FUNCT;
MARCANUME
FUNCT
7000
ION ION
DIRECTOR
2550
FRINCU ION SEF DEP
1000
COMAN RADU
2500
VLAD VASILE
4000
PAUL TEFAN
3755
DORU DAN
CODD
100000
160000
130000
160000
160000
130000
SALA
45000
36000
35000
36500
35000
36500
VENS
40000
37000
2500
1500
5600
5500
1111
1680
3700
2553
3760
3770
2554
3759
3500
2650
1222
100000
130000
160000
120000
130000
130000
120000
160000
160000
120000
120000
21200
20750
27500
25000
25600
26500
26000
25700
24500
25060
20750
1000
3000
2500
400
0
2000
350
3500
2000
FUNCT
VINZATOR
VINZATOR
VINZATOR
CODD
100000
120000
120000
SALA
21200
25060
20750
MARCA NUME
2550
FRINCU ION
3500
DAN ION
1680
RADU ION
FUNCT
SEF DEP
VINZATOR
VINZATOR
CODD SALA
160000 36000
160000 24500
130000 20750
VENS CODS
1000
1000
3500
2000
VENS CODS
37000 2500
350
3000
9records selected.
B. Tiprirea titlurilor
Pentru afiarea unui titlu la sfritul sau la nceputul fiecrei pagini
se utilizeaz comanda BTITLE, respectiv TTITLE. Comanda BTITLE are
urmtoarele sintaxe:
BTI[TLE] [COL[UMN] n1 [SKlP [n]] [TAB n] [LEFT | RIGHT |
CENTER] [FORMAT char] [char | var]...;
CODP
D4
A3
A7
DENP
SCAUN
FOTOLIU
MASA
STOC
36
27
23
DATA CRT
UM
10-SEP-05
BUC
15-SEP-05
BUC
05-SEP-05
BUC
Semnatura:
STOC DATACRT
100
12-JUL-05
36
12-JUL-05
7
27-JUN-05
12
01-JUL-05
6
18-JUL-05
9
29-JUL-05
UM
MP
BUC
BUC
BUC
BUC
BUC
Cod produs
Stoc
Data
UM
100000
100000
100000
100000
100000
100000
PLACAJ 2/2
SCAUN D4
MESE 15/20
FOTOLIU A3
CANAPEA A7
BIROU C6X4
166666
144444
111111
122222
133333
155555
100
36
7
12
6
9
12-JUL-05
12-JUL-05
27-JUN-05
01-JUL-05
18-JUL-05
29-JUL-05
MP
BUC
BUC
BUC
BUC
BUC
Depozitul MOBILA/100000
3 FROM COMENZI
4 WHERE DATAL<='30- SEP-05;
SITUATIA COMENZILOR LA DATA DE 30- SEP-05
NRCOM
211111
255566
166666
27000
CODP
233333
133333
222222
375000
VALOARE
244444
144444
320000
282000
Anularea opiunilor
n vederea anulrii opiunilor se utilizeaz comanda:
CL[EAR] option
Este anulat opiunea specificat prin option, dup cum urmeaz:
BRE[AKS] anuleaz ntreruperea indicat prin comanda BREAK;
BUFF[ER] determin tergerea textului din buffer-ul curent;
COL[UMNS] anuleaz opiunile indicate n comanda COLUMN;
COMP[UTES] anuleaz opiunile indicate prin comanda
COMPUTE;
SCR[EEN] determin tergerea ecranului, iar SQL determin
tergerea buffer-ului SQL;
TIMI[NG] terge toate zonele create cu comanda TIMING.
Exemple:
1) S se anuleze ntreruperile.
SQL> CLEAR BREAKS;
2) S se anuleze definiiile de coloan.
SQL> CLEAR COLUMNS;
Descrierea coloanelor
Pentru specificarea modului de formare a unei coloane i a capului
de coloan ntr-o situaie, se utilizeaz comanda COLUMN. Sintaxa ei este:
COL[UMN] (col | expr) [ALI[AS] sinonim] CLE[AR] |
DEF[AULT]]
[COLOR
{culoare|
variabila-culoare}]
[FORMAT] format] [HEA[DING] text
[JUS[TIFY] {L[EFT | C[ENTER] | R[IGHT]] [LIKE {expr |
etichet}] [LINEAPP {LINE | MARK | BOTH}]
[NEW_VALUE variabila] [NU[LL] char] [NOPRl[NT] |
PRINT]] [OLD_VALUE variabila]
[ON | OFF]
[PATTERN {numr-de-model | variabila-model}
[WRA[PPED]! WOR[D,... WRAPPED] |
TRU[NCATED]]
...;
unde:
col sau expr au rolul de a identifica coloana sau expresia la care se refer
comanda. Comanda COLUMN trebuie s se refere la o coloan sau la o
expresie utilizat-a n comanda SELECT. Dac comanda COLUMN se refer
la o expresie, aceasta trebuie s fie specificat n acelai mod n care a fost
specificat n SELECT. De exemplu, dac n SELECT expresia este 'A.+B',
nu se poate folosi, n COLUMN, T+A'. Dac sunt selectate din tabele
diferite coloane cu acelai nume, atunci comanda COLUMN se va aplica
tuturor tabelelor ce conin acea coloan.
Clauza ALIAS pune n coresponden numele coloanelor cu sinonimul
specificat.
Clauza CLEAR are ca efect tergerea n totalitate a definiiei coloanei.
Clauza FORMAT specific formatul de apariie ai coloanei. Limea
implicit a coloanei este chiar limea coloanei definite n baza de date. Ea
poate fi schimbat cu valoarea n, folosind "FORMAT An". Limea unei
coloane numerice este implicit valoarea data de NUMWIDTH, ea putnd fi
schimbat cu ajutorul clauzei FORMAT.
Clauza HEADING definete capul coloanei, care implicit este col sau expr.
Dac textul din definirea coloanei conine spaii sau semne de punctuaie,
acestea trebuie puse ntre ghilimele. Fiecare semn "I" din text are ca efect
nceperea unei linii noi.
Clauza JUSTIFY aliniaz capul coloanei. Implicit, alinierea se face la
dreapta pentru o coloan numeric i la stnga pentru alte tipuri de coloane.
Clauza LIKE determin copierea specificaiilor altei coloane sau expresii
(specificaii deja definite prin alt comand COLUMN).
Prin folosirea clauzei NEWLINE se trece la o linie nou, nainte de a afia
valorile coloanei.
Clauzele PRINT i NOPRINT au ca efect tiprirea sau nu a coloanei.
Dac se utilizeaz clauza NULL, textul va fi afiat chiar dac conine o
valoare nul. Valoarea implicit este un ir de blancuri.
Clauzele OFF sau ON determin folosirea, respectiv nefolosirea formatului
specificaiei de ieire pentru o coloan, fr a-i afecta coninutul.
Clauza WRAPPED are ca efect scrierea pe linia urmtoare a caracterelor
care nu au ncput pe prima linie.
Clauza WORD_WRAPPED are efect asemntor cu cel al clauzei
WRAPPED, cu deosebirea c determin scrierea ntregului cuvnt pe linia
urmtoare i nu pe dou rnduri ca la WRAPPED.
Clauza TRUNC determin trunchierea valorii.
Clauza COLOR specific culoarea utilizat pentru afiarea valorilor
coloanei, ntr-o reprezentare liniar sau prin benzi. Variabila CLR n (n=l,60)
MARCA
1111
1222
NUME
AVRAM ION
BARBU DAN
2 records selected.
STOC
100
7
36
12
6
9
DATACRT
12-JUL-92
27-JUN-92
12-JUL-92
01-JUL-92
18-JUL-92
29-JUL-92
UM
MP
BUC
BUC
BUC
BUC
BUC
STOC DATACRT
7
27-JUN-05
UM
BUC
D.Realizarea de calcule
SQL*Plus permite realizarea unor calcule cu rndurile selectate din
tabele. Pentru aceasta se utilizeaz comanda COMPUTE, care are
urmtoarea sintax:
COMP[UTE] [AVG | COU[NT] | MAX[IMUM] |
MIN[IMUM] NUMBER) ISDT | SUM | VAR[IANCE}]
OF { expresiei etichet),...
ON [expresiei etichet IPAGE1 REPORT! ROW];
Semnificaia clauzelor este:
Clauza
Semnificaia
AVG
COUNT
MAXIMUM
MINIMUM
NUMBER
STD
SUM
VARIANCE
Valoare medie
Contorizare valori nule
Valoare maxim
Valoare minim
Contorizare rnduri
Abatere standard
Suma valorilor nenule
Dispersia
Dac se specific mai multe funcii, nu trebuie separate ntre ele prin
virgul.
OF precizeaz coloana sau expresia ale cror valori se vor supune
calculului. Acestea trebuie s apar n comanda SELECT, altfel comanda
COMPUTE le va ignora. Dac se dorete ca valoarea calculat s nu fie
afiat pe ecran se va utiliza clauza NON PRINT ataat coloanei
respective cu comanda SELECT.
ON specific un element care va fi utilizat ca generator de ntrerupere. El
poate fi: expresie, etichet, pagin (PAGE), raport (REPORT), linie (ROW).
De cte ori se va schimba valoarea acestuia, se va declana automat
recalcularea funciei definite de COMPUTE.
n cazul n care se d comanda fr nici o funcie, se vor afia
specificaiile de calcul definite.
Secvena de instruciuni care se va utiliza, n general, va fi:
SQL* BREAK ON expresiei
SQL> COMPUTE clauza OF expresie2 ON expresiei;
SQL> SELECT
Exemple:
1) S se editeze situaia final cu urmtorul format:
SITUAIE SUM(SALA) FUNCIE
SQL> SET PAGESIZE 22
SQL>RUN
1 SELECT SUM(SALA),FUNCT FROM SALARIAI
2* GROUP BY FUNCT
SITUAIE
SUM(SALA)
45000
179000
268560
FUNCT
DIRECTOR
SEF DEP
VINZATOR
SITUATIE
FUNCT
DIRECTOR
SEF DEP
VINZATOR
DEP
45000
0
21200
Data:
DEP
0
71500
72850
DEP
0
107500
77700
Semntura:
DEP 10
45000
0
21200
DEP 13
0
71500
72850
DEP 16
0
107500
77700
SUM(SALA)
45000
179000
268500
Data:
Semntura:
Data:
DEP 10
45000
0
21200
66200
DEP 13
0
71500
72850
144350
Semntura:
DEP 16
0
107500
77700
185200
SUM(SALA)
45000
179000
268500
Formatul
Explicaii
CHAR( mrime)
Date
DATE
Long
LONG
LONG VARCHAR
LONG ROW
Numerice NUMBER
NUMBER (mrime)
NUMBER (ntregi
zecimali)
NUMBER(*)
DECIMAL
FLOAT
INTEGER
INTEGER (mrime)
RAW
SMALLINT
RAW(mrimea)
LONGRAW
unde:
UNIQUE se refer la faptul c tabela nu va conine dou rnduri cu aceleai
valori n coloanele index (deci nu vor exista dubluri n coloana index). Dac
se omite, tabela poate conine oricte asemenea rnduri care s aib n
coloana index aceeai valoare.
ASC|DESC precizeaz ordinea n care va fi pstrat indexul: ascendent sau
descendent.
COMPRESS indic faptul c indecii pot fi comprimai, reducndu-se n
acest mod spaiul necesar memorrii acestora i mrindu-se viteza
operaiilor care folosesc indecii. Comprimarea nu permite gsirea ntr-un
index a valorii unui anumit cmp fr s acceseze tabela. NOCOMPRESS
suprim comprimarea indecilor.
SYSSORT specific faptul c procedura standard ORACLE de sortare este
folosit pentru a crea un index. NOSYSSORT este folosit pentru depanare.
ROWS specific numrul aproximativ de rnduri ce urmeaz a fi indexate.
Acest numr este utilizat pentru a optimiza sortarea n SYSSORT. Clauza
nu are efect n SQL*Plus.
PCTFREE specific, n momentul crerii indexu-lui, procentul din spaiul
pentru index ce trebuie s rmn liber pentru actualizri. Nu are efect
asupra extensiilor alocate dup crearea indexului.
Indexul creat permite creterea vitezei de acces la datele unei tabele
prin intermediul coloanei index datorit faptului c se vor cuta rndurile
corespunztoare valorilor coloanei index, fr a citi ntreaga tabel.
Deoarece indexul i tabela trebuie actualizate, introducerile, tergerile i
modificrile n cmpul de valori ale coloanei index necesit un timp mai
mare. De aceea, se recomand crearea de maxim 3 indeci pentru o tabel.
In funcie de necesiti, se pot creea i terge n mod dinamic indeci.
Indecii creai pentru o singur tabel trebuie s aib nume distincte.
Pentru tabele diferite pot fi creai indeci cu acelai nume. n momentul
tergerii acestor indeci trebuie specificat tabela din care fac parte.
Comanda de validare a unui index este VALIDATE INDEX.
Aceast comand verific integritatea indexului specificat pentru o anumit
tabel. Dac pe tabela respectiv a fost creat un singur index, al crui nume
va fi specificat n comand, atunci numele tabelei poate fi omis. Comanda
VALIDATE INDEX are sintaxa:
VALIDATE INDEX nume-index
[ON nume-tabel] [WITH LIST];
unde:
Index dropped.
4.5. CREAREA I ACTUALIZAREA TABELELOR I INDECILOR
PARTIIONAI
Partiionarea este procesul de mprire a tabelelor i indecilor
foarte mari n mai multe tabele, i respectiv indeci, mai mici numite partiii
pentru a le putea manipula mai uor.
O dat definite partiiile, instruciunile SQL pot accesa i manipula
aceste partiii n loc de a manipula ntreaga tabel sau ntregul index din care
au provenit.
Toate partiiile au aceleai atribute logice ca i tabela sau indexul din
care au provenit. De exemplu toate partiiile unei tabele au aceleai coloane
cu aceleai constrngeri de integritate ca i tabela, iar partiiile unui index
sunt construite dup aceeai coloan ca i indexul din care au provenit.
Fiecare partiie este memorat ntr-un segment propriu aflat n
aceeai tabel spaiu sau n tabele spaiu diferite. Plasarea partiiilor n tabele
spaiu diferit prezint urmtoarele avantaje semnificative:
Riscul pierderii datelor poate fi diminuat;
Salvarea i restaurarea partiiilor se poate face independent unele fa de
altele;
Se poate realiza o echilibrare a operaiilor de I/O prin maparea partiiilor
pe discuri diferite.
O partiie este definit de urmtoarele:
Numele partiiei identific n mod unic partiia n schema de obiecte a
unui utilizator;
Referirea unei partiii se face n context obligatoriu cu numele tabelei
sau indexului din care provine. Numele unei partiii poate s apar n
instruciuni DDL i DML, precum i n utilitarele Import/Export i
SQL*Loader.
Exemplu:
ALTER TABLE tab10 DROP PARTITION part1;
Aria de cuprindere a partiiei este format din rndurile tabelei sau
indexului, care aparin acesteia bazat pe valorile coloanele ce definesc
partiia. Aria de cuprindere este definit prin clauzele:
PARTITION BY RANGE ( coloana1, colana2, )
i
VALUES LESS THAN (valoare1, valoare2, )
sau
ALTER TABLE MOVE PARTITION
Partiionarea indecilor se face respectnd cteva reguli:
Un index poate fi partiionat dac nu este inclus ntr-un grup de indeci
sau nu este definit pentru o tabel inclus ntr-un grup de tabele;
Indecii pot fi de patru categorii: locali prefixai, locali neprefixai,
globali prefixai i globali neprefixai. Indecii globali pot fi partiionai
sau nepartiionai. Un index este local dac cheile dintr-o partiie
oarecare a acestuia refer rnduri aflate ntr-o singur partiie a tabelei
pentru care a fost creat. Indexul local este prefixat dac este definit pe
un set de coloane dintre care cea mai din stnga este coloana dup care a
fost partiionat att indexul local, ct i tabela pe care a fost creat acesta.
De exemplu, presupunem c avem tabela TAB10 i indexul su
INDEX10, care au fost partiionai dup coloanele COL1 i CIOL2.
Dac indexul INDEX10 este definit pe coloanele (COL1, COL2,
COL3), atunci el este local prefixat pentru c n partea cea mai din
stnga(prefix) a listei coloanelor de indexare se afl coloanele COL1 i
COL2 dup care s-a fcut partajarea tabelei i a indexului su. Dac
indexul INDEX10 ar fi definit pe coloanele (COL1, CO23) atunci
indexul este local neprefixat. Indecii locali nu pot fi partiionai cu
clauza BY RANGE, aceast clauz se aplic numai pentru indecii
globali. Un index este global dac cheile dintr-o partiie oarecare a
acestuia refer rnduri aflate n mai multe partiii ale tabelei pentru care
a fost creat. La fel ca i n cazul indexului local putem avea index global
prefixat i index global neprefixa. Indexul global arat faptul c
partiionarea acestuia este definit de utilizator i nu trebuie s fie
echivalent cu partiionarea tabelei pentru care se creeaz.
Definirea atributelor fizice ale indecilor comport aceleai reguli ca la
definirea atributelor fizice ale partiiilor unei tabele, cu deosebirea c
aici se folosesc pentru crearea unui index comenzile:
CREATE INDEX
sau
ALTER TABLE SPLIT PARTITION,
iar pentru modificarea atributelor fizice comenzile SQL
ALTER INDEX MODIFY PARTITION
sau
ALTER INDEX REBUILD PARTITION.
ntr-un bloc de date al grupului. Dac SIZE este specificat astfel nct ntrun bloc de date s ncap dou chei de grup atunci spaiul acestui bloc este
folosit de ambele chei, iar dac un bloc de date nu poate cuprinde toate
rndurile aferente unei chei de grup, cheia de grup se memoreaz o singur
dat, iar blocurile de date se nlnuiesc de blocul n care se afl cheia de
grup. Dac ntr-un bloc de date ncap mai multe chei de grup, atunci acesta
poate s aparin mai multor lanuri de date.
Specificarea locului (tabelei spaiu) n care s fie plasat grupul de
tabele i grupul index asociat este obligatorie la crearea acestor grupuri.
Crearea grupului de tabele (cluster) se face cu comand SQL
CREATE CLUSTER. Se va crea nti grupul de tabele i apoi tabelele ce vor
face parte din grup. Atributele fizice se furnizeaz o singur dat, doar
pentru grup nu i pentru tabele.
Exemplu:
CREATE CLUSTER grup1 (col1 NUMBER (5))
PCTUSED 75 PCTFREE 10
SIZE 600
TABLESPACE tabsp1
STORAGE (INITIAL 200k
NEXT 290k
MINEXTENTS 3
MAXEXTENTS 25
PCTINCREASE 30);
CREATE TABLE tab1 (col1 NUMBER(5) PRIMARY KEY, col2
NUMBER (10), ) CLUSTER grup1 (col1);
CREATE TABLE tab2 (col3 NUMBER(5) PRIMARY KEY, col4
NUMBER (10), ,
col1 NUMBER (5) REFERENCE tab1(col1)) CLUSTER grup1
(col1);
unde col1 este cheia grupului.
Crearea grupului de indeci (cluster) se face cu comand SQL
CREATE INDEX cu clauza ON CLUSTER. Se va crea nti grupul de tabele
i apoi grupul de indeci asociat.
Exemplu:
CREATE INDEX index1
ON CLUSTER grup1
INITRANS 2
MAXTRANS 5
TABLESPACE tabsp2GR
PCTFREE 10
STORAGE (INITIAL 50k
NEXT 50k
MINEXTENTS 3
MAXEXTENTS 25
PCTINCREASE 30);
Modificarea grupurilor de tabele sau de indeci se face cu
comanda SQL ALTER CLUSTER. Elementele ce pot face obiectul
modificrii sunt atributele fizice ale grupului.
1 (100000,11111,'MESE 15/20',7,'27-JUN-92,BUC')
1 record created.
2) S se creeze o nou tabel, EXEMPLU, cu un singur cmp numeric,
identic cu coloana CODP a tabelei PRODUSE. S se introduc n aceast
nou tabel codul produselor din tabela PRODUSE.
SQL> CREATE TABLE EXEMPLU
2 (CODP NUMBER(6) NOT NULL);
Table created.
SQL> INSERT INTO EXEMPLU
2 SELECT CODP FROM PRODUSE;
5 records created.
5.2. MODIFICAREA TUPLURILOR DIN TABELE
n funcie de momentul n care se dorete realizarea modificrilor
asupra bazei de date, utilizatorul poate folosi una din urmtoarele
comenzi: SET AUTOCOMMIT IMM[EDIATE] (schimbrile se
efectueaz imediat); SET AUTOCOMMIT OFF (schimbrile sunt
pstrate ntr-un buffer).La execuia comenzii COMMIT se
permanentizeaz schimbrile efectuate, iar la execuia comenzii
ROLLBACK se renun la schimbrile realizate.
n scopul modificrii datelor dintr-o tabel se utilizeaz una din
formele sintactice ale comenzii UPDATE:
UPDATE nume-tabel [sinonim]
SET nume-crt=expresie,nume -expresie,...
[WHERE condiie];
UPDATE nume-tabel [sinonim]
SET (nume-col, nume-col,...)=(subcerere)
[WHERE condiie];
Sunt dou posibilitati de modificare. Una const n furnizarea n
mod explicit a fiecarei valori pentru cmpurile care trebuie modificate iar
cealalt posibilitate const n obinerea valorilor n urma unei cereri SQL.
Dac nu este specificat clauza WHERE se vor modifica toate
rndurile tabelei.
(nume-col,nume-col,...)=(subeercre) impune ca cererea s conin pentru
fiecare rnd un numr de valori corespunztor numrului de coloane din
Identificarea tabelelor n care trebuie cutate datele corespunztoare coloanelor specificai se face prin specificarea numelor lor dup
clauza FROM. n locul numelor de tabele se pot folosi sinonimele acestora.
Clauza WHERE specific o condiie care este folosit pentru a
selecta rndurile.
Clauza CONNECT BY indic faptul c rndurile formeaz o
structur arborescent. Prin aceast clauz sunt definite relaiile necesare
pentru a conecta rndurile tabelei ntr-un arbore. Operatorul PRIOR
folosit naintea uneia din cele dou pri ale condiiei, definete nodul
printe iar n cealalt parte nodul fiu. Clauza START WITH, prin
specificarea unei condiii care trebuie satisfcut, stabilete rndul folosit
ca rdcin a arborelui. Dac se omite, comanda SELECT va returna o
serie de arbori ncepnd cu fiecare rnd selectat. Existena clauzei
CONNECT BY ntr-o comand SELECT permite utilizarea
pseudocoloanei LEVEL, care returneaz valoarea 1 pentru nodul
rdcin, 2 pentru fiii nodului rdcin, 3 pentru nepoi etc.
Clauzele GROUP BY i HAVING determin afiarea unor
informaii sintetice despre grupuri de rnduri care au aceeai valoare n
una sau mai multe coloane. Aceste coloane sunt, n general, funcii de
grup.
ROLLUP activeaz o comanda SELECT pentru a calcula mai
multe niveluri de subtotaluri dintr-un grup specificat de dimensiuni.
Calculeaz de asemenea i un total general. ROLLUP este o extensie
simpl a clauzei GROUP BY, deci sintaxa este foarte uor de folosit.
Extensia ROLLUP este foarte eficient i nu ngreuneaz o cerere. Rolul
extensiei ROLLUP este foare clar: creaz subtotaluri care pornesc de la
cel mai detaliat nivel pn la un total general dup gruparea care a fost
precizat n clauza ROLLUP.
CUBE acioneaz asupra unui grup specificat de coloane i
creaz subtotaluri pentru toate combinaiile posibile ntre acestea. Dac sa specificat de exemplu: CUBE (timp,regiune, department), rezultatul va
include toate valorile care ar fi incluse ntr-un ROLLUP plus combinaii
adiionale.
Pentru a combina rezultatele a dou comenzi SELECT ntr-un
singur rezultat, se folosesc operatorii UNION, INTERSECT i MINUS.
UNION returneaz rezultatele obinute de la fiecare cerere n parte,
INTERSECT returneaz doar rezultatele comune celor dou cereri iar
MINUS returneaz rezultatele obinute de la prima cerere i care nu apar
n urma celei de a doua selecii.
NUME
AVRAM ION
BARBU DAN
COMAN RADU
DAN ION
VLAD VASILE
MANU DAN
VLAD ION
7 records selected.
FUNCT
VNZATOR
VNZATOR
EF DEP
VNZATOR
EF DEP
VNZATOR
VNZATOR
CODD SALA
100000
21200
120000 20750
130000 35000
160000 24500
160000 36500
160000 27500
120000 25060
VENS
1000
2000
2500
3550
1500
2500
3500
CODS
1000
1000
1000
2500
2500
2500
1000
SALA
21200
20750
35000
24500
36500
27500
25060
VENS
1000
2000
2500
3550
1500
2500
3500
7 records selected.
3) S se selecteze coloana NUME din tabela SALARIAI
SQL> SELECT NUME
2 FROM SALARIAI;
NUME
AVRAM ION
BARBU DAN
COMAN RADU
DAN ION
VLAD VASILE
MANU DAN
VLAD ION
7 records selected.
4) S se selecteze coloana FUNCT din tabela SALARIAI n variantele
utilizrii i neutilizrii clauzei DISTINCT.
SQL> SELECT FUNCT AFIARE_FUNCTIE
2
FROM SALARIAI;
AFISARE_FUNCTIE
VNZATOR
VNZATOR
SEF DEP
VNZATOR
SEF DEP
VNZATOR
VNZATOR
7 records selected.
SQL>SELECT DISTINCT FUNCT
2
AFIARE_DISTINCT_FUNCTIE
3
FROM SALARIAI;
AFISARE_DISTINCT_FUNCTIE
VNZATOR
EF DEP
2 records selected.
6.3 Utilizarea operatorilor n formularea condiiilor de selecie din
clauza WHERE
Operatorii SQL*Plus (Anexa2) pot aprea n orice parte a unei
comenzi i au ntietate fa de orice alt tip de operatori. Operatorii
aritmetici i logici sunt utilizai pentru formularea condiiilor de selecie.
Exemple:
1) S se selecteze toate nregistrrile privind salariaii al cror salariu este
mai mare de 15000 u.m.:
SQL> SELECT * FROM SALARIATI
2
WHERE SALA>15000 ;
MARCA
1111
1222
1000
3500
2500
3700
2650
NUME
AVRAM ION
BARBU DAN
COMAN RADU
DAN ION
VLAD VASILE
MANU DAN
VLAD ION
FUNCT
VNZATOR
VNZATOR
EF DEP
VNZATOR
EF DEP
VNZATOR
VNZATOR
CODD SALA
100000
21200
120000 20750
130000 35000
160000 24500
160000 36500
160000 27500
120000 25060
VENS
1000
2000
2500
3550
1500
2500
3500
CODS
1000
1000
1000
2500
2500
2500
1000
7 records selected.
2) S se selecteze coloanele MARCA i NUME, precum i veniturile
totale (SALA+VENS) pentru angajaii care au un salariu mai mare dect
35.000 u.m.
SQL> SELECT MARCA, NUME, SALA+VENS
2
FROM SALARIAI
3
WHERE SALA>35000 ;
MARCA NUME
2650
VLAD VASILE
SALA + VENS
38000
1 record selected
3) S se selecteze coloanele NUME, FUNCT i SALA pentru salariaii
care au fncia de vnztor.
SQL> SELECT NUME, FUNCT FROM SALARIAI
2
WHERE FUNCT=VNZATOR ;
NUME
AVRAM ION
FUNCT
VNZATOR
SALA
21200
BARBU DAN
DAN ION
MANU DAN
VLAD ION
VNZATOR
VNZATOR
VNZATOR
VNZATOR
20750
24500
27500
25060
5 records selected.
4) S se selecteze coloanele MARCA, NUME, CODD din tabela
SALARIAI, pentru salariaii al cror venit suplimentar depete
salariul.
SQL> SELECT MARCA, NUME, CODD
2
FROM SALARIAI
3
WHERE VENS>SALA ;
no records selected
5) S se selecteaze i afieze cmpurile MARCA, NUME, SALARIU
pentru salariaii ale cror venituri suplimentare sunt mai mari de 1.500
u.m. i lucreaz n subordinea superiorului cu Codul 1000.
SQL> SELECT MARCA, NUME, SALA
2
FROM SALARIAI
3
WHERE VENS>1500
4
AND CODS=1000 ;
MARCA
1222
1000
2650
NUME
BARBU DAN
COMAN RADU
VLAD ION
SALA
20750
35000
25060
3 records selected
6) S se afieze toate coloanele pentru salariaii cu funcia vnztor, care
au salariul mai mare ca 20.000 u.m. i lucreaz n subordinea
superiorului cu Codul 1000.
SQL> SELECT * FROM SALARIAI
2
WHERE FUNCT =VANZATOR
3
AND SALA>20000
4
AND CODS=1000 ;
MARCA
1111
1222
2650
NUME
AVRAM ION
BARBU DAN
VLAD ION
FUNCT
VNZATOR
VNZATOR
VNZATOR
CODD SALA
100000
21200
120000 20750
120000 25060
VENS
1000
2000
3500
CODS
1000
1000
1000
3 records selected.
7) S se afieze coloana NUME i SALA pentru angajaii care au salariul
mai mic ca 30.000 u.m.
SQL> SELECT NUME FROM SALARIAI
WHERE SALA<30000 ;
NUME
AVRAM ION
BARBU DAN
DAN ION
MANU DAN
VLAD ION
SALA
21200
20750
24500
27500
25060
5 records selected.
8) S se selecteze nregistrrile pentru care funcia este SEF DEP sau
salariul este mai mare dect 35.000 u.m.
SQL> SELECT MARCA, CODS FROM SALARIAI
2
WHERE FUNCT='SEF DEP' OR SALA>35000 ;
MARCA
1000
2500
NUME
COMAN RADU
VLAD VASILE
FUNCT CODD
EF DEP 130000
EF DEP 160000
SALA
35000
36500
VENS
2500
1500
CODS
1000
2500
2 records selected.
9) S se selecteze datele despre salariaii care au funcia de vnztor i nu
lucreaz n subordinea superiorului cu codul 1000,
SQL> SELECT * FROM SALARIAI
2
WHERE FUNCT=VANZATOR
3
AND CODS!=l000;
MARCA
3500
3700
NUME
DAN ION
MANU DAN
FUNCT
VNZATOR
VNZATOR
CODD SALA
160000 24500
160000 27500
VENS
3550
2500
CODS
2500
2500
2 records selected.
10) S se selecteze toi salariaii care lucreaz n subordinea superiorului
cu codul 1000 precum i cei care au salariul mai mic de 26.000 u.m. sau
funcia de vnztor.
SQL> SELECT * FROM SALARIAI
2
WHERE FUNCT=VNZATOR
3
OR SALA< 26000 AND CODS=1000 ;
MARCA
1111
1222
3500
2650
NUME
AVRAM ION
BARBU DAN
DAN ION
VLAD ION
FUNCT
VNZATOR
VNZATOR
VNZATOR
VNZATOR
CODD SALA
100000
21200
120000 20750
160000 24500
120000 25060
VENS
1000
2000
3550
3500
CODS
1000
1000
2500
1000
4 records selected
11) S se selecteze MARCA i NUMELE pentru nregistrrile care
conin date despre angajaii a cror funcie este cea de ef de depozit sau
NUME
COMAN RADU
VLAD VASILE
2 records selected.
12) S se selecteze datele salariailor care lucreaz n subordinea
superiorului cu marca 1000 i au funcia ef de depozit sau salariul n
valoare de 35.000 u.m.
SQL> SELECT * FROM SALARIAI
2
WHERE (FUNCT=SEF DEP OR SALA=35000)
3
AND CODS=1000 ;
MARCA
1000
NUME
COMAN RADU
VENS
2500
CODS
1000
1 record selected.
13) S se afieze valorile coloanelor MARCA, NUME, FUNCT privind
angajaii care lucreaz n subordinea superiorului cu marca 1000 i au
funcia de ef de depozit sau de vnztor.
SQL> SELECT MARCA,NUME,FUNCT, CODS
2
FROM SALARIAI
3
WHERE (FUNCT=SEF DEF OR
4
FUNCT=VANZATOR')
5
AND CODS=1000 ;
MARCA
1111
1222
1000
2650
NUME
AVRAM ION
BARBU DAN
COMAN RADU
VLAD ION
FUNCT
VNZATOR
VNZATOR
EF DEP
VNZATOR
CODS
1000
1000
1000
1000
4 records selected.
14) S se selecteze coloanele MARCA, NUME, FUNCT pentru salariaii
care au funcia de ef depozit sau pentru cei care lucreaz n subordinea
superiorului cu marca 1000 i au funcia de vnztor.
SQL> SELECT MARCA,NUME,FUNCT, CODS
2
FROM SALARIAI
3
WHERE FUNCT='SEF DEP'
4
5
MARCA
1111
1222
1000
2500
2650
OR (FUNCT=VNZATOR
AND CODS=1000) ;
NUME
AVRAM ION
BARBU DAN
COMAN RADU
VLAD VASILE
VLAD ION
FUNCT
VNZATOR
VNZATOR
EF DEP
EF DEP
VNZATOR
CODS
1000
1000
1000
2500
1000
5 records selected.
15) S se selecteze toate datele privind angajaii ce nu au funcia de
vnztor.
SQL> SELECT * FROM SALARIAI
2
WHERE NOT (FUNCT= VANZATOR) ;
MARCA
NUME
1000 COMAN RADU
2500 VLAD VASILE
FUNCT
EF DEP
EF DEP
CODD SALA
130000 35000
160000 36500
VENS
2500
1500
CODS
1000
2500
2 records selected.
16) S se selecteze valorile coloanelor MARCA, NUME, FUNCT,
SALA+VENS pentru angajaii care au salariul cuprins ntre 24.500 i
36.000 u.m.
SQL>SELECT MARCA, NUME, FUNCT, SALA+VENS
2
FROM SALARIAI
3
WHERE SALA BETWEEN 24500 AND 36000 ;
MARCA
1000
3500
3700
2650
NUME
COMAN RADU
DAN ION
MANU DAN
VLAD ION
FUNCT
EF DEP
VNZATOR
VNZATOR
VNZATOR
SALA+VENS
37500
28050
30000
28560
4 records selected.
17) S se selecteze cmpurile NUME, FUNCT, SALA+VENS pentru
salariaii care au salariul mai mic dect 24500 i mai mare dect 36000.
SQL> SELECT NUME, FUNCT, SALA+VENS
2
FROM SALARIAI
3
WHERE SALA NOT BETWEEN 24500 AND 36000 ;
NUME
AVRAM ION
BARBU DAN
VLAD VASILE
FUNCT
VNZATOR
VNZATOR
EF DEP
3 records selected.
SALA+VENS
22200
22750
38000
NUME
COMAN RADU
DAN ION
VLAD VASILE
MANU DAN
FUNCT
EF DEP
VNZATOR
EF DEP
VNZATOR
4 records selected
19) S se selecteze cmpurile MARCA, NUME, SALA, VENS pentru
salariaii care au alt funcie dect cea de vnztor.
SQL> SELECT MARCA, NUME, SALA, VENS
2
FROM SALARIAI
3
WHERE FUNCT NOT IN (VNZATOR) ;
MARCA
1000
2500
NUME
COMAN RADU
VLAD VASILE
FUNCT SALA
EF DEP 35000
EF DEP 36500
VENS
2500
1500
2 records selected
Operatorul LIKE face posibil realizarea unor cereri de regsire a
nregistrrilor ce conin un cmp a crui valoare este comparat cu un ir
de caractere dat. Pentru a evalua expresiile logice n care apar iruri de
caractere se poate folosi clauza LIKE n urmtoarea secven:
SELECT ...
WHERE coloan LIKE ir ;
Avantajul unei viteze mari de regsire ca urmare a indexrii este pierdut
n momentul n care se caut ntr-o coloan indexat un ir care ncepe cu
- sau %. Aceste caractere speciale suplinesc unul, respectiv mai
multe caractere.
Exemple:
1) S se selecteze coloanele NUME i FUNCT precum i veniturile totale
pentru salariaii al cror nume ncepe cu litera C.
SQL> SELECT NUME, FUNCT, SALA+VENS
2
FROM SALARIAI
3
WHERE NUME LIKE 'C% ;
NUME
FUNCT
SALA+VENS
COMAN RADU
EF DEP 37500
1 record selected
2) S se selecteze coloanele NUME, FUNCT, SALA+VENS pentru
salariaii al cror nume se termin cu litera N.
SQL> SELECT NUME,FUNCT, SALA+VENS
2
FROM SALARIAI
3
WHERE NUME LIKE %N' ;
NUME
AVRAM ION
BARBU DAN
DAN ION
MANU DAN
VLAD ION
FUNCT
VNZATOR
VNZATOR
VNZATOR
VNZATOR
VNZATOR
SALA+VENS
22200
22750
28050
30000
28560
5 records selected
3) S se selecteze coloanele MARCA, NUME, MARCA, FUNCT pentru
salariaii al cror nume este format din nou caractere (inclusiv spaiu),
pe ultima poziie fiind N.
SQL> SELECT NUME, MARCA, FUNCT, SALA+VENS
2
FROM SALARIAI
3
WHERE NUME LIKE _ _ _ _ _ _ _ _N ;
MARCA
1111
1222
NUME
AVRAM ION
BARBU DAN
FUNCT
VNZATOR
VNZATOR
2 recors selected
4)S se selecteze salariaii al cror nume are pe poziia a treia litera M.
SQL> SELECT NUME, FUNCT
2
FROM SALARIAI
3
WHERE NUME LIKE _ _M%' ;
NUME
COMAN RADU
FUNCT
EF DEP
1 record selected
5) S se selecteze salariaii al cror nume are o lungime de nou
caractere.
SQL> SELECT NUME
2
FROM SALARIAI
3
WHERE NUME LIKE '_ _ _ _ _ _ _ _ _';
MARCA
1111
1222
NUME
AVRAM ION
BARBU DAN
NS
2 recors selected
Regsirea unor nregistrri ce conin cmpuri cu valori nule se
face cu ajutorul operatorului NULL.
Exemple:
1) S se selecteze datele pentru salariaii ce nu au venit suplimentar.
SQL> SELECT MARCA, NUME, FUNCT
2
FROM SAI.ARIATI
3
WHERE VENS IS NULL ;
MARCA
3770
NUME
CARMEN ANCA
FUNCT
VNZATOR
CODD
130000
SALA
26500
VENS
4000
CODS
1 record selected
2) S se selecteze toate datele salariaiilor care sunt ef depozit i al cror
cmp VENS (venituri suplimentare) nu conine valoarea NULL.
SQL> SELECT * FROM SALARIATI WHERE
2
VENS IS NOT NULL AND FUNCT IS SEF DEP ;
MARCA
1000
2500
NUME
COMAN RADU
VLAD VASILE
FUNCT
EF DEP
EF DEP
CODD SALA
130000 35000
160000 36500
VENS
2500
1500
CODS
1000
2500
2 records selected
6.4.Ordonarea liniilor rezultate n urma unei cereri
Limbajul SQL*Plus are posibilitatea ordonrii cresctoare sau
descresctoare a liniilor rezultate n urma unei cereri. Aceast operaie se
realizeaz prin intermediul secvenei:
SELECT ...
FROM ...
WHERE ...
ORDER BY {expr | numr-poziie} [ASC | DESC], ;
unde:
expr reprezint o expresie care face referire la una sau mai multe
coloane; numr-poziie este un numr care identific poziia coloanei din
comanda SELECT, dup care se dorete sortarea. Utilizarea
operatorului de tipul UNION, INTERSECT sau MINUS impune
prezena argumentului numr-poziie. ASC sau DESC precizeaz modul
NUME
VLAD ION
BARBU DAN
AVRAM ION
FUNCT
VNZATOR
VNZATOR
VNZATOR
CODD SALA
120000 25060
120000 20750
100000
21200
VENS
3500
2000
1000
CODS
1000
1000
1000
3 records selected
2) S se selecteze cresctor dup salariu, angajaii cu funcia vnztor
pentru care marca superiorului este 1000.
SQL>SELECT * FROM SALARIAI
2
WHERE CODS=1000
3
AND FUNCT='VNZATOR'
4
ORDER BY SALA ;
MARCA
1222
1111
2650
NUME
BARBU DAN
AVRAM ION
VLAD ION
FUNCT
VNZATOR
VNZATOR
VNZATOR
CODD
120000
100000
120000
SALA
20750
21200
25060
VENS
2000
1000
3500
CODS
1000
1000
1000
3 records selected.
3) S se selecteze cresctor, dup salariu, coloanele MARCA, NUME,
SALA, VENS, SALA+VENS pentru acei salariai cu funcia de vnztor
i pentru care marca superiorului este 1000
SQL> SELECT MARCA, NUME, SALA, VENS
2
FROM SALARIAI
3
WHERE CODS=1000 AND FUNCT='VNZATOR'
4
ORDER BY SALA ;
MARCA
1222
1111
2650
NUME
BARBU DAN
AVRAM ION
VLAD ION
SALA
20750
21200
25060
VENS
2000
1000
3500
SALA+VENS
22750
22200
28560
3 records selected.
4) S se selecteze coloanele MARCA, NUME, CODD, VENS ordonate
cresctor dup codul depozitului i veniturile suplimentare.
SQL> SELECT MARCA,NUME,CODD,VENS
2
FROM SALARIAI
3
WHERE FUNCT='VNZATOR'
4
ORDER BY CODD, VENS ;
MARCA
1111
1222
2650
3700
3500
NUME
AVRAM ION
BARBU DAN
VLAD ION
MANU DAN
DAN ION
CODD
100000
120000
120000
160000
160000
VENS
1000
2000
3500
2500
3550
5 records selected
6.5. Selecii din mai multe tabele
Operaia prin care se selecteaz i se grupeaz coloanele din
tabele diferite, n scopul obinerii unor informaii coerente, poart numele
de jonciune (JOIN). Pentru a realiza o jonciune i pentru a preciza
corespondena ntre rndurile tabelelor, se utilizeaz urmtoarea
secven:
SELECT ...
FROM nume-tab1, nume-tab2, ...
WHERE condiie ;
unde:
condiie reprezint orice expresie care compar cmpurile diferitelor
tabele.Vor fi selectate rndurile pentru care condiia este ndeplinit. n
condiie poate fi folosit operatorul (+) care simuleaz existena unor
rnduri vide n tabelele pentru care nu se gsesc corespondene.
Exemple:
1) Din tabela COMENZI (creat anterior de utilizator, pe structura
NrCom, DataCom, CodP, Cant, PreMax, PretMin, Pret(pltit), s se
selecteze codul produsului, cantitatea i diferena dintre valoarea
mrfurilor comandate la preul maxim i cel efectiv negociat (pentru un
cmp definit DIFERENTA). Ordonarea s se fac ascendent dup CODP.
SQL> SELECT COMENZI.CODP,CANT,
2
PRETMAX*CANT-PRET*CANT DIFERENTA
3
4
5
CODP
13333
14444
16686
FROM COMENZI,PRETURI
WHERE PRETURI.CODP=COMENZI.CODP
ORDER BY COMENZI.CODP ;
CANT DIFERENTA
4
8000
6
3000
15
75000
3 records selected.
2) S se afieze din tabela COMENZI codul produsului, diferena dintre
valoarea mrfurilor comandate la preul maxim i cel efectiv negociat
(pentru DIF_MAX), diferena dintre valoarea mrfurilor comandate la
preul minim i cel efectiv negociat (pentru DIF_MIN) selectate dup
criteriul egalitii EQUI-JOIN (JOIN pe condiie de egalitate). Liniile vor
fi ordonate cresctor dup valoarea total a comenzii.
SQL> SELECT COMENZI.CODP,
2
PRETMAX*CANT-*PRET*CANT DIF_MAX,
3
PRETMIN*CANT-PRET*CANT DIF_MIN
4
FROM COMENZI.PRETURI
5
WHERE PRETURI.CODP=COMEN2I.CODP
6
ORDER BY PRET*CANT;
CODP
14444
13333
16666
DIF_MAX
3000
8000
75000
DIF_MIN
0
-4000
-15000
3 records selected.
3) S se afieze cmpurile CODP, DENP, STOC i CANT, utiliznd
criteriul egalitii OUTER-JOIN, pe cmpul comun CODP (se afieaz
datele despre acele produse pentru care exist comenzi dar nu sunt n
tabela Produse). Liniile vor fi ordonate cresctor dup cmpul CODP.
SQL> SELECT COMENZI.CODP, DENP, STOC, CANT
2
FROM PRODUSE, COMENZI
3
WHERE COMENZI.CODP=PRODUSE.CODP (+)
4
ORDER BY COMENZI.CODP ;
CODP
13333
14444
16666
DENP
CANAPEA A7
SCAUN D4
PLACAJ 2/2
STOC
6
36
100
CANT
4
6
15
3 records selected.
4) S se afieaze n modul distinct (far a se repeta aceleai linii), Codul
depozitului i funciile care conin valori nule n cmpul veniturilor
NUME
CARMEN ANCA
FUNCT
VNZATOR
1 record selected.
5) S se afieze n modul distinct codul depozitului i funciile care
conin valori nule n cmpul veniturilor suplimentare. Selectarea se face
pe criteriul egalitii n cmpul comun CODD i n condiiile n care acel
depozit exist. Liniile vor fi ordonate descresctor dup codul depozitului
(din tabela SALARIAI). Se va aduga n tabela salariai un nou tuplu
cuprinznd datele vnztorului Alexe Ioan, cod depozit 160000 i fr
venituri suplimentare, pentru eficiena ordonrii.
SQL> SELECT DISTINCT DEPOZTTE.CODD.FUNCT
2
FROM SALARIATLDEPOZITE
3
WHERE SALARIATLCODD=DEPOZITE.CODD(+)
4
AND VENS IS NULL
5
ORDER BY SALARIATI.CODD DESC
CODD
160000
130000
NUME
ALEXE IOAN
CARMEN ANCA
FUNCT
VNZTOR
VNZATOR
2 records selected
ntr-o cerere se pot nlocui numele de tabele sau coloane prin etichete.
6) S se selecteze cmpurile NUME, FUNCT, DEND din tabelele
DEPOZITE (pentru care este utilizat numele D), CodD, DenD, Capac,
NrSal, i SALARIAI (pentru care este utilizat numele S). Liniile vor fi
ordonate cresctor dup cmpul NUME.
SQL> SELECT NUME, FUNCT, D.CODD, DEND
2
FROM DEPOZITE D, SALARIAI S
3
WHERE D.CODD=S.CODD
4
ORDER BY NUME
NUME
ALEXE IOAN
AVRAM ION
BARBU DAN
FUNCT
VNZATOR
VNZATOR
VNZATOR
CODD
160000
100000
120000
DEND
SPORT
MOBILA
ALIMENTAR
CARMEN ANCA
COMANRADU
DAN ION
DORU DAN
FRINCU ION
RADU IOANA
SANDU ION
VLAD ION
VLAD VASILE
VNZATOR
SEF DEP
VNZATOR
SEF DEP
SEF DEPR
VNZATOR
VNZATOR
VNZATOR
SEF DEP
130000
130000
160000
130000
160000
130000
130000
120000
160000
AUTO
AUTO
SPORT
AUTO
SPORT
AUTO
AUTO
ALIMENTAR
SPORT
13 records selected.
Pentru a pune n eviden posibilitatea schimbrii denumirilor de
tabele, n exemplele care urmeaz se va folosi, cu preponderen,
adresarea prin calificare.
7) S se selecteze, n condiiile redenumirii tabelelor COMENZI cu
CONTRACT i PRODUSE cu COS, a coloanelor CODP, CANT, PRE
din CONTRACT i coloanelor DENP, STOC din COS. S fie selectate
doar cmpurile care au unitatea de msur "buc. Liniile vor fi ordonate
cresctor dup valorile comenzilor.
SQL> SELECT CONTRACT.CODP,CONTRACT.CANT,
2
CONTRACT.PRET, DENP, COS.STOC
3
FROM COMENZI CONTRACT, PRODUSE COS
4
WHERE CONTRACT.CODP=COS.CODP
5
AND UM='BUC
6
ORDER BY CONTRACT.CANT*COS.PRET
CODP
14444
13333
CANT
6
4
PRE
4500
80000
DENP
SCAUN D4
CANAPEA A
STOC
36
76
2 records selected.
8) S se selecteze, n condiiile redenumirii tabelelor COMENZI cu
CONTRACT i PRODUSE cu COS, a coloanelor CODP, CANT, PRE
din CONTRACT i a coloanelor DENP, STOC din COS. Vor fi selectate
doar cmpurile care au unitatea de msur buc iar liniile vor fi
ordonate cresctor dup valorile comenzilor. La afiare se ve extrage o
coloan numit 'DIFERENA' care s reflecte stocul rmas n urma
onorrii comenzii.
SQL> SELECT CONTRACT.CODP,
2
CONTRACT.CANT,CONTRACT.PRET,
3
DENP, COS.STOC,
4
COS.STOC-CONTRACT.CANT DIFERENA
5
FROM COMENZI CONTRACT,PRODUSE COS
6
WHERE CONTRACT.CODP=COS.CODP
7
AND UM=BUC'
8
CODP
14444
13333
PRE
4500
80000
DENP
SCAUN D4
CANAPEA A7
STOC DIFERENA
36
30
6
2
2 records selected.
9) Din tabela COMENZI (definit prin etichetele T1 i T2) s se
selecteze CODP, CODC, n condiiile n care valoarea comenzii este mai
mare ca 50.000 u.m. (JOIN-ul unei tabele pe ea nsi).
SQL> SELECT DISTINCT T1.CODP, T2.CODC
2
FROM COMENZI T1,COMENZI T2
3
WHERE Tl.CANT * T2.PRET >60000
CODP
13333
14444
16666
22222
CODC
121111
121111
121111
121111
4 records selected
10) S se selecteze campurile CODP,.DENP, PRE, PRETMAX,
PRETM1N pentru produsele al cror pre (negociat) este cuprins ntre
preul maxim i preul minim. Ordonarea s se fac cresctor dup
cmpul CODP.
SQL> SELECT PRODUSE.CODP, DENP,
2
COMENZI.PRET,
3
PRETMIN,PRETMAX
4
FROM PRODUSE, PRETURI, COMENZI
5
WHERE COMENZI.PRET BETWEEN PRETMIN
AND PRETMAX
6
ORDER BY PRODUSE.CODP
CODP
13333
14444
16666
DENP
CANAPEA A7
SCAUN D4
PLACAJ 2/2
3 records selected.
6.6. Realizarea cererilor incluse
Subcererile reprezint cereri incluse n clauzele unor comenzi
SQL. Rndurile selectate de o subcerere nu sunt afiate, ele fiind utilizate
n continuare de o comand SQL.
2) SELECT
coloana1, coloana2,...
FROM tabela1 tab1, tabela2 tab2,...
WHERE coloana2 IN
(SELECT funcie (coloan)
FROM tabela2 tab2
WHERE tab2.coloana=coloana)
.... ;
Exemple:
1) S se selecteze cmpurile NUME i FUNCT ale salariailor cu funcia
identic cu a lui RADU IOANA.
SQL> SELECT NUME, FUNCT, FUNCIE
2
FROM SALARIAI
3
WHERE FUNCT=
4
(SELECT FUNCT FROM SALARIAI
5
WHERE NUME='RADU IOANA');
NUME
AVRAM ION
BARBU DAN
DAN ION
MANU DAN
VLAD ION
SANDU ION
CARMEN ANA
RADU IOANA
ALEXE IOAN
FUNCIE
VNZATOR
VNZATOR
VNZATOR
VNZATOR
VNZATOR
VNZATOR
VNZATOR
VNZATOR
VNZATOR
9 records selected.
2) S se selecteze, n modul distinct, valorile timpurilor MARCA, SALA,
NUME, CODS ale angajailor care au salariul mai mare dect unul dintre
subordonaii superiorului cu codul 1000. Rezultatele sunt cerute ordonate
descresctor, dup valorile cmpului SALA.
SQL> SELECT DISTINCT MARCA, SALA, NUME, CODS
2
FROM SALARIATI
3
WHERE SALA> ANY
4
(SELECT SALA FROM SALARIAI
5
WHERE CODS=1000)
6
ORDER BY SALA DESC;
MARCA
2500
3755
2550
1000
8700
8770
8755
8760
SALA
36500
36500
36000
35000
27500
26500
25700
25600
NUME
VLAD VASILE
DORU DAN
FRINCU ION
COMAN RADU
MNU DAN
CARMEN ANA
ALEXE IOAN
SANDU ION
CODS
2500
4000
2500
1000
2500
4000
2500
4000
8650
8600
1111
25060
24500
21200
VLAD ION
DAN ION
AVRAM ION
1000
2500
1000
11 records selected.
3) S se selecteze valorile cmpurilor MARCA, NUME, SALA, CODS
ale angajailor care au salariul mai mare dect al oricrui salariat din
subordinea angajatului cu codul 1000. Datele s fie ordonate descresctor
dup valorile cmpului MARCA.
SQL> SELECT MARCA, NUME, SALA, CODS
2
FROM SALARIAI
3
WHERE SALA>ALL
4
(SELECT SALA FROM SALARIAI
5
WHERE CODS=1000)
6
ORDER BY MARCA DESC;
MARCA
3755
2550
2500
NUME
DORU DAN
FRINCU ION
VLAD VASILE
SALA
36500
36000
36500
CODS
4000
2500
2500
3 records selected.
4) S se selecteze cmpurile CODD, DEND, NRSAL pentru acele
depozite care au numrul de salariai mai mare ca 5 i codul cuprins n
intervalul 100000 i 130000.
SQL> SELECT CODD, DEND, NRSAL
2
FROM DEPOZITE
3
WHERE NRSAL>5 AND CODD IN
4
(SELECT CODD FROM DEPOZITE
5
WHERE CODD BETWEEN 100000 AND 130000);
CODD
120000
DEND NRSAL
ALIMENTAR 11
1 record selected.
5) S se selecteze CODD, DEND, NRSAL pentru acele depozite care au
numrul de salariai mai mare ca 5 i codul n afara intervalului 100000 i
130000.
SQL> SELECT CODD.DEND,NRSAL
2
FROM DEPOZITE
3
WHERE NRSAL>5 AND CODD NOT IN
4
(SELECT CODD FROM DEPOZITE
5
WHERE CODD BETWEEN 100000 AND 130000);
CODD
140000
DEND
NRSAL
TEXTILE 7
1 record selected.
6) S se selecteze urmtoarele informaii: marca, funcia i veniturile
totale ale salariailor care au funcia i salariul lui VLAD VASILE.
SQL> SELECT MARCA, NUME, SALA+VENS
2
FROM SALARIAI
3
WHERE (FUNCT, SALA)=
4
(SELECT FUNCT,SALA FROM SALARIAI
5
WHERE NUME=' VLAD VASILE ');
MARCA
1500
3755
NUME
VLAD VASILE
DORU DAN
SALA+VENS
38000
42000
2 records selected.
7) S se selecteze MARCA, NUME, SALA+VENS pentru acei angajai
care au funcia lui VLAD VASILE sau salariul mai mare sau egal cu cel
pe care l are RADU IOANA. Ordonarea este cresctoare dup valorile
cmpului NUME.
SQL> SELECT MARCA, NUME, SALA+VENS
2
FROM SALARIAI
3
WHERE FUNCT IN
4
(SELECT FUNCT FROM SALARIAI
5
WHERE NUME='VLAD VASILE')
6
OR SALA>=
7
(SELECT SALA FROM SALARIATI
8
WHERE NUME=RADU IOANA)
9
ORDER BY NUME ;
NUME
FUNCT
ALEXE IOAN VNZATOR
AVRAM ION VNZATOR
BARBU DAN VNZATOR
CARMEN ANCA VNZATOR
COMANRADU SEF DEP
DAN ION
VNZATOR
DORU DAN
SEF DEP
FRINCU ION SEF DEP
MANU DAN
VNZATOR
RADU IOANA VNZATOR
SANDU ION
VNZATOR
VLAD ION
VNZATOR
VLAD VASILE SEF DEP
SALA+VENS
22200
22750
22200
23456
37500
24850
42000
73000
30000
23750
25600
28560
38000
13 records selected.
Dac se dorete evitarea afirii valorilor NULE ale cmpului
sum venituri totale (SALA+VENS), atunci se va proceda astfel:
CODD
130000
1 record selected.
9) S se selecteze cmpurile MARCA, NUME, CODD, DEND,
SALA+VENS pentru angajaii care au salariul mai mare dect media
salariilor realizate n depozitul din care fac ei parte.
SQL> SELECT MARCA, NUME, SALARIATI.CODD,
2
DEND, SALA+VENS
3
FROM SALARIATI, DEPOZITE
4
WHERE SALA>
5
(SELECT AVG(SALA) FROM SALARIAI
6
WHERE SALARIATI.CODD=DEPOZITE.CODD)
7
AND DEPOZITE.CODD=SALARIATI.CODD
8
ORDER BY MARCA;
NUME
CODD
COMAN RADU 130000
DEND
AUTO
SALA+VENS
37500
SPORT
SPORT
AUTO
38000
73000
42000
CODP
13333
14444
16666
22222
CODC
121111
121111
121111
121111
VALOARE TOTAL
320000
27000
375000
282000
4 records selected
2) S se selecteze codurile produselor i data pn la care preurile sunt
admise, pentru produsele din tabela COMENZI care au preul negociat
mai mare dect preul mediu stabilit.
SQL> SELECT DISTINCT PRETURI.CODP, DATASF
2
FROM PRETURI, COMENZI
3
WHERE COMENZI.PRET > PRETMIN+PRETMAX)/2
CODP
14444
11111
12222
16666
13333
DATASF
01-NOV-05
30-AUG-05
30-SEP-05
01-NOV-05
01-GCT-05
5 records selected.
3) S se afieze numele, marca, raportul VENS/SALA i veniturile totale
pentru efii de depozite. Ordonarea datelor s fie fcut cresctor dup
valorile raportului menionat.
SQL> SELECT NUME, MARCA, VENS/SALA, VENS+SALA
2
3
4
FROM SALARIATI
WHERE FUNCT='SEF DEP'
ORDER BY VENS/SALA DESC ;
NUME
FRINCU ION
DORU DAN
COMAN RADU
VLAD VASILE
MARCA
2550
3755
1000
2500
VENS/SALA
1.0277777777777778
.15068493150684932
.07142857142857143
.0410958904109589
VENS+SALA
73000
42000
37500
38000
4 records selected
4) S se selecteze numele, codul depozitului, venitul total lunar i anual
prognozat din tabela SALARIAI, pentru vnztori. Ordonarea s fie
fcut cresctor dup valorile cmpului NUME.
SQL>
SELECT
NUME,CODD,
SALA+VENS,
(SALA+VENS)*12
2
FROM SALARIAI
3
WHERE FUNCT='VNZATOR'
4
ORDER BY NUME;
NUME
ALEXE IOAN
AVRAM ION
BARBU DAN
CARMEN ANCA
DAN ION
MANU DAN
RADU IOANA
SANDU ION
VLAD ION
CODD
160000
100000
120000
130000
160000
160000
130000
130000
120000
SALA+VENS
26500
22200
22750
26500
24850
30000
23750
25600
28560
(SALA+VENS)*12
318000
266400
273000
318000
298200
360000
285000
307200
342720
9 records selected
O expresie aritmetic n care un operand este nul (valoarea
NULL) are o valoare nul (NULL). De aceea, de multe ori, construirea
corect a expresiilor aritmetice presupune transformarea valorii NULL
ntr-o alt valoare, eventual nul fa de operaia aritmetic (cum ar fi, de
exemplu, zero la adunare, unu la nmulire etc.).
Se presupune c n cmpul VENS s-au introdus i valori NULL.
Pentru astfel de valori, expresia SALA+VENS are valoarea NULL,
indiferent ce valoare are SALA, ceea ce matematic nu este corect. De
aceea, pentru exemplul anterior, se recomand ca valoarea NULL a
cmpului VENS s fie transformat n zero (fiind o sum) naintea
evalurii expresiei aritmetice.
Exemple:
1) S se selecteze coloanele NUME, MARCA, VENS, SALA+VENS din
tabela SALARIAI, n condiiile n care codul superiorului este 1000.
SQL> SELECT NUME, MARCA,VENS, SALA+VENS
2
FROM SALARIATI
3
WHERE CODS= 1000 ;
NUME
MARCA
AVRAM ION 1111
BARBU DAN 1222
COMAN RADU 1000
VLAD ION
2650
VENS
1000
2000
2500
SALA+VENS
22200
22750
36000
VENIT_TOTAL
25700
22200
22750
26500
35000
24850
42000
73000
30000
23750
25600
28560
38000
13 records selected.
n capul de tabel, rezultat n urma cererilor, apar numele
coloanelor din baza de date. n locul acestora pot fi afiate etichete de
coloan declarate n comenzile de definire a tabelelor.
Sintaxa de declarare este:
SELECT
coloana1 nume-etichet1, coloana2 nume-etichet2, ;
CODUL
120000
130000
100000
160000
140000
NUMR DE SALARIAI
11
5
3
4
7
DENUMIRE CANT_PATRAT
SCAUN D4
1296
MESE 15/20
49
FOTOLIU A3
144
CANAPEA A7
36
4 records selected.
2) S se selecteze n modul distinct cmpurile CODP, DENP,
CODC.DENC i s se calculeze cmpul [(CANT*PRET)/2], rotunjit la
dou zecimale.
SQL> SELECT DISTINCT
2
COMENZI.CODP, DENP,
3
COMENZI.CODC, DENC,
4
ROTUNJIRE
5
6
7
CODP
13333
16666
14444
ROUND ( (COMENZI.CANT*COMENZI.PRET)/2,2 )
FROM COMENZI, CLIENTI, PRODUSE
WHERE COMENZI.CODP = PRODUSE.CODP
AND COMENZI.CODC = CLIENTI.CODC;
DENP
CANAPEA A7
PLACAJ 2/2
SCAUN D4
CODC
121111
121111
121111
DENC
UNIT-2
UNIT-2
UNIT-2
ROTUNJIRE
160000
187500
13500
3 records selected.
Funciile caracter opereaz asupra irurilor de caractere. Ele se utilizeaz
pentru transformarea literelor mari n mici sau invers, extragerea unui
subir dintr-un ir, ncepnd cu o anumit poziie, selectarea cuvintelor
care se pronun asemntor cu un ir dat etc.
Exemple:
1) S se afieze o situaie final prin care s fie redate cmpurile NUME
i MARCA angajatului, reunite ntr-un cmp comun denumit
INFORMAIE, iar cmpul venituri totale anuale s fie denumit
VENIT_ANUAL. Selecia este cerut pentru angajaii cu codul
superiorului egal cu 1000.
SQL>SELECT
NUME
||
-
||
MARCA
INFORMAIE
2
(SALA+VENS)*12 VENIT_ANUAL
3
FROM SALARIAI
4
WHERE CODS =1000;
INFORMAIE
AVRAM ION - 1111
BARBU DAN - 1222
COMAN RADU - 1000
VLAD ION - 2650
VENIT_ANUAL
266400
273000
450000
342720
4 records selected.
2) S se selecteze cmpurile NUME i FUNCT din tabela SALARIAI i
s se atribuie un cod de clasificare fiecrei funcii. Codul este format
dintr-o singur cifr i are valorile: 1 pentru vnztor, 2 pentru director, 3
pentru restul funciilor.
SQL> SELECT NUME, FUNCT,
2
DECODE(FUNCT, VNZATOR,l ,DIRECTOR,2,3)
3
CLASIFIC_FUNCT
4
FROM SALARIAI
5
ORDER BY FUNCT, NUME ;
NUME
FUNCT CLASIFIC_FUNCT
COMAN RADU
DORU DAN
FRINCU ION
VLAD VASILE
ALEXE IOAN
AVRAM ION
BARBU DAN
CARMEN ANCA
DAN ION
MANU DAN
RADU IOANA
SANDU ION
VLAD ION
SEF DEP
SEF DEP
SEF DEP
SEF DEP
VNZATOR
VNZATOR
VNZATOR
VNZATOR
VNZATOR
VNZATOR
VNZATOR
VNZATOR
VNZATOR
3
3
3
3
1
1
1
1
1
1
1
1
1
13 records selected
3) S se afieze salariul i veniturile suplimentare ale tuturor angajailor,
cu specificarea numelui numai pentru salariaii vnztori. Pentru restul
angajailor s se afieze mesajul: *** Nu intereseaz ***. Ordonarea s
se fac dup funcie, n mod descresctor.
SQL> SELECT DECODE
2
(
3
FUNCT,VNZATOR,
NUME,
***Nu
intereseaz***
4
) NUMELE,
5
SALA, NVL (VENS, 0)
6
FROM SALARIAI
7
ORDER BY FUNCT DESC;
NUMELE
AVRAM ION
BARBU DAN
DAN ION
MANU DAN
VLAD ION
SANDU ION
CARMEN ANCA
RADU IOANA
ALEXE IOAN
*** Nu intereseaz ***
*** Nu intereseaz ***
*** Nu intereseaz ***
*** Nu intereseaz ***
SALA
21200
20750
24500
27500
25060
25600
26500
20750
25700
35000
36500
36000
36500
VENS
1000
2000
350
2500
3500
0
0
3000
0
2500
1500
37000
5500
13 records selected.
4) S se afieze primele 5 caractere din NUME, MARCA i primul
caracter din funcie, pentru toi angajaii.
SQL> SELECT
SUBSTR (NUME, l, 5) 5_din_Nume,
2
MARCA, Marca_Sal,
3
SUBSTR (FUNCT, 1, 1) 1_din_Funcie
4
FROM SALARIAI;
5_din_Nume
AVRAM
BARBU
COMAN
DAN I
VLAD
MANU
FRINC
VLAD
DORU
SANDU
CARME
RADU
ALEXE
Marca_Sal
1111
1222
1000
3500
2500
3700
2550
2650
3755
3760
3770
1680
3755
1_din_Funcie
V
V
S
V
S
V
S
V
S
V
V
V
V
13 records selected.
5) S se selecteze i afieze numele, funcia i salariul total pentru toi
angajaii care au numele terminat cu litera N. Situaia trebuie aib
urmtoarea form: Persoana_cu_Funcia
SALA+VENS
NUME
SALARIAT - funcie
SQL> SELECT NUME || - ||
Persoana_cu_Funcia,
2
SALA+VENS SAL_TOTAL
3
FROM SALARIAI
4
WHERE
5
UPPER (NUME) LIKE %N
Persoana_cu_Funcia
AVRAM ION-vnztor
BARBU DAN- vnztor
DAN ION- vnztor
MNU DAN- vnztor
FRINCUION-sefdep
VLAD ION- vnztor
DORUDAN-sefdep
SANDU ION- vnztor
ALEXE lOAN-vnzator
LOWER
(FUNCT)
SAL_TOTAL
22200
22750
24850
30000
73000
28560
42000
25600
DENC
UNIT-1
UNIT-2
STR
Moilor
Dorobani
NR
104
18
MARCA
3755
5565
2 records selected.
7) S se selecteze din tabela SALARIAI coloanele NUME i MARCA,
pentru angajaii a cror funcie este asemntoare fonetic cu irul de
caractere: 'vnztor'.
SQL> SELECT NUME, MARCA
2
FROM SALARIAI
3
WHERE SOUNDEX (FUNCT)= SOUNDEX (VNZATOR)
NUME
AVRAM ION
BARBU DAN
DAN ION
MANU DAN
MARCA
1111
1222
3500
3700
4 records selected.
8) S se selecteze constanta NUMELE SI CODUL CLIENILOR: i
valorile cmpurilor DENC, CODC pentru clienii din strada Calea
Moilor i cu un cod mai mare ca 100000.
SQL> SELECT
"NUMELE SI CODUL CLIENILOR:" ,
2
DENC,
CODC
3
FROM CLIENI
4
WHERE STR LIKE MOILOR%
5
AND CODC> 100000 ;
NUMELE I CODUL CLIENILOR:
NUMELE I CODUL CLIENILOR:
DENC
UNIT-2
CODC
121111
2
3
4
5
PRODUSE.DENP.DATASF
FROM PRETURI,PRODUSE
WHERE PRODUSE.CODP=PRETURI.CODP
ORDER BY PRETURI.CODP ;
CODP
11111
12222
13333
15555
16668
14444
DENP
MESE 15/20
FOTOLIU A3
CANAPEA A7
BIROU C6X4
PLACAJ 2/2
SCAUN D4
DATASF
30-AUG-05
30-SEP-05
01-OCT-05
01-OCT-05
01-NOV-05
01-NOV-05
6 records selected.
2) S se selecteze cmpurile CODP i DATASF scriindu-se codul pe un
rnd i data pe urmtorul. Data va fi scris sub forma LL/ZZ-AA :
Se vor folosi operatorul TRUNC care asigur trecerea la rndul urmtor,
funcia TO_CHAR (expr [fmt] ) care efectueaz conversia cmpului dat
expr ntr-un ir de caractere n formatul specificat n [fmt]; comanda
COLUMN care definete un alt format de afiare a coloanei DATASF.
SQL> COLUMN DATASF FORMAT A21 TRUNC
SQL> SELECT
CODP,
2
TO_CHAR (DATASF, MM/DD-YY) DATASF
3
FROM PRETURI;
CODP
11111
12222
13333
15555
16666
14444
DATASF
08/30-05
09/30-05
10/01-05
10/01-05
11/01-05
11/01-05
6 records selected.
3) S se selecteze coloanele CODP, DATASF la produsele cu codul mai
mare ca 13333, afind ziua i luna n litere iar anul cu patru cifre.
SQL> COLUMN DATASF FORMAT A26
SQL> SELECT CODP,
2
TO_CHAR (DATASF, DAY MONTH YYYY)
DATASFRIT
3
FROM PRETURI
4
WHERE CODP>13333 ;
CODP
15555
16666
14444
DATASFRIT
THURSDAY OCTOBER
SUNDAY NOVEMBER
SUNDAY NOVEMBER
2005
2005
2005
3 records selected
4) S se selecteze CODP, DATASF la produsele cu codul mai mare ca
13333, afind luna n litere i pentru an ultimele dou cifre.
SQL> SELECT CODP,
2 TO_CHAR (DATASF, DAY MONTH YY) DATASFRIT
3 FROM PRETURI WHERE CODP> 13333 ;
CODP
15555
16666
14444
DATASFRIT
THURSDAY OCTOBER
SUNDAY NOVEMBER
SUNDAY NOVEMBER
05
05
05
3 records selected
5) S se selecteze coloanele CODP, DATASF la produsele cu codul mai
mare ca 13333, afind ziua n cifre, luna n litere i anul cu patru cifre.
SQL> SELECT CODP,
2
TO_CHAR (DATASF, DD MONTH YYYY)
DATASFRIT
3
FROM PRETURI
4
WHERE CODP> 13333 ;
CODP
15555
16666
14444
DATASFRIT
01
OCTOBER
01
NOVEMBER
01
NOVEMBER
2005
2005
2005
3 records selected
6) S se selecteze coloanele CODP, DATASF la produsele cu codul mai
mare ca 13333, afind primele trei litere de la zi, luna n litere i anul cu
patru cifre.
SQL> SELECT CODP,
2
TO_CHAR (DATASF, DY MONTH YYYY)
DATASFRIT
3
FROM PRETURI
4
WHERE CODP> 13333 ;
CODP
15555
16666
14444
DATASFRIT
THU
OCTOBER
SUN
NOVEMBER
SUN
NOVEMBER
2005
2005
2005
3 records selected
7) S se selecteze cmpurile CODP, DATASF la produsele cu codul mai
mare ca 13333, afind ziua n litere, luna n cifre i anul cu patru cifre.
SQL>SELECT CODP,
2
TO_CHAR
(DATASF,
DATASFRIT
3
FROM PRETURI
4
WHERE CODP> 13333 ;
CODP
15555
16668
14444
DAY
MM
YYYY)
DATASFRIT
THURSDAY 10 2005
SUNDAY 11 2005
SUNDAY 11 2005
3 records selected.
8) S se selecteze cmpurile CODP, DATASF la produsele cu codul mai
mare ca 13333, afind primele trei litere pentru zi i lun i ultimele
dou cifre de la an.
SQL>SELECT CODP,
2
TO_CHAR (DATASF, DY-MON-YY) DATASFRIT
3
FROM PRETURI
4
WHERE CODP>13333 ;
CODP
15555
16666
14444
DATASFRIT
THU-OCT-05
SUN-NOV-05
SUN-NOV-05
3 records selected.
9) S se selecteze cmpurile CODP, DATASF pentru produsele cu codul
mai mare dect 13333, afindu-se primele trei litere de la zi, luna n
litere i ultimele dou cifre de la an.
SQL>SELECT CODP,
2
TO_CHAR
(DATASF,
DY-MONTH-YY)
DATASFRIT
3
FROM PRETURI
4
WHERE CODP>13333 ;
CODP DATA SFRIT
16556 THU-OCTOBER -05
16666 SUN-NOVEMBER -05
14444 SUN-NOVEMBER -05
3 records selected.
10) S se selecteze coloanele CODP, DATASF pentru toate produsele,
afind ziua n cifre urmate de sufixul -th, primele trei litere ale lunii i
ultimele dou cifre ale anului, desprite prin liniu.
SQL>SELECT CODP,
2
TO
CHAR
DATASFRIT
3
FROM PRETURI ;
CODP
11111
12222
13333
16555
16666
14444
(DATASF,
DDth-MON-YY)
DATASFRIT
30TH-AUG-05
30TH-SEP- 05
01ST-OCT- 05
01ST-OCT- 05
01ST-NOV- 05
01ST-NOV- 05
6 records selected.
11) S se selecteze din tabela PRETURI valorile cmpurilor CODP i
DATASF. Data de sfrit (DATASF) s se prezinte nsoit de timpul
intern, exprimat n diverse forme de afiare.
SQL>SELECT
CODP,
2
TO_CHAR (DATASF, DDth-MON-YY HH:MIPM)
DATASFRIT
3
FROM PRETURI ;
CODP
11111
12222
13333
15555
16666
14444
DATASFRIT
30TH-AUG-05
30TH-SEP-05
01ST-OCT-05
01ST-OCT-05
01ST-NOV-05
01ST-NOV-05
12:00AM
12:00AM
12:00AM
12:00AM
12:00AM
12:00AM
6 records selected.
Sau :
SQL> SELECT CODP,
2
TO_CHAR (DATASF,
DATASFRIT
3
FROM PRETURI ;
CODP
11111
12222
13333
15555
16666
14444
DATASFRIT
30TH-AUG-05
30TH-SEP-05
01ST-OCT-05
01ST-OCT-05
01ST-NOV-05
01ST-NOV-05
DDth-MON-YY
HH:MI)
12:00
12:00
12:00
12:00
12:00
12:00
6 records selected.
12) S se afieze cmpurile CODP, DATASF i data de sfrit a
valabilitii unui pre (considerat la o distan de 90 de zile fa de
DATASF).
DATASF DATASF+90
30-AUG-05
28-NOV-05
30-SEP-05
29-DEC-05
01-OCT-05
30-DEC-05
01-OCT-05
30-DEC-05
01-NOV-05
30-JAN-06
01-NOV-05
30-JAN-06
6 records selected
13) S se selecteze codul produsului, data maxim admis de practicare a
unui pre i data curent pentru acele produse care ndeplinesc condiia ca
DATASF+10 s fie mai mare dect SYSDATE.
SQL>SELECT CODP, DATASF,
2
SYSDATE DATA_CURENT
3
FROM PRETURI
4
WHERE DATASF+10 > SYSDATE ;
CODP
12222
13333
15555
16666
14444
DATASF
30-SEP-05
01-OCT-05
01-OCT-05
01-NOV-05
01-NOV-05
DATA_CURENT
13-SEP-05
13-SEP-05
13-SEP-05
13-SEP-05
13-SEP-05
5 records selected.
14) S se selecteze codul produsului, data de sfrit, data curent, valorile
expresiilor TRUNC(DATASF+90) - TRUNC (SYSDATE) i
DATASF+90. Selecia s se realizeze pentru produsele cu codul mai
mare ca 13333 i data de sfrit plus 90 de zile mai mare dect data
curent.
SQL>SELECT CODP, DATASF,
2
SYSDATE DATA_CURENTA,
3
TRUNC(DATASF+90)-TRUNC(SYSDATE)
DIFERENA
4
DATASF+90 DATA_90
5
FROM PRETURI
6
WHERE DATASF+90 > SYSDATE
7
AND CODP>13333 ;
CODP
15555
16666
14444
DATASF
01-OCT-05
01-NOV-05
01-NOV-05
3 records selected.
DATASF
WEDNESDAY AUG-05
FRIDAY SEP-05
RDATE
VINERI NOV-05
VINERI DEC-05
RSDATE
WEDNESDAY NOV-05
SATURDAY DEC-05
2 records selected
O operaie posibil de realizat este i cea de a aduna algebric un
numr de luni la o dat calendaristic: funcia ADD_MONTHS (d,n),
care adun n luni la data d.
16) S se afieze codul produsului, data de sfrit i a unui nou termen de
valabilitate a unui pre dat, calculat prin adugarea a trei luni. S se
selecteze doar produsele al cror cod este mai mic dect 13333, iar data
de sfrit este mai mare dect data curent plus trei luni.
SQL>SELECT CODP, DATASF,
2
ADD_MONTHS (DATASF,3) RDATE
3
FROM PRETURI
4
WHERE
5
DATASF > SYSDATE+90
6
AND CODP<13333 ;
CODP
11111
12222
DATASF
30-AUG-05
30-SEP-05
2 records selected
RDATE
30-NOV-05
30-DEC-05
DENP
FOTOLIU A3
CANAPEA A7
BIROU C6X4
DATASF
30-SEP-05
01-OCT-05
01-OCT-05
3 records selected
6.8.Utilizarea funciilor de grupare i a clauzei GROUP BY n
selectarea datelor
Rezultatele obinute n urma selectrilor pot fi grupate cu ajutorul
clauzei GROUP BY. Secvena utilizat pentru aceast operaie este:
SELECT
GROUP BY tabel.coloana1, tabel.coloan2,
HAVING
condiie
;
Prin parcurgerea secvenei se obine cte un rnd pentru nregistrrile
care au aceleai valori n coloanele specificate n clauza GROUP BY.
Prezena clauzei HAVING determin obinerea acelor grupuri care
ndeplinesc condiiile specificate. Este de reinut faptul c GROUP BY i
HAVING trebuie s fie declarate dup clauzele WHERE, CONNECT
BY i START WITH, n cazul cnd acestea exist n comand.
Exemple:
1) S se selecteze din tabela PRETURI valorile din coloana DATASF i
s se contorizeze numrul apariiilor acestora.
NUMAR_PRODUSE
2
2
1
1
MIN_SAL
24250
DIF_MAX_MIN
25750
FUNCT
DIRECTOR
SALA+VENS
85000
1 record selected
8) S se selecteze coloanele DENP, CODP, CODD din tabela PRODUSE
pentru care stocul existent este mai mare sau egal cu cantitatea
comandat.
SQL> SELECT DENP, CODP, CODD
2
FROM PRODUSE
3
WHERE STOC >=
4
(SELECT SUM (CANT) FROM COMENZI );
DENP
PLACAJ 2/2
SCAUN D4
CANAPEA A7
CODP
166666
144444
133333
CODD
100000
100000
100000
SALA+NVL(VENS,0)
37500
38000
73000
42000
40600
AVG(VENS)
33100
20500
AVG(VENS)
1975
AVG(VENS)
2750
AVG(VENS)
9390
AVG(SALA)
33100
24202.5
28870
30866
AVG(VENS)
20500
1975
2750
9390
CODS
1000
2500
2550
3755
4000
7000
8000
AVG (SALA)
22336.7
27083,3
25500
26600
26050
35750
4500
MEDIE_SAL_ANUAL
268040
271500
306000
319200
312600
540000
COD_DEP
100000
COD_PROD
133333
144444
166666
NR_SAL
5
11
MEDIE_SAL
429600
292975
2 records selected.
19) S se selecteze codurile superiorilor (CODS) care au doi sau mai
muli subordonai.
SQL> SELECT CODS
2
FROM SAIARIATI
3
WHERE FUNCT=VNZATOR
4
GROUP BY CODS
5
HAVING COUNT(*)>=2 ;
CODS
1000
2500
2550
3755
4000
5 records selected.
20) S se selecteze codurile superiorilor care au media veniturilor
suplimentare ale subordonailor mai mare dect 10% din salariul mediu.
Se vor afia codurile superiorilor i media veniturilor totale anuale ale
subordonailor.
SQL> SELECT CODS,
2
AVG (SALA+NVL (VENS,0) )*12 MED_VEN_TOT_AN
3
FROM SALARIAI
4
GROUP BY CODS
5
HAVING AVG (VENS) > AVG (SALA)*0.10;
CODS
2500
7000
8000
MED_VEN_TOT_AN
486400
474300
1020000
21) S se selecteze funciile pentru care salariile medii sunt mai mari
dect salariul mediu al unui vnztor. Se vor afia funciile i salariile
medii pentru fiecare funcie.
SQL> SELECT FUNCT, AVG(SALA) MEDIE_SAL
2
FROM SALARIAI
3
GROUP BY FUNCT
4
HAVING AVG (SALA) >
5
(SELECT AVG(SALA) FROM SALARIAI
6
WHERE FUNCT= VNZATOR );
FUNCT
DIRECTOR
SEF DEP
MEDIE_SAL
45000
35800
NR_SAL_VEN_SUPL
3
NR_SAL MEDIA_VEN_SUPL
4
2250
1,
'Toate
Exemple:
1) S se afieze cmpurile NUME, FUNCT, CODS, MARCA din tabela
SALARIAI. Datele s fie ordonate cresctor dup codul superiorului.
SQL>SELECT NUME, FUNCT, CODS, MARCA
FROM SALARIATI
ORDER BY CODS;
NUME
AVRAM ION
BARBU DAN
COMAN RADU
VLAD ION
AILENEI FLORIN
DAN ION
DARIAN GEO
FRINCU ION
RADU ION
VLAD VASILE
ALEXE IOAN
MANU DAN
DORU DAN
CARMEN ANCA
PAUL TEFAN
SANDU ION
ION ION
FUNCT
VNZTOR
VNZTOR
SEF DEP
VNZTOR
VNZTOR
VNZTOR
VNZTOR
SEF DEP
VNZTOR
SEF DEP
VNZTOR
VNZTOR
SEF DEP
VNZTOR
SEF DEP
VNZTOR
DIRECTOR
CODS
1000
1000
7000
1000
2500
2500
2500
2500
2500
7000
3755
3755
7000
4000
7000
4000
7000
MARCA
1111
1222
1000
2650
2553
3500
2554
2550
1680
2500
3759
3700
3755
3770
4000
3760
7000
MARCA
3755
3700
3759
CODS
7000
3755
3755
CODD
130000
160000
160000
3 records selected
3) S se afieze cmpurile MARCA, NUME, FUNCT, CODS, CODD
din tabela SALARIAI, ordonate cresctor dup marca i codul
superiorului, pentru subordonaii direci i indireci ai salariatului cu
numele VLAD VASILE.
SQL> SELECT MARCA, NUME, FUNCT, CODS, CODD
2 FROM SALARIATI
3 CONNECT BY PRIOR MARCA = CODS
4 START WITH NUME = VLAD VASILE
NUME
RADU ION
VLAD VASILE
FRINCU ION
AILENEI FLORIN
DARIAN GEOR
DAN ION
ION ION
FUNCT
VNZTOR
SEF DEP
SEF DEP
VNZTOR
VNZTOR
VNZTOR
DIRECTOR
CODS
2500
7000
2500
2550
2550
2500
7000
CODD
2553
3500
2554
2550
2500
2500
7000
7 records selected.
4) S se afieze cmpurile MARCA, NUME, FUNCT, CODS, CODD
din. tabela SALARIAI, ordonate cresctor dup marca.
SQL> SELECT MARCA,NUME,FUNCT,CODS,CODD
2 FROM SALARIAI
3 ORDER BY MARCA;
MARCA
1000
1111
1222
1680
2500
2550
2553
2554
2650
3500
3700
3755
3759
3760
3770
4000
7000
NUME
COMAN RADU
AVRAM ION
BARBU DAN
RADU ION
VLAD VASILE
FRINCU ION
AILENEI FLORIN
DARIAN GEO
VLAD ION
DAN ION
MNU DAN
DORU DAN
ALEXE IOAN
SANDU ION
CARMEN ANA
PAUL TEFAN
ION ION
FUNCT
SEF DEP
VINZATOR
VINZATOR
VINZATOR
SEF DEP
SEF DEP
VINZATOR
VINZATOR
VINZATOR
VINZATOR
VINZATOR
SEF DEP
VINZATOR
VINZATOR
VINZATOR
SEF DEP
DIRECTOR
CODS
7000
1000
1000
2500
7000
2500
2550
2550
1000
2500
3755
7000
3755
4000
4000
7000
7000
CODD
130000
100000
120000
130000
160000
160000
120000
120000
120000
120000
160000
130000
160000
130000
130000
160000
100000
17 records selected.
5) S se selecteze numele, marca, codul superiorului, codul depozitului
pentru subordonaii direci i indireci ai salariatului cu numele DORU
DAN.
SQL> SELECT NUME,MARCA,CODS,CODD
2 FROM SALARIAI
3 CONNECT BY PRIOR MARCA=CODS
4 START WITH NUME='DORU DAN';
NUME
DORU DAN
MARCA
3755
CODS
7000
CODD
130000
MNU DAN
3700
ALEXE IOAN 3759
3755
3755
160000
160000
3 records selected.
6) S se afieze MARCA, NUME, FUNCT, CODS i CODD ordonate
cresctor dup marc i cod superior pentru subordonaii direci i
indireci ai salariatului cu numele VLAD VASILE.
SQL> SELECT MARCA,NUMEJFUNCT,CODS,CODD
2 FROM SALARIAI
3 CONNECT BY PRIOR MARCA=CODS
4 START WITH NUME='VLAD VASILE'
5 ORDER BY MARCA.CODS
MARCA
1680
2500
2550
2553
2554
3500
NUME
RADU ION
VLAD VASILE
FRINCU ION
AILENEI FLORIN
DARIAN GEO
DAN ION
FUNCT
VINZATOR
SEF DEP
SEF DEP
VINZATOR
VINZATOR
VINZATOR
CODS
2500
7000
2500
2550
2550
2500
CODD
130000
160000
160000
120000
120000
160000
6 records selected.
7) S se afieze cmpurile NUME i MARCA pentru subordonaii direci
i indireci ai salariatului ION ION precum i nivelul lor de subordonare.
SQL> SELECT LEVELJWME.MARCA
2 FROM SALARIAI
3 CONNEOT BY PRIOR MARCA=CODS
4 START WITH NUME='ION ION';
LEVEL
1
2
3
3
3
2
3
4
4
3
3
2
3
3
2
3
3
NUME
ION ION
COMAN RADU
AVRAM ION
BARBU DAN
VLAD ION
VLAD VASILE
FRINCU ION
AILENEI FLORIN
DARIAN GEO
RADU ION
DAN ION
DORU DAN
MNU DAN
ALEXE IOAN
PAUL TEFAN
SANDU ION
CARMEN ANA
MARCA
7000
1000
1111
1222
2650
2500
2550
2553
2554
1680
3500
3755
3700
3759
4000
3760
3770
NUME.SI.PRENUME
ION ION
COMAN RADU
AVRAM ION
BARBU DAN
VLAD ION
VLAD VASILE
FRINCU ION
AILENEI FLORIN
DARIAN GEO
RADU ION
DAN ION
DORU DAN
MNU DAN
ALEXEIOAN
PAUL TEFAN
SANDU ION
CARMEN ANA
MARCA
7000
1000
1111
1222
2650
2500
2550
2553
2554
1680
3500
3755
3700
3759
4000
3760
3770
17 records selected.
9) S se afieze cmpurile LEVEL, NUME, MARCA apartinnd
subordonailor salariailor PAUL TEFAN i COMAN RADU, punnd
n eviden, prin scriere decalat, modul de subordonare.
SQL> SELECT LEVEL,
LPAD( ','LEVEL*2) || NUME
3 NUME_SI_PRENUME,MARCA
4 FROM SALARIAI
5 CONNECT BY PRIOR MARCA=CODS
6START
WITH
NUME='PAUL
TEFAN
7
OR
NUME='COMAN RADU
LEVEL
1
2
2
2
NUME
COMAN RADU
AVRAM ION
BARBU DAN
VLAD ION
MARCA
1000
1111
1222
2650
1
2
2
PAUL TEFAN
SANDU ION
CARMEN ANA
4000
3760
3770
7 records selected.
10) S se afieze cmpurile LEVEL, NUME i MARCA, in structur
arborescent, apartinnd salariailor din subordinea celor cu aceeai funcie cu a
salariatului COMAN RADU.
NUME_SI_PRENUME
MARCA
2
3
3
3
2
3
4
4
3
3
2
3
3
2
3
3
COMAN RADU
AVRAM ION
BARBU DAN
VLAD ION
VLAD VASILE
FR1NCU ION
AILENEI FLORIN
DARIAN GEO
RADU ION
DAN ION
DORU DAN
MNU DAN
ALEXEIOAN
PAUL TEFAN
SANDU ION
CARMEN ANA
1000
1111
1222
2650
2500
2550
2553
2554
1680
3500
3755
3700
3759
4000
3760
3770
LEVEL
1
1
2
2
2
1
2
2
1
1
NUME_SI_PRENUME
RADU ION
COMAN RADU
AVRAM ION
BARBU DAN
VLAD ION
DORU DAN
MNU DAN
ALEXE IOAN
CARMEN ANA
SANDU ION
MARCA
1680
1000
1111
1222
2650
3755
3700
3759
3770
3760
FUNCT
VINZATOR
SEF DEP
VINZATOR
VINZATOR
VINZATOR
SEF DEP
VINZATOR
VINZATOR
VINZATOR
VINZATOR
CODD
130000
130000
100000
120000
120000
130000
160000
160000
130000
130000
10 records selected.
12) S se selecteze cmpurile NUME, MARCA, FUNCT, CODD
aparinnd superiorilor salariatului VLAD ION.
SQL> SELECT NUME,MARCA,CODS,FUNCT,CODD
2
FROM SALARIAI
3
CONNECT BY MARCA=PRIOR CODS
4
START WITH NUME=`VLAD ION`;
NUME
VLAD ION
COMAN RADU 1000
ION ION
MARCA
2650
7000
7000
CODS
1000
SEF
8000
FUNCT
VINZATOR
DEP
DIRECTOR
CODD
120000
130000
100000
3 records selected.
13) S se afieze cmpurile NUME, MARCA, FUNCT aparinnd
subordonailor salariatului VLAD VASILE, mai puin datele salariatului
AILENEI FLORIN.
SQL> SELECT NUME,MARCA,FUNCT
2
FROM SALARIATI
3
WHERE NUME !=AILENEI FLORIN
4
CONNECT BY PRIOR MARCA=CODS
5
START WITH NUME='VLAD VASILE';
NUME
VLAD VASILE
FRINCU ION
DARIAN GEO
RADU ION
DAN ION
MARCA
2500
2550
2554
1680
3500
FUNCT
SEF DEP
SEF DEP
VINZATOR
VINZATOR
VINZATOR
3
4
5
MARCA
7000
1000
1111
1222
2650
3755
3700
3759
4000
3760
3770
NUME
ION ION
COMAN RADU
AVRAM ION
BARBU DAN
VLAD ION
DORU DAN
MNU DAN
ALEXE IOAN
PAUL TEFAN
SANDU ION
CARMEN ANA
FUNCT
DIRECTOR
SEF DEP
VINZATOR
VINZATOR
VINZATOR
SEF DEP
VINZATOR
VINZATOR
SEF DEP
VINZATOR
VINZATOR
CODS
8000
7000
1000
1000
1000
7000
3755
3755
7000
4000
4000
11 records selected
15) S se afieze o serie de date ale salariailor subordonai lui ION ION,
mai puin datele salariailor COMAN RADU i VLAD VASILE precum
i ale subordonailor lui VLAD VASILE.
SQL> SELECT MARCA,NUME,LEVEL,FUNCT,
2 CODS.CODD
3 FROM SALARIAI
4 WHERE NUME <> 'COMAN RADU'
5 CONNECT BY PRIOR MARCA=CODS
6 AND NUME != 'VLAD VASILE'
7 START WITH NUME='ION ION'
MARCA
7000
1111
1222
2650
3755
3700
3759
4000
3760
3770
NUME
ION ION
AVRAM ION
BARBU DAN
VLAD ION
DORU DAN
MNU DAN
ALEXE IOAN
PAUL TEFAN
SANDU ION
CARMEN ANA
LEVEL
1DIRECTOR
3 VINZATOR
3 VINZATOR
3 VINZATOR
2 SEF DEP
3 VINZATOR
3 VINZATOR
2 SEF DEP
3 VINZATOR
3 VINZATOR
FUNCT
8000
1000
1000
1000
1000
3755
3755
7000
4000
4000
CODS
100000
100000
120000
120000
130000
160000
160000
160000
130000
130000
10 records selected.
16) S se afieze datele salariailor subordonai direct salariatului ION
ION.
SQL> SELECT MAJRCA,NUME,LEVEL,
2
FUNCT,CODS,CODD
3
4
5
6
FROM SALARIAI
WHERE LEVEL=2
CONNECT BY PRIOR MARCA=CODS
START WITH NUME='ION ION'
MARCA NUME
1000 COMAN RADU
2500 VLAD VASILE
3755 DORU DAN
4000 PAUL TEFAN
LEVEL
2
2
2
2
FUNCT
SEF DEP
SEF DEP
SEF DEP
SEF DEP
CODS
7000
7000
7000
7000
CODD
130000
160000
130000
160000
4 records selected.
CAPITOLUL 6. SELECTAREA DATELOR DIN TABELELE BAZEI
DE DATE.................................................................................................. 1
6.1. Comanda SELECT......................................................................... 1
6.2. Utilizarea clauzei FROM ............................................................... 3
6.3 Utilizarea operatorilor n formularea condiiilor de selecie din
clauza WHERE ..................................................................................... 5
6.3.Ordonarea liniilor rezultate n urma unei cereri............................ 12
6.4. Selecii din mai multe tabele ........................................................ 14
6.5. Realizarea cererilor incluse .......................................................... 18
6.6. Utilizarea expresiilor, funciilor, variabilelor sistem i pseudocoloanelor n selectarea datelor........................................................... 24
6.7.Utilizarea funciilor de grupare i a clauzei GROUP BY n
selectarea datelor................................................................................. 38
6.8. Operaii pe tabele structurate arborescent .................................... 46
codang
number (5) references DatePers(codang),
luna
number (3),
zilelucr
number(3),
orezi
number(3),
zileco
number(3),
zilecm
number(3),
orelucrate
number(4),
constraint pk primary key(codang,luna)
);
CREATE TABLE SporVechime
(
nr
number (3) primary key,
dela
number (3),
panala
number (3),
procent
number (3)
);
CREATE TABLE Taxe
(
den
varchar2 (10) primary key,
procent
number (2),
cotamax
number (15)
);
CREATE TABLE Deduceri
(
den
varchar2 (30) primary key,
cotasuma
number(15),
cotaproc
number(2),
cotamax
number(15)
);
2) S se ncarce cu date tabelele create.
SQL> DELETE FROM DatePers;
INSERT INTO DatePers VALUES
(100, 'Ion Ion', '1234567890100', '10-JAN-1970', 'Mangaliei 100',
'Constanta', '0722123456');
INSERT INTO DatePers VALUES
3) S se afieze numele tuturor angajailor care sunt din localitile a cror nume
ncepe cu litera M.
SQL> SELECT nume, localitate
FROM DatePers
WHERE localitate LIKE 'M%';
CODANG NUME
CNP
DataN
ADRESA
LOCALITATE TELEFON
--------------------------------------------------------------------------------------------------------------------------------------------------------300
Ionescu Gheorghe 1234567890300
10-MAR-1980
Ferdinand 48 Mangalia
0788123456
DELA ||'-'|| PANALA ||''|| SUMA || '+' || PROCENT ||'%PENTRU CEEA CE DEPASESTE'
---------------------------------------------------------------------------------------------------------------------------0 - 2100000
0 +
18%
pentru ceea ce depaseste
0
2100001 - 5200000
378000 +
23%
pentru ceea ce depaseste 2100001
5200001 - 8300000
1091000 +
28%
pentru ceea ce depaseste 5200001
8300001 - 11600000
1959000 +
34%
pentru ceea ce depaseste 8300001
11600001 - 999999999999
3081000 +
40%
pentru ceea ce depaseste 11600001
7) S se afieze, concatenat, codul angajatului i luna din tabela Pontaj. Pentru irul
astfel creat s se afieze lungimea sa.
SQL> SELECT CONCAT (codang, luna), ANGAJAT_LUNA
LENGTH (concat (codang,luna)) LUNGIME_SIR
FROM Pontaj;
ANGAJAT_LUNA LUNGIME_SIR
-----------------------------------------------1001
4
2001
4
3001
4
ROUND (41000/32000, 2)
ROUND (41000/32000, 3)
FROM DUAL;
2_ZECIMALE
3_ZECIMALE
-------------------- -------------------------1.28
1.281
2_ZECIMALE,
3_ZECIMALE
ANI,
ANI_CU_LUNI
NUME
ANI
ANI_CU_LUNI
----------------------------------------------------------------------------------------Ion Ion
34
34.2
Popescu Ion
29
29.1
Ionescu Gheorghe
24
24
CODANG
NUME
SAL_BAZA
SAL_INDEXAT
---- ------------------------------------------------------------------------------------------------100
Ion Ion
5000000
5250000
200
Popescu Ion
6500000
6500000
300
Ionescu Gheorghe 15000000
16500000
18) S se afieze salariu de baz mediu, salariu minim i salariu maxim pentru toi
salariaii cu codul cuprins ntre 10 i 1000.
SQL> SELECT Avg (salbaza)
MEDIU,
Min (salbaza)
MINIM,
Max (salbaza)
MAXIM
FROM DateSal
WHERE codang BETWEEN 10 AND 1000;
MEDIU MINIM MAXIM
-----------------------------------------------7875000 3500000 16500000
20) S se afieze toi angajaii din structura ierarhic a societii. Rdcina arborelui
este Directorul .
SQL> SELECT LPAD (' ',5*(LEVEL-1)) || codang, functia
FROM DateSal ds
START WITH functia='Director'
CONNECT BY PRIOR codang=codsef;
Rezultatul este:
LPAD('',5*(LEVEL-1))||CODANG
FUNCTIA
----------------------------------------------------------------300
Director
100
Ec
200
Inginer
400
Tehnician
ds.salbaza,
ds.persintr,
CODANG NUME
FUNCTIA SALBAZA PERSINTR VECHIME CODSEF
--------------------------------------------------------------------------------------------------------------400
Popa Vasile Tehnician 3500000
4
25
200
24) S se adauge n tabela Pontaj datele pentru noul angajat (cu date introduse de la
tastatura).
SQL> PROMPT S se adauge n Tabela Pontaj datele pentru:
INSERT INTO Pontaj (codang, luna, zilelucr, orezi, zileco, zilecm,
orelucrate)
VALUES('&CodAngajat',&LunaPontaj','&ZileLucr','&OrePeZi',
'&ZileConOdihna','&ZileConMed',' &OreLucrEfectiv');
S se adauge n Tabela Pontaj datele pentru:
Enter value for codangajat:
400
Enter value for lunapontaj:
1
Enter value for zilelucr:
22
Enter value for orepezi:
8
Enter value for zileconodihna: 1
Enter value for zileconmed:
1
Enter value for orelucrefectiv: 8
1 row created.
TAXA NOUA
2
3
Old
1: INSERT INTO Taxe VALUES
New
1: INSERT INTO Taxe VALUES
1 row created.
('&den','&procent','&cotamax')
('TAXA NOUA','2','3')
26) S se creeze o nou tabel pentru Datele Personale ale Angajatilor din Constana
(DatePersCta) i s se adauge ulterior n aceast tabel datele personale ale
angajailor din Constana existente n tabela iniial DatePers.
SQL> CREATE TABLE DatePersCta
(
codang number(5) primary key,
nume varchar2(35),
cnp varchar2(13),
datan date,
adresa varchar2(30),
localitate varchar2(15),
telefon varchar2(10)
);
INSERT INTO DatePersCta
SELECT * FROM DatePers
WHERE localitate='Constanta';
COMMIT;
SELECT * FROM DatePersCta;
CODANG NUME
CNP
DataN
ADRESA
LOCALITATE
TELEFON
-----------------------------------------------------------------------------------------------------------------------------------------------------100
Ion Ion
1234567890100 10-JAN-1970
Mangaliei 100
Constanta
0722123456
200
Popescu Ion 1234567890200 10-FEB-1975
Tomis 232
Constanta
0744123456
28) S se tearg toate nregistrrile din DatePersCta unde numrul de telefon ncepe
cu 0744...
SQL> DELETE FROM DatePersCta
WHERE telefon LIKE '0744%';
SELECT * FROM DatePersCta;
CODANG NUME CNP
DataN
ADRESA
LOCALITATE
TELEFON
-----------------------------------------------------------------------------------------------------------------------------------------------------100
Ion Ion 1234567890100
10-JAN-1970
Mangaliei 100
Constanta
0722123456
SQL>
SQL>
SQL>
SQL>
// nume secven
// pasul de incrementare
// valoarea de pornire a secvenei
// valoarea maxim a secvenei
// secven finit
La execuie se observ adugarea tuplului 10127-FACT26FEB04-T5, cheia primar astfel definit, pentru cmpul codd, fiind
prima valoare a secvenei SECV. La fiecare apelare a cuplului INSERTSELECT secvena SECV anterior creat va incrementa automat cheia
primar Codd din tabela Documente.
3) S se adauge nregistrrile corespunztoare pentru o recepia a
100 de buci din produsul P3 i alte 200 de buci din produsul P4 de la
furnizorul 4, tiindu-se c factura a fost emis de furnizor cu 2 zile
nainte de recepia produselor.
SQL> INSERT INTO tranzactii VALUES
('T5','R', sysdate, '4','1');
SQL> INSERT INTO documente VALUES
(secv.nextval, 'FACT', sysdate-2, 'T5',0);
Dup inserare:
SQL> select * from documente;
CODD
DEND
DATA
CODT VAL
---------------------------------------- ------------------------------20123
NIR
08-JAN-05
T1
10124
FACT
10-NOV-05
T2
20124
NIR
10-NOV-05
T2
30122
AVIZ
10-DEC-05
T3
10125
FACT
10-DEC-05
T3
30123
AVIZ
11-FEB-05
T4
10126
FACT
11-FEB-05
T4
40123
CHIT
11-FEB-05
T4
10123
FACT
08-JAN-05
T1
10127
FACT
27-FEB-06
T5
0
20125
NIR
29-FEB-06
T5
0
FROM clienti;
LITERA_MARE_NUME
INITCAP (LOC)
------------------------------------- -------------------------Interconn
Bucuresti
Depozitul De Calculatoare
Bucuresti
Flamingo
Cluj
Ultra Pro
Timisoara
Flanco
Cluj
SQL> SELECT
RPAD(CODF,20,'*')
RPAD(DENF,20)
RPAD(LOC,20,'-')
------------------------------ -------------------- ---------------------------------------------------1* * * * * *
INTERCONN
BUCURESTI---2* * * * * *
Computer Network
Iasi----------------3* * * * * *
Python
Cluj---------------4* * * * * *
Blue Ridge
Bucuresti---------5* * * * * *
Deck Electronics
Iasi-----------------
9. Funciile de dat
1) S se afieze denumirea furnizorilor cu care nu s-au mai ncheiat
tranzacii n ultimele 6 luni.
SQL> SELECT codf, denf FROM furnizori
WHERE codf NOT IN
(
SELECT codf FROM tranzactii
WHERE MONTHS_BETWEEN (sysdate,dataora)<=6
);
CODF
DENF
----- -----------------------------2
Computer Network
3
Python
5
Deck Electronics
FROM produse
WHERE termen='01-Aug-07' ;
CODP
DENP
LUNI_MAXIME_GARANTIE
---- ---------------------------------------------------------------------------P1
Monitor 17 inch
29.072489
De exemplu:
6) S se folosesc funcia ROUND pentru a returna prima zi a lunii sau
anului sau prima zi a urmtoarei luni sau an, n funcie de data declarat.
SQL> SELECT SYSDATE,
ROUND (SYSDATE, 'MONTH' ) LUNA_ROTUNJITA,
ROUND (SYSDATE,'YEAR') ANUL_ROTUNJIT
FROM DUAL;
SYSDATE
LUNA_ ROTUNJITA
ANUL_ ROTUNJIT
--------- --------- --------------------------------------------------------------------------02-SEP-05
01-SEP-05
01-JAN-06
8)
Funcia TRUNC(data1,'char') gsete prima zi a lunii care e
coninut n data1, dac char = 'MONTH' sau gsete prima zi a anului
care conine data1dac char= 'YEAR'. S se utilizeze facilitile acestei
funcii.
SQL> SELECT SYSDATE DATA_CURENTA,
TRUNC (SYSDATE, 'MONTH') PRIMA_ZI_LUNA,
TRUNC (SYSDATE,'YEAR') PRIMA_ZI_AN
FROM SYS.DUAL;
8. Funcii matematice:
1) S se afieze lungimea atributului Denumire client din tabela Clieni
SQL> SELECT denc,
LENGTH (denc) LUNGIME_NUME
FROM clienti;
DENC
LUNGIME_NUME
------------------------------ ----------------------INTERCONN
9
Depozitul de calculatoare
25
Flamingo
8
Ultra Pro
9
Flanco
6
Introduceti comision:
10
DENP
PRET
COMISION (%) VALOARE_COMISION
----------------------------------------- --------------------------------------------------------------Monitor 17inch
3500000
10
35000
CD-RW ASUS 24x10x40x 1000000
10
10000
Tastatura qwerty
300000
10
3000
CPU AMD Athlon 1.4GHz 2700000
10
27000
Mouse A4TECH
100000
10
1000
P.codp,
stoc STOC_INITIAL,
SUM (stoc+IE*cant) STOC_CURENT
produse P, proddoc PD
WHERE
GROUP BY
P.codp = PD.codp
P.codp, stoc;
CODP
STOC_INITIAL
STOC_CURENT
---- ---------- ---------------------------------------------P1
1000
6100
P2
500
2300
P3
100
600
P4
700
4350
P5
100
300
9) S se afieze doar acele produse pentru care cantitatea este mai mare
sau egal cu 200.
SQL> SELECT codp, MAX (cant) CANT_MAXIMA
FROM proddoc
HAVING MAX (cant) > = 200
GROUP BY codp;
CODP CANT_MAXIMA
----- -------------------------P1
500
P2
500
P4
500
10) S se afieze doar acele produse pentru care cantitatea medie este
mai mare sau egal cu 200.
SQL> SELECT codp, AVG (cant) MEDIE
FROM proddoc
GROUP BY codp
HAVING AVG (cant) > 200;
CODP
MEDIE
----------------------------P1
300
P2
350
P4
391.66667
GROUP BY codp;
CODP
PRET_MEDIU
---------------------------------P2
1000000
P3
300000
P4
2700000
P5
100000
VZ_MAX
VZ_MED VZ_MIN VZ_TOTAL
--------- --------- --------- ------------------------------------1.103E+09
735000000
367500000
210000000
210000000
210000000
1.418E+09
1.418E+09
1.418E+09
1.470E+09
210000000
1.418E+09
19) S se afieze tranzaciile cu valoare mai mic dect cea mai mare
valoare a unei tranzacii cu furnizorul 4
SQL> SELECT codt, valoare
FROM documente
WHERE valoare < ANY
(
SELECT valoare
FROM documente d, tranzactii t
WHERE d.codt=t.codt
AND codf='4'
);
CODT
VALOARE
----- ---------------------T2
1.255E+09
T3
550000000
T3
550000000
T5
570000000
T5
570000000
20) Afiai produsele care au cantitatea mai mare dect cea mai mic
cantitate a produsului P4 (min(cant)P4=200).
P4
P4
500
500
CODD
DEND
DATA
CODT
VALOARE
------- ---- --------- ----- ----------------------------------------------------------------------------------------------20123
NIR
08-JAN-03
T1
2.250E+09
10123
FACT
08-JAN-03
T1
2.250E+09
30123
AVIZ
11-FEB-03
T4
2.400E+09
10126
FACT
11-FEB-03
T4
2.400E+09
SALGRADE
TRANZACTII
10 rows selected.
CREATE VIEW
TO AGENT001;
37) S se modifice parola utilizatorului AGENT001 cu noua_parola
SQL> ALTER USER AGENT001
IDENTIFIED BY noua_parola;
38) S se creeze rolul AgVanz cu drepturile RESOURCE si CONNECT
la nivel de sistem.
SQL> CREATE ROLE agvanz;
SQL> SET ROLE AgvVanz;
SQL> GRANT RESOURCE, CONNECT TO AgVanz;
39) S se ataeze rolul AgVanz utilizatorului AGENT001.
SQL> GRANT AgVanz TO AGENT001;
40) S se anuleze drepturile primite de utilizatorul AGENT001 pe tabela
Documente.
SQL> REVOKE ALL ON documente FROM AGENT001;
41) S se creeze tabela partiionat Vnzari (codt, data, suma) cu partiii
pentru vnzarile din ultimele 3 luni.
SQL> CREATE TABLE
vanzari (codt varchar2 (5), data date, suma number (11) )
STORAGE (INITIAL 100K NEXT 50K) LOGGING
PARTITION BY RANGE(data)
(PARTITION LUNA03 VALUES LESS THAN (4)
TABLESPACE T0,
PARTITION LUNA02 VALUES LESS THAN (3)
TABLESPACE T1,
PARTITION LUNA01 VALUES LESS THAN (2)
TABLESPACE T2);
42) S se adauge noi tupluri din tabela Tranzacii n partiia LUNA02 din
tabela Vnzri.
ANEXE
ANEXA 1
CUVINTE REZERVATE
LIST ROWID
LOCK ROWNUM
ACCES DISTINcT LONG ROWS
ADD DOES MAJCEXTENTS RUN
ALL DROP MINUS SELECT
ALTER MODE SESSION
AND ELSE MODIFY SET
ANY ERASE MOVE SHARE
APPEND EVALUATE NEW SIZE
AS EXCLUSIVE NOAUDIT SMALLINT
ASC EXISTS NOCOMPRESS SPACE
ASSERT FILE NOLIST START
ASSIGN FLOAT NOSYSSORT SUCCESSFUL
AUDIT FOR NOT SYNONYM
BETWEEN FORMAT NOWAIT SYSDATE
BY FROM NULL SYSSORT
CHAR GRANT NUMBER TABLE
CHECK GRAPHIC OF TEMPORARY
CLUSTER GROUP OFFLINE THEN
COLUMN HAVING OLD TO
COMMENT IDENTIFIED ON TRIGGER
COMPRESS IF ONLINE UID
CONNECT IMAGE OPTIMIZE UNION
CONTAIN IMMEDIATE OPTION UNIQUE
CONTAINS IN OR UPDATE.
CRASH INCREMENT ORDER USER
CREATE INDEX PAGE USING
CURRENT INDEXED PARTITION VALIDATE
DATAPAGES INDEXPAGES PCTFREE VALUES
DATE INITIAL PRIOR VARCHAR
DBA INSERT PRIVILEGES VARGRAPHIC
DBLINK INTEGER PUBLIC VIEW
DECIMAL INTERSECT RAW WHENEVER
DEFAULT INTO RENAME WHERE
DEFINITION IS REPLACE WITH
DELETE LEVEL REPORT
DESC LIKE RESOURCE
REVOKE
ANEXA 2
OPERATORI UTILIZATI IN LIMBA JUL SQL*PLUS
A. Sintaxa operatorilor SQL*PLUS
Operator
&
&,&&
Functie
Specific nlocuirile lexicale ntr-un fiier de comenzi
executat cu START. Opiunile sunt nlocuite prin &s:
prima prin &1, a doua prin &2 etc.
Indic o variabil utilizator ntr-o comand SQL*PLUS.
Se cere o valoare de fiecare dat cnd variabila & este
gsit i se cere o valoare cnd se gsete prima dat
variabila &&. Incheie o variabil de substituie urmat
de un caracter ce ar putea fi parte a numelui variabilei.
Functie
Include o subcerere coninut ntr-o alt comand
Delimiteaz o constant de tip caracter sau dat
calendaristic. Un apostrof ntr-o constant de tip
caracter se preprezint prin dou apostrofuri.
Marcheaz un nume de coloan sau sinonim care
conine caractere speciale. Marcheaz literalii ntr-un
format de tip dat calendaristic.
Precede un nume de legtur la o baz de date, ntr-o
clauz FROM.
Functie
Operatori unari + i (valori pozitive, respectiv valori
negative)
Operatori de nmulire i mprire
Operatori de adunare i scdere
Concatenare de iruri de caractere
D. Operatori logici
Operator
<, >, =, >=, <=, !=, <>
NOT
AND
OR
[NOT] IN(list)
ANY
ALL
[NOT] BETWEEN X AND
Y
EXISTS
[NOT] LIKE
IS [NOT] NULL
Functie
Operatori de comparatie
Funcia logic NU
Funcia logic I
Funcia logic SAU
Egal cu oricare valoare din lista de valori
Indic o valoare oarecare dintr-o mulime
Indic toate valorile unei mulimi
Valoarea unei variabile [nu] se gsete n intervalul
[x,y]
Condiia este adevrat dac o subcerere returneaz cel
puin un rnd
Compar valoarea unui cmp cu un ir de caractere.
Dac n irul de caractere urmeaz
% se compar cu orice secvent de caractere; _ - se
compar cu orice caracter;
Operatorul specific dac valoarea unei variabile este
sau nu nul
Functie
Combin mai multe cereri, returnnd reunirea liniilor
selectate de cererile individuale
Combin mai multe cereri, returnnd intersecia liniilor
selectate de cererile individuale
Combin mai multe cereri, returnnd diferena liniilor
selectate de dou cereri (rndurile distincte selectate de
prima cerere i neselectate de a doua cerere)
Functie
Indic faptul c o coloan ce l precede este coloan de
jonciune extern (OUTER JOIN COLUMN)
Definte relaiile printe-fiu ntre nodurile unei cereri
structurate arborescent. Dac operatorul PRIOR
precede o expresie din stnga unei egaliti, se face o
selecie descendent. Dac operatorul PRIOR precede o
expresie din dreapta unei egaliti se va face o selecie
ascendent.
ANEXA 3
PSEUDOCOLOANE UTILIZATE IN LIMBA JUL SQL*PLUS
Numr coloan
LEVEL
NULL
ROWID
ROWNUM
SYSDATE
UID
USER
Valoare returnat
1 pentru rdcin, 2 pentru subdirector (copil) al
rdcinii etc. Se utilizeaz n comanda SELECT i
cluza CONNECT BY
Returneaz o valoare nul. Nu poate fi folosit n
expresiile logice.
Numrul de identificare al rndului. Un identificator de
rnd este de tipul ROWID i nu de tipul numr sau
caracter.
Numrul de ordine al rndului selectat din tabel
(numrnd de la 1)
Data calendaristic i timpul curent
Identificator de utilizator, este un numr unic pentru
fiecare utilizator
Returneaz numele utilizatorului curent