Documente Academic
Documente Profesional
Documente Cultură
Laborator 1 SQL
SQL*Plus
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
4. Cum putem stabili o valoare mai mare decât 100 de caractere pe linie, astfel încât întreaga linie s
fie vizibil ?
Comanda DEFINE
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.
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.
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.
• 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:
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
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.
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’.
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.
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.
Pagina: 1
Pagina: 3
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.
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.