Sunteți pe pagina 1din 13

Baze de date-Anul 2 (semestrul 2)

Laborator 1 SQL

SQL*Plus

I. Variabile sistem. Comanda SET

Comanda SET are urmatoarea forma generala:


SET variabila_sistem valoare
Componenta variabila_sistem controleaz un aspect al mediului în care se desf oar sesiunea. O parte
dintre aceste variabile sunt prezentate in continuare:

Variabila sistem (si valorile Descriere


la care poate fi setata)
FEED[BACK] {nr_întreg | OFF Afi eaz num rul de linii returnate de o cerere, atunci când aceasta
| ON} selecteaz un num r de înregistr ri mai mare decât valoarea
variabilei.
HEA[DING] {OFF | ON} Determin afi area capetelor de coloan în rapoarte.
LINESIZE nr_întreg Seteaz l imea, în caractere, a paginii pe care sunt afi ate
rezultatele interog rilor.
PAGESIZE nr_întreg Seteaz num rul de linii al unei pagini.
NUMFORMAT format stabile te formatul implicit pentru afi area valorilor numerice în
rezultatele interog rilor.
PAUSE {text | ON | OFF} Decide oprirea la începutul fiec rei pagini de rezultate, urmând ca
defilarea s fie reluat dup ap sarea tastei return.
TIME {ON | OFF} Determin afi area orei curente înaintea fiec rui prompt de
comand .
VERIFY {ON | OFF} Determin listarea fiec rei linii din fi ierul de comenzi, înainte i
dup substitu ie.
DEFINE Seteaz caracterul de substitu ie, care implicit este „&“.
ESCAPE Define te un caracter care, utilizat înainte de caracterul de
substitu ie, determin tratarea acestuia drept un caracter obi nuit;
implicit, caracterul escape este „\“.
UNDERLINE caracter Permite modificarea caracterului folosit pentru sublinierea capetelor
de coloan . Caracterul implicit este „-“.

Vizualizarea valorilor curente ale variabilelor de mediu este posibil prin utilizarea comenzii:
SHOW variabila

Exercitii (I)
1. Ce comenzi SQL*Plus a i utilizat in laboratoarele precedente ?
2. Determinati afi area orei înaintea oric rui prompt de comand .
3. Care sunt set rile actuale pentru dimensiunea paginii i a liniei în interfa a SQL*Pus? Seta i
dimensiunea liniei la 100 de caractere i pe cea a paginii la 24 de linii.
SHOW LINESIZE
SHOW PAGESIZE

SET LINESIZE 100


SET PAGESIZE 24

4. Cum putem stabili o valoare mai mare decât 100 de caractere pe linie, astfel încât întreaga linie s
fie vizibil ?

5. se analizeze efectul set rii (reset rii) variabilei sistem FEED[BACK].


SET FEED OFF
SELECT last_name
FROM employees;
SET FEED ON
/
SELECT employee_id
FROM employees
WHERE last_name= King ;
SET FEED 5
/
SET FEED ON
/
6. S se analizeze op iunile variabilei sistem HEA[DING].
SET HEAD OFF
SELECT *
FROM employees
WHERE last_name= King ;
SET HEAD ON
/
7. Pentru coloanele de tip numeric s se stabileasc urm torul format 9,999.99, apoi s se revin la
formatul implicit.
SET NUMFORMAT 99,999.99
SELECT employee_id, salary
FROM employees;
Revenirea la formatul implicit se poate realiza din meniul interfe ei SQL*PLUS -> optiuni -> mediu
8. se analizeze op iunile variabilei sistem PAUSE.
SET PAUSE ON
SELECT employee_id, last_name
FROM employees;
SET PAUSE press a key to continue
/
SET PAUSE OFF

9. se analizeze variabila sistem UNDERLINE.


SET UNDERLINE
SELECT employee_id, last_name
FROM employees;
SET UNDERLINE

II. Variabile de substitu ie

• Variabilele de substitu ie sunt utile în crearea de comenzi/script-uri dinamice (care depind de ni te


valori pe care utilizatorul le furnizeaz la momentul rul rii).
• Variabilele de substitu ie se pot folosi pentru stocarea temporar de valori, transmiterea de valori
între comenzi SQL, modificarea dinamica a header-ului sau footer-ului rapoartelor. Ele pot fi create
prin:
Ø comanda DEFINE.( DEFINE variabila = valoare )
Ø Prefixarea cu & (indica existen a unei variabile într-o comanda SQL, dac variabila nu
exist , atunci SQL*Plus o creeaz ).
Ø Prefixarea cu && (indic existen a unei variabile într-o comand SQL, dac variabila nu
exist , atunci SQL*Plus o creeaz ). Deosebirea fa de & este c , dac se folose te &&,
atunci referirea ulterioar cu & sau && nu mai cere ca utilizatorul s introduc de fiecare
dat valoarea variabilei. Este folosit valoarea dat la prima referire.

Variabilele de substitu ie pot fi eliminate cu ajutorul comenzii UNDEF[INE]

Comanda DEFINE

Forma comenzii Descriere


Creaza o variabila utilizator cu valoarea de tip sir de caracter
DEFINE variabila = valoare
precizata.
DEFINE variabila Afiseaza variabila, valoarea ei si tipul de data al acesteia.
Afiseaza toate variabilele existente in sesiunea curenta, impreuna
DEFINE
cu valorile si tipurile lor de date.

Observatii:
Ø Variabilele de tip DATE sau CHAR trebuie sa fie incluse intre apostrofuri in comanda
SELECT.
Ø Dupa cum le spune si numele, variabilele de sustitutie inlocuiesc/substituie in cadrul
comenzii SQL variabila respectiva cu sirul de caractere introdus de utilizator.
Ø Variabilele de sustitutie pot fi utilizate pentru a inlocui la momentul rularii:
- conditii WHERE;
- clauza ORDER BY;
- expresii din lista SELECT;
- nume de tabel;
- o intreaga comanda SQL;
Ø odata definita, o variabila ramane pana la eliminarea ei cu o comanda UNDEF sau pana
la terminarea sesiunii SQL*Plus respective.
Ø Optiunea VERIFY a comenzii SET permite afisarea sau nu a comenzii inainte si dupa
inlocuirea variabilei de substitutie.
III. Comenzi interactive in SQL*Plus

Comanda Descriere
ACC[EPT] variabila [tip] [PROMPT Cite te o linie de intrare i o stocheaz într-o variabil
text] utilizator.
PAU[SE] [text ] Afi eaz o linie vid , urmat de o linie con inând text,
apoi a teapt ca utilizatorul s apese tasta return. De
asemenea, aceast comand poate lista dou linii
vide, urmate de a teptarea r spunsului din partea
utilizatorului.
PROMPT [text] Afi eaz mesajul specificat sau o linie vid pe ecranul
utilizatorului.

Exercitii (II, III)

10. Sa se afiseze codul, numele, salariul si codul departamentului din care face parte pentru un angajat
al carui cod este introdus de utilizator de la tastatura. Analizati diferentele dintre cele 4 posibilitati
prezentate mai jos :

I.
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE employee_id = &p_cod;

II.
DEFINE p_cod; // Ce efect are?
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE employee_id = &p_cod;
UNDEFINE p_cod;

III.
DEFINE p_cod=100;
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE employee_id = &&p_cod;
UNDEFINE p_cod;

IV.
ACCEPT p_cod PROMPT cod= ;
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE employee_id = &p_cod;

11. Sa se afiseze numele, codul departamentului si salariul anual pentru toti angajatii care au un anumit
job.
12. Sa se afiseze numele, codul departamentului si salariul anual pentru toti angajatii care au fost
angajati dupa o anumita data calendaristica.
13. Sa se afiseze o coloana aleasa de utilizator, dintr-un tabel ales de utilizator, ordonand dupa aceeasi
coloana care se afiseaza. De asemenea, este obligatorie precizarea unei conditii WHERE.

SELECT &&p_coloana -- && determina ca valoarea lui p_coloana san nu mai


--fie ceruta si pentru clauza ORDER BY, urmand sa
--fie utilizata valoarea introdusa aici pentru toate
--aparitiile ulterioare ale lui &p_coloana
FROM &p_tabel
WHERE &p_where
ORDER BY &p_coloana;

IV. Comenzi pentru formatarea rezultatelor

Caracteristicile unui raport pot fi controlate prin utilizarea comenzilor COLUMN, TTITLE, BTITLE,
BREAK.

1. Comanda COLUMN permite controlul formatului unei coloane i are sintaxa urm toare:
COL[UMN] [ {nume_coloana | alias} [op iune] ]
Op iunile principale ale acestei comenzi sunt prezentate în continuare.
Ø CLE[AR] suprim toate format rile coloanei.
Ø ALI[AS] alias atribuie unei coloane alias-ul specificat, care poate fi folosit pentru a referi
coloana în comenzile BREAK, COMPUTE, COLUMN.
Ø HEA[DING] text seteaz titlul cap tului de coloan (caracterul „|“ determin trecerea la o
linie nou în cap tul de coloan .
Ø FOR[MAT] format stabile te modul de afi are a datelor coloanei.
Ø NOPRI[NT] ascunde coloana.
Ø NUL[L] text specific textul care va fi afi at în locul valorilor null.
Ø PRI[NT] determin afi area coloanei.
Dac nu se specific nici o op iune a comenzii COLUMN, aceasta va afi a set rile curente pentru o
coloan (COLUMN nume_coloana) sau pentru toate coloanele (COLUMN).
Comanda CLE[AR] COL[UMN] determin suprimarea set rilor tuturor coloanelor.
Formatul unei coloane se specific printr-o constant text. Pentru coloane numerice, în clauza FORMAT,
se pot preciza elementele descrise i exemplificate în urm torul tabel:
Element Descriere Exemplu Rezultat
9 Reprezint orice cifr , iar din format se vor 999999 1234
suprima zerourile nesemnificative.
0 For eaz afi area unor zerouri. 099999 001234
$ Afi eaz simbolul „$“. $9999 $1234
L Afi eaz simbolul monedei locale. L9999 L1234
. Determin pozi ia punctului zecimal. 9999.99 1234.00
, Reprezint separatorul pentru grupele de 9,999 1,234
câte 3 cifre alc tuind miile.
B Afi eaz valoarea 0 ca blank. B9999
MI Afi eaz „-“ dup valorile negative, iar dup 9999MI 1234_
cele pozitive las un spa iu liber. 1234 -
S Returneaz „+“ pentru valori pozitive i „-” S9999 +1234
pentru valori negative, în pozi ia indicat . -1234 -
PR Afi eaz numerele negative între paranteze 9999PR _1234_
ascu ite („< >“), iar pentru valorile pozitive <1234>
adaug câte un spa iu la început i la sfâr it.

Ø Pentru coloanele de tip caracter, l imea implicit este cea definit în baza de date.
Implicit, SQL*Plus aliniaz aceste coloane la stânga.
Ø Modificarea l imii unei coloane de tip caracter sau dat calendaristic la n caractere se
realizeaz prin op iunea An.

2. Comanda BREAK determin :


Ø împ irea liniilor în sec iuni i suprimarea valorilor duplicat;
Ø inserarea unei linii libere de fiecare dat când valoarea unei coloane date se schimb ;
Ø afi area valorilor calculate prin comanda COMPUTE la schimbarea valorii unei coloane
date sau la sfâr itul raportului.

• Spre a asigura buna fun ionare a acestei comenzi, este indicat utilizarea clauzei ORDER BY pentru
a ordona coloanele dup ale c ror valori se face gruparea. Sintaxa comenzii este:

BRE[AK] [ON {nume_coloan | expresie | ROW | REPORT}


[[SKI[P] n| [SKI[P] ] PAGE] [NODUP[LICATES] | DUP[LICATES] ]]

• Clauza ON poate ap rea de mai multe ori într-o comand BREAK.


• Comanda BREAK, f nici o clauz , determin listarea defini iei diviz rii curente. Fiecare comand
BREAK nou o înlocuie te pe cea precedent . Pentru suprimarea unei comenzi BREAK, se
utilizeaz CLEAR BREAKS.

ON ROW specific ac iunile pe care urmeaz s le efectueze SQL*Plus atunci când o


instruc iune SELECT returneaz o linie. Indiferent de locul în care apare ON
ROW în instruc iunea BREAK, diviziunea de acest tip va fi considerat cea mai
intern
ON REPORT marcheaz loca ia din raport la care SQL*Plus va efectua calculele specificate în
comanda COMPUTE corespunz toare. Aceast clauz se folose te pentru a
calcula totaluri sau alte valori generale. Indiferent de locul în care apare ON
REPORT în instruc iunea BREAK, diviziunea de acest tip va fi considerat cea
mai extern . SQL*Plus nu va ad uga o pagin la sfâr itul raportului, astfel c nu
se poate utiliza comanda BREAK ON REPORT SKIP PAGE
SKI[P] n insereaz n linii libere înainte de tip rirea liniei pe care a intervenit divizarea
[SKI[P] ] PAGE insereaz num rul de linii corespunz tor unei pagini înainte de afi area liniei
unde a intervenit divizarea. Num rul de linii ale unei pagini poate fi definit utilizând
clauza PAGESIZE a comenzii SET
NODUP[LICATES] afi eaz spa ii libere în locul valorii unei coloane men ionate în comanda BREAK,
dac aceasta con ine o valoare duplicat a coloanei din linia precedent . Op iunea
DUP[LICATES] afi eaz valoarea unei coloane men ionate în comanda BREAK
pentru fiecare linie selectat
3. Comenzile TTITLE, BTITLE permit formatarea antetelor, respectiv a subsolurilor de pagin . Sintaxa
acestor comenzi este:
TTI[TLE] | [BTI[TLE] [specif_tip rire [text | variabil ] …] [OFF | ON]
• Comenzile TTITLE, BTITLE f clauze listeaz defini ia curent a antetului, respectiv a subsolului
de pagin .
• Titlul antetului sau subsolului de pagin se poate specifica fie printr-un text, fie printr-o variabil .
Dac este alc tuit din mai mult de un cuvânt, textul corespunz tor trebuie s fie cuprins între
apostrofuri.
• Clauza OFF determin suprimarea afi rii titlului, f a-i afecta defini ia.

Prin specif_tip rire se poate afi a sau formata un text:

COL n indenteaz pân la coloana n (în sensul de coloan la nivel de pagin , nu de tabel) a
liniei curente
S[KIP] [n] efectueaz un salt peste n linii. Valoarea implicit a lui n este 1
TAB n efectueaz un salt peste n coloane din pagin . Dac n este negativ, saltul va fi f cut
înapoi
LE[FT], aliniaz la stânga, centru, respectiv la dreapta datele de pe linia curent
CE[NTER],
R[IGHT]
BOLD determin tip rirea datelor cu caractere bold
FORMAT fmt specific formatul datelor pân la clauza FORMAT ulterioar sau pân la sfâr itul
comenzii; dac tipul de date al formatului nu corespunde tipului de date al
elementului respectiv, clauza FORMAT nu îl afecteaz

Op iuni de formatare pentru FORMAT:

Element Descriere Exemplu Rezultat


9 O singura cifr cu eliminarea de zerouri 9999 1234
0 O singura cifr f a elimina zerourile 09999 01234
$ Semnul $ în fa a valorilor numerice. $9999 $1234
L Semnul monezii na ionale în fa a valorilor numerice. L9999 L1234
. Punctul ce separ zecimalele 9999.99 1234.00
, Separatorul de sute 9,999.99 1,234.00
An Lungimea unui ir de caractere. A5 '1234 '

!!! Observa ii:


• Efectul unei comenzi pentru formatare persist pân la sfâr itul sesiunii SQL*Plus sau pân
cînd formatul curent este suprascris sau suprimat.
• Se recomand resetarea valorilor mediului SQL*Plus, la sfâr itul fiec rui raport (revenirea la
valorile implicite).
• Nu exist o comand pentru setarea unei variabile SQL*Plus la valoarea sa implicit .
Utilizatorul trebuie fie s cunoasc aceast valoare, fie s încheie sesiunea i apoi s se
conecteze din nou.
• În comenzile pentru format, trebuie referite alias-urile coloanelor (dac exist ), i nu numele
acestora.

V. Cum se creeaza un fisier script ?


De obicei, un fi ier script const în comenzi SQL*Plus i cel pu in o instruc iune SELECT.
Crearea unui fi ier script pentru execu ia unui raport se poate realiza urmând etapele expuse în
continuare.
1) Se redacteaz instruc iunea SELECT la prompt-ul SQL sau în regiunea de editare din
iSQL*Plus. În cazul în care raportul va utiliza comanda BREAK, instruc iunea trebuie s
con in clauza ORDER BY.
2) Se salveaz instruc iunea SELECT într-un fi ier script.
3) Se editeaz fi ierul script, ad ugându-se comenzile SQL*Plus corespunz toare.
4) Se insereaz comenzile necesare pentru formatare, înaintea instruc iunii SELECT.
5) Se verific dac instruc iunea SELECT este urmat de un caracter pentru execu ie („;“ sau
„/“).
6) Se adaug comenzile pentru suprimarea set rilor, dup caracterul pentru execu ie.
7) Se salveaz fi ierul script.
8) Se execut fi ierul script (prin comenzile @ sau START). În iSQL*Plus, se încarc fi ierul i
se ac ioneaz butonul Execute.
Observa ii:
• Se pot include linii vide între comenzile SQL*Plus ale unui script.
• O comand SQL*Plus poate fi continuat pe linia urm toare dac la sfâr itul liniei curente se
insereaz caracterul „-“.
Exercitii (IV, V)
14. S se realizeze un script (fi ier SQL*Plus) prin care s se afi eze numele, job-ul i data angaj rii
salaria ilor care au început lucrul între 2 date calendaristice introduse de utilizator. S se concateneze
numele i job-ul, separate prin spa iu i virgul , i s se eticheteze coloana "Angajati". Se vor folosi
comanda ACCEPT i formatul pentru data calendaristica MM/DD/YY.

ACCEPT data_inceput PROMPT Introduceti data de inceput


ACCEPT data-sfarsit PROMPT Introduceti data de sfarsit
SELECT .. Angajati, hiredate
FROM .
WHERE hire_date BETWEEN TO_DATE( &data_inceput , mm/dd/yy )
AND TO_DATE( &data_sfarsit , mm/dd/yy );

15. Sa se realizeze un script pentru a afisa numele angajatului, codul job-ului, salariul si numele
departamentului pentru salariatii care lucreaza intr-o locatie data de utilizator. Va fi permisa cautarea
case-insensitive.

16. Sa se modifice fisierul anterior pentru a crea un raport care va contine numele departamentului,
numele angajatului, data angajarii, salariul, comisionul si salariul anual pentru toti salariatii dintr-o
loca ie dat de utilizator. Eticheta i coloanele NUME DEPARTAMENT, NUME ANGAJAT, DATA
INCEPUT, SALARIU si SALARIU ANUAL, plasand etichetele pe linii multiple. Se va permite cautarea
locatiilor, chiar daca sunt introduse numai primele litere ale acesteia.

COLUMN department_name HEADING 'Nume|departament'


COLUMN last_name HEADING 'Nume angajat'
COLUMN salary HEADING 'Salariu' FORMAT '99,999.99'
COLUMN sal_anual HEADING 'Salariu|anual' FORMAT '99,999.99'
SELECT ...

17. a) Listati variabilele utilizator existente. Listati setarile curente ale coloanelor.
b) Modificati fisierul anterior astfel incat sa nu se afiseze data angajarii, iar in locul valorilor NULL ale
coloanei comision, sa se afiseze ‘fara comision’.

COLUMN commission_pct HEADING 'Comision' NULL 'Nu are comision'


COLUMN hire_date NOPRINT

18. Pentru fiecare angajat s se selecteze codul departamentului, numele i job-ul. S se grupeze liniile
rezultatului dup cod departament; grupurile s fie desp ite între ele prin dou rânduri. S se
anuleze efectele comenzii BREAK.
Obs: Efectul comenzii BREAK este vizibil doar daca liniile rezultatului cererii sunt ordonate
corespunzator.

BREAK ON department_id SKIP 2


SELECT department_id, last_name, job_id
FROM employees
ORDER BY department_id;
CLEAR BREAK
19. se creeze un script (fi ier SQL*Plus) prin care sa se obtina un raport care afi eaz codul
departamentului, numele angajatilor corespunzatori i salariile pentru inregistrarile pe care acestea
sunt mai mici decat o valoare introdus de c tre utilizator. Se vor formata coloanele corespunz tor.
Raportul va avea titlu si subsol. La sfarsit, se vor anula efectele comenzii de grupare, a celor de
formatare. De asemenea, se vor suprima variabilele utilizator folosie.

SET FEEDBACK OFF


SET VERIFY OFF
TTITLE CENTER 'Raport | departamente ' BOLD
BTITLE RIGHT 'Confidential ' BOLD
ACCEPT p_val -
PROMPT 'Introduceti valoarea maxima a salariilor considerate: '
BREAK ON department_id
COLUMN department_id HEADING 'Cod | departament '
COLUMN last_name HEADING 'Nume | Angajati '
COLUMN salary HEADING 'Valoare | Salarii '
FORMAT $99,999.00
REM Se specifica instructiunea SELECT
SELECT department_id, last_name, salary
FROM employees
WHERE salary < &p_val
ORDER BY department_id
/
REM Se suprima setarile de coloane
COLUMN department_id CLEAR
COLUMN last_name CLEAR
COLUMN salary CLEAR
UNDEFINE p_val
CLEAR BREAK
SET FEEDBACK ON
SET VERIFY ON

a) Eliminati comanda BREAK On din fisierul precedent. Ce se obtine la executie ?


b) Determinati sa nu se afiseze capetele de coloana in raport.

20. Modificati raportul anterior, astfel incat sa se afiseze si job-urile angajatilor, iar liniile rezultatului sa fie
grupate dup cod departament, iar în interiorul departamentului dup job; grupurile pe departamente
fie desp ite între ele prin dou rânduri, iar grup rile dup job printr-un rând. S se anuleze
efectele comenzii BREAK.

21. se creeze un raport prin care s se afi eze codul departamentului, numele i salariul pentru
fiecare angajat, media salariilor pe departament i media salariilor pe întreprindere.

BREAK ON department_id SKIP 2 ON REPORT


COMPUTE AVG OF salary ON department_id
COMPUTE AVG OF salary ON REPORT
SELECT department_id, last_name, salary
FROM employees
ORDER BY department_id;
CLEAR BREAK
CLEAR COMPUTE

22. S se genereze un raport de forma urm toare:

Pagina: 1

ANGAJATII DEPARTAMENTULUI Marketing


LA DATA DE 20/02/2006
NUME JOB SALARIU
NUME ANGAJAT ANGAJAT ANGAJAT
------------------------------ ------------ ---------- -------
Marketing Hartstein MK_MAN 13000
trg SA_REP 56
Fay MK_REP 6000
****************************** -------
SALARIUL MAXIM 13000
TOTAL 19056
Pagina: 2

ANGAJATII DEPARTAMENTULUI Purchasing


LA DATA DE 20/02/2006

NUME JOB SALARIU


NUME ANGAJAT ANGAJAT ANGAJAT
------------------------------ ------------ ---------- -------
Purchasing Raphaely PU_MAN 11000
Khoo PU_CLERK 3100
Baida PU_CLERK 2900
Colmenares PU_CLERK 2500
egre SA_REP 3654
brtbr SA_REP 290
Himuro PU_CLERK 2600
Tobias PU_CLERK 2800
****************************** -------
SALARIUL MAXIM 11000
TOTAL 28844

Pagina: 3

ANGAJATII DEPARTAMENTULUI Human Resources


LA DATA DE 20/02/2006

NUME JOB SALARIU


NUME ANGAJAT ANGAJAT ANGAJAT
------------------------------ ------------ ---------- -------
Human Resources Mavris HR_REP 6500
****************************** -------
SALARIUL MAXIM 6500
TOTAL 6500

SET PAGESIZE 24
REM SET ECHO OFF FEEDBACK OFF
COLUMN cod NOPRINT
COLUMN name NEW_VALUE nv_name HEADING 'NUME'
COLUMN salariu FORMAT 999999 HEADING 'SALARIU|ANGAJAT'
COLUMN job FORMAT A10 HEADING 'JOB|ANGAJAT'
COLUMN nume_ang FORMAT A12 HEADING 'NUME|ANGAJAT'
COLUMN azi NOPRINT NEW_VALUE nv_azi
TTITLE SKIP 1 LEFT 'ANGAJATII DEPARTAMENTULUI '-
nv_name SKIP 1 LEFT 'LA DATA DE 'nv_azi SKIP 2
BTITLE SKIP 1 LEFT 'Pagina:' FORMAT 99 SQL.PNO
COMPUTE MAX LABEL 'SALARIUL MAXIM' -
SUM LABEL 'TOTAL' OF salariu ON name
BREAK ON name SKIP PAGE ON name
SELECT d.department_id cod,d.department_name name,
e.last_name nume_ang,
e.job_id job,
e.salary salariu, TO_CHAR(SYSDATE,'DD/MM/YYYY') azi
FROM departments d, employees e
WHERE d.department_id=e.department_id
ORDER BY cod;
SET ECHO ON FEEDBACK ON
CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES

23. [Raport bidimensional cu totaluri pe linii si coloane] S se genereze un raport care s con in pentru
fiecare departament: suma salariilor pentru fiecare din job-urile SA_REP, ST_CLERK, SH_CLERK,
IT_PROG, AD_VP, FI_ACCOUNT i suma tuturor salariilor (din toate job-urile). De asemenea, s se
ob in la finalul raportului, suma salariilor pentru fiecare din job-urile men ionate anterior i totalul
tuturor salariilor.

SET ECHO OFF FEEDBACK OFF


SET LINESIZE 110
SET PAGESIZE 24
COLUMN department_name FORMAT A12 HEADING Nume|departament
COLUMN sa_rep FORMAT 99999 HEADING Reprezentanti|vanzari
COLUMN st_clerk FORMAT 99999 HEADING Functionari|stocuri
COLUMN sh_clerk FORMAT 99999 HEADING Functionari|expedieri
COLUMN it_prog FORMAT 99999 HEADING Programatori
COLUMN ad_vp FORMAT 99999 HEADING Vicepresedinti
COLUMN fi_account FORMAT 99999 HEADING Contabili
COLUMN total FORMAT 99999 HEADING Total
BREAK ON REPORT SKIP 2
COMPUTE SUM OF sa_rep ON REPORT
COMPUTE SUM OF st_clerk ON REPORT
COMPUTE SUM OF sh_clerk ON REPORT
COMPUTE SUM OF it_prog ON REPORT
COMPUTE SUM OF ad_vp ON REPORT
COMPUTE SUM OF fi_account ON REPORT
COMPUTE SUM OF total ON REPORT
TTITLE CENTER Raport departamente
SELECT department_name,
SUM(DECODE(job_id, SA_REP ,salary,0)) sa_rep,
SUM(DECODE(job_id, ST_CLERK ,salary,0)) st_clerk,
SUM(DECODE(job_id, SH_CLERK ,salary,0)) sh_clerk,
SUM(DECODE(job_id, IT_PROG ,salary,0)) it_prog,
SUM(DECODE(job_id, AD_VP ,salary,0)) ad_vp,
SUM(DECODE(job_id, FI_ACCOUNT ,salary,0)) fi_account,
SUM(salary) total
FROM departments d, employees e
WHERE d.department_id = e.department_id
GROUP BY department_name
/
CLEAR BREAKS
CLEAR COLUMNS
CLEAR COMPUTES
SET ECHO ON FEEDBACK ON

Tem :
1. S se creeze un raport prin care s se afi eze codul departamentului, job-ul, numele i salariul pentru
fiecare angajat, suma salariilor pe fiecare job, suma salariilor pe departament i suma total a
salariilor (la nivel de raport). Se vor seta coloanele în mod corespunz tor informa iilor afi ate.
2. S se genereze un raport care s con in pentru fiecare ora : media salariilor pentru fiecare din anii
de angajare 1989, 1990, 1991 i media tuturor salariilor (din to i anii de angajare). De asemenea, s
se ob in la finalul raportului, media salariilor pentru fiecare din anii de angajare men iona i anterior.

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

  • Data Base 2007
    Data Base 2007
    Document27 pagini
    Data Base 2007
    Diana Iagar
    Încă nu există evaluări
  • Subinterogations
    Subinterogations
    Document5 pagini
    Subinterogations
    Diana Iagar
    Încă nu există evaluări
  • Mysql: Introducere
    Mysql: Introducere
    Document35 pagini
    Mysql: Introducere
    Diana Iagar
    Încă nu există evaluări
  • Data Base 2007
    Data Base 2007
    Document27 pagini
    Data Base 2007
    Diana Iagar
    Încă nu există evaluări
  • Mysql: Introducere
    Mysql: Introducere
    Document35 pagini
    Mysql: Introducere
    Diana Iagar
    Încă nu există evaluări
  • Security
    Security
    Document45 pagini
    Security
    Diana Iagar
    Încă nu există evaluări
  • Laborator1 SQL An2 Sem2
    Laborator1 SQL An2 Sem2
    Document13 pagini
    Laborator1 SQL An2 Sem2
    Diana Iagar
    Încă nu există evaluări
  • Laborator4 SQL An2 Sem2
    Laborator4 SQL An2 Sem2
    Document15 pagini
    Laborator4 SQL An2 Sem2
    Diana Iagar
    Încă nu există evaluări
  • Data Protection
    Data Protection
    Document72 pagini
    Data Protection
    Diana Iagar
    Încă nu există evaluări
  • Laborator2 SQL An2 Sem2
    Laborator2 SQL An2 Sem2
    Document7 pagini
    Laborator2 SQL An2 Sem2
    Diana Iagar
    Încă nu există evaluări
  • Laborator4 SQL An2 Sem2
    Laborator4 SQL An2 Sem2
    Document15 pagini
    Laborator4 SQL An2 Sem2
    Diana Iagar
    Încă nu există evaluări
  • Concluzie
    Concluzie
    Document1 pagină
    Concluzie
    Diana Iagar
    Încă nu există evaluări
  • Laborator4 SQL An2
    Laborator4 SQL An2
    Document8 pagini
    Laborator4 SQL An2
    Diana Iagar
    Încă nu există evaluări
  • Laborator5 SQL An2
    Laborator5 SQL An2
    Document10 pagini
    Laborator5 SQL An2
    Diana Iagar
    Încă nu există evaluări
  • Project
    Project
    Document59 pagini
    Project
    Diana Iagar
    Încă nu există evaluări
  • 1 SQL An2
    1 SQL An2
    Document6 pagini
    1 SQL An2
    1Revv
    Încă nu există evaluări
  • Laborator3 SQL An2
    Laborator3 SQL An2
    Document9 pagini
    Laborator3 SQL An2
    Diana Iagar
    Încă nu există evaluări
  • SQL Server Triggers
    SQL Server Triggers
    Document41 pagini
    SQL Server Triggers
    Diana Iagar
    Încă nu există evaluări
  • Laborator2 SQL An2
    Laborator2 SQL An2
    Document11 pagini
    Laborator2 SQL An2
    Diana Iagar
    Încă nu există evaluări
  • Project
    Project
    Document59 pagini
    Project
    Diana Iagar
    Încă nu există evaluări