Documente Academic
Documente Profesional
Documente Cultură
Elemente SQL
Elemente SQL
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