Sunteți pe pagina 1din 133

Arhitectura ANSI-SPARC pe 3 nivele pentru bazele de constă din: nivelul extern, nivelul

conceptual si nivelul intern


Arhitectura unui instrument OLAP este o arhitectura pe: 3 niveluri
Arhitectura unui instrument OLAP include: un motor analitic pe post de server pentru
aplicatiile desktop
Arhitectura unui instrument OLAP include: una sau mai multe baze de date
Arhitectura unui instrument OLAP include: uneltele utilizatorului final pentru operatii de raportare
etc. si un motor analitic pe post de server pentru aplicatiile desktop
Autorul conceptului de "data warehouse" (depozit de date) este: William Inmon
Cardinalul relatiei rezultate din produsul cartezian de relatii este: mai mare decât cardinalul
relatiei rezultate
Cel mai simplu mod de vizualizare a datelor dintr-un depozit de date este reprezentat de: un cub
n-dimensional
CGI înseamnă: Common Gateway Interface
Cunostintele sunt: informatii contextualizate
Datele dintr-un sistem OLTP: ) sunt date dinamice, detaliate, incosistente, fragmentate, redundante
constituie o sursă de date pentru depozitele de date
Datele sunt: informatii primare
Depozitele de date constituie baza informatională a: sistemelor de suport pentru decizii (DSS)
Depozitele de date diferă fată de sistemele informatice clasice din punctul de vedere al ciclului de
dezvoltare si de viată si diferă fată de sistemele OLTP din punctul de vedere al frecventei si tipului de
tranzactii permise
Fluxul de intrare a datelor în depozitul de date constă din operatii de: actualizare în loturi
Forma normală Boyce-Codd este o variantă mai tare a: FN3
În algebra relatională există: operatii unare si binare
Independenta fată de strategiile de acces la datele dintr-o bază de date este: Necesară
Informatiile sunt: date validate, organizate si relationate
Integritatea referentială a bazei de date se referă la: relatiile din baza de date
Interogările de actiune sunt interogări de: actualizare, adăugare, stergere si creare de table
Intr-o bază de date este necesară : si independenta fizică si independenta logică a datelor
Intr-un depozit de date este necesar să existe: un sistem coerent de codificare si reprezentare a
informatiilor un sistem consistent de unităti de măsură un sistem stabil de reprezentare fizică a datelor
Mecanismul charge-back pentru utilizarea resurselor este o caracteristică a: ) depozitelor de
date
Metadatele care intră în componenta unui depozit de date pot fi: metadate administrative
Metadatele care intră în componenta unui depozit de date pot fi: metadate pentru optimizare
MIDI inseamnă:: Musical Instrument Digital Interface
Modelul relational se bazează pe: ) noŃiunea matematică de submultime
Nivelul conceptual; descrie datele si relatiile dintre ele, fără detalii de implementare
Nivelul extern: reprezintă modurile diferite în care diferiti utilizatori ai bazei de date percep
datele stocate în aceasta
O bază de date este: c) un model al microuniversului la care se referă
O bază de date este:= c) si (a) si (b)
O bază de date multimedia este o bază de date care inglobează informatie de tip: text, grafic,
sonor, animat, video
O cheie de acces: pentru depozitele de date cuprinde si o variabilă temporală
O relatie este în FN2 dacă este în FN1 si dacă : ) oricare dintre atributele sale care nu fac parte
din cheia primară este complet dependent functional de cheia primară
O relatie este în FN3 dacă este în FN2 nici unul dintre atributele sale care nu fac parte din cheia
primară nu este, prin tranzitivitate, dependent funcŃional de cheia primară
OLTP înseamnă: on line transactional processing
Operatiile de actualizare a depozitelor de date sunt: de tip adăugare
Pentru optimizarea interogărilor pe baze de date relatioanle se recomandă: toate cele de mai sus
Principalele activităti care compun asa-numitul out-flow din depozitele de date sunt: accesarea
si livrarea datelor
Printre componentele unui depozit de date se numără: componenta back-end
Printre componentele unui depozit de date se numără: componenta front-end si managerul
depozitului de date
Printre componentele unui depozit de date se numără: componenta front-end si componenta back-
end
Printre componentele unui depozit de date se numără: datele detaliate si metadatele
Printre componentele unui depozit de date se numără: datele operationale si metadatele;
Printre componentele unui depozit de date se numără: datele sintetizate si metadatele
Printre componentele unui depozit de date se numără: managerul depozitului de date
Printre componentele unui depozit de date se numără: metadatele
Printre componentele unui depozit de date se numără: unelte de dezvoltare a aplicatiilor
Printre componentele unui depozit de date se numără: unelte pentru sisteme de informatii
executive
Printre componentele unui depozit de date se numără: uneltele de data mining si OLAP si uneltele
de raportare si interogare
Printre regulile cu care W. Inmon a definit depozitele de date se numără: depozitul de date si
mediul operational trebuie să fie separate, depozitul de date conŃine date istorice referitoare la o lungă
perioadă de timp
Printre regulile cu care W. Inmon a definit depozitele de date se numără: datele din depozitul de
date trebuie să fie integrate
Printre regulile cu care W. Inmon a definit depozitele de date se numără: datele din depozitul de
date sunt orientate spre obiect
Procesul de ierarhizare si relocare a datelor intrate într un data warehouse down-flow
Procesul de sintetizare, împachetare si distribuire a datelor intrate într un data warehouse
poartă numele de up-flow
Proiectarea bazei de date la nivel logic constă din realizarea: schemei externe si a schemei
conceptuale a bazei de dateâ
Redundanta datelor: este creată în mod intentionat în depozitele de date
Reprezentarea fizică a datelor din baza de date este descrisă la nivelul: intern
Rezolutia monitorului VGA este de 640x480 pixeli
Schema clasică a unui depozit de date este: de tip stea
Sistemele de gestiune a bazelor de date prerelationale sunt: sistemele ierahice si sistemele de tip
retea
Sistemele de gestiune a bazelor de date relationale comerciale sunt sistemele de gestiune care
respectă: b) cele 12 reguli ale lui E.F. Codd
Sistemele de gestiune post-relationale ale bazelor de date sunt ) sistemele orientate obiect si
sistemele hibride;
Transformările si circuitul datelor în depozitele de date sunt descrise prin următoarele tipuri de
fluxuri:: in-flow, meta-flow, out-flow, down-flow, up-flow
Un depozit de date este: o colectie tematică si integrată de date si o colectie de date nevolatilă dar
dinamică în timp
Un index se poate sterge cu clauza: DROP INDEX
Un model de date este: o colectie de concepte care descriu structura bazei de date si un set de
operatii de bază care descriu modul de lucru cu baza de date
Un sistem de gestiune a bazei de date este o componentă: software
Un sistem de gestiune a bazei de date este: si (a) si (b)
Valorificarea informatiei de date se din depozitele poate face prin analiza multidimensională
Valorificarea informatiei din depozitele de date se poate face prin: mecanismul OLAP
Valorificarea informatiei din depozitele de date se poate face prin: mecanismul OLAP si analiza
multidimensională
Cap. 8 - Aplicarea controalelor de securitate folosind DCL

1. Legislatia referitoare la securitate


A. Impune utilizarea rolurilor in administrarea securitatii bazei de date
B. Restrictioneaza utilizarea datelor personale
C. Impune administratorilor de baze de date sa protejeze reteaua de calculatoare
D. Impune plasarea identitatilor furate in internet
E. Impune avertizarea fiecarei personae individuale care ar putea avea date compromise.
Raspuns B, E

2. Securitatea este necesara pentru ca:


A. Persoanele oneste fac greseli
B. Controalele de securitae ale aplicatiilor nu sunt adecvate
C. 80% dintre fraude sunt comise de hackeri din exterior
D. Bazele de date conectate la internet sunt vulnerabile
E. Controalele de securitate mentin onestitatea persoanelor
Raspuns A, B, D, E

3. Intre intrusii care incearca sa penetreze sistemele conectate la internet se numara


A. Auditori bancari
B. Spioni ai concurentei
C. Autori de jurnale web
D. Hackeri
E. Angajati nemultumiti
Raspuns B, D, E

4. Componentele care trebuie protejate sunt:


A. Statiile de lucru client
B. Serverele
C. Bazele de date
D. Sistemele de operare
E. Retelele
Raspuns A, B, C, D, E

5. In Microsoft SQL Server, un cont de acces (cont de utilizator)


A. Poate sa se conecteze la oricate baze de date
B. Primeste automat privilegii de acces la baza de date
C. Poate folosi autentificarea Windows
D. Poate fi autentificat de Microsoft SQL Server
E. Detine o schema a bazei de date
Raspuns A, C, D

6. In SQL Server , o baza de date


A. Este detinuta de un cont de acces
B. Poate avea alocati unu sau mai multi utilizatori
C. Poate obtine date de system (de exemplu, master) si date de utilizator (aplicatie).
D. Poate avea attribute privilegii
E. Exista o colectie logica de obiecte de baze de date
Raspuns B, C, E

7. In Oracle, un cont de utilizator


A. Se poate conecta la oricate baze de date
B. Primeste automat privilegii la baze de date
C. Poate folosi autentificarea sistemului de operare
D. Poate fi autentificat de sistemul DBSM Oracle
E. Detine o schema a bazei de date
Raspuns B, C, D, E

1
8. In Oracle, o baza de date
A. Este detinuta de un utilizator
B. Poate avea definite unul sau mai multe conturi de utilizator
C. Poate contine date system (de exemplu, schema sistemului) si date de utilizator (aplicatie)
D. Este acelasi lucru cu o schema
E. Este gestionata de o instanta Oracle
Raspuns B, C, E

9. Privilegiile de system
A. Sunt acordate intr-o maniera similara Oracle, Sybase si Microsoft SQL Server
B. Sunt specifice unui obiect al bazei de date
C. Permit beneficiarului sa efectueze o serie de functii administrative pe server, cum ar fi
oprirea serverului
D. Sunt anulate cu ajutorul instructiunii SQL REMOVE
E. Variaza intre bazele de date provenite de la producatori diferiti
Raspuns A, C, E

10. Privilegiile de obiecte


A. Sunt acordate intr-o maniera sililara in Oracle, Sybase si Microsoft SQL Server
B. Sunt specifice unui obiect al bazei de date
C. Permit beneficiarului sa efectueze o serie de functii administrative pe server, cum ar fi oprirea
serverului
D. Sunt anulate cu ajutorul instructiunii SQL REMOVE
E. Sunt atribuite cu ajutorul instructiunii SQL GRANT
Raspuns A, B, E

11. Utilizarea clauzei WITH GRANT OPTION la atribuirea privilegiilor de obiecte


A. Permite beneficiarului sa acorde privilegiul altor utilizatori
B. Acorda privilegiile DBA ale beneficiarului intregii baze de date
C. Poate conduce la probleme de securitate
D. Va fi revocata in cascada daca privilegiul este ulterior revocat
E. Este o procedura recomandata pe scara larga pentru ca este comoda in utilizare
Raspuns A, C, D

12. Rolurile
A. Pot fi atribuite unui singur utilizator
B. Pot fi partajate de mai multi utilizatori
C. Pot exista inainte de existenta utilizatorilor
D. Pot contine oricate privilegii de obiecte
E. Pot contine un singur privilegiu de obiecte
Raspuns B, C, D

13. Posibilele dezavantaje ale utilizarii rolurilor pentru securitate sunt


A. Sunt mai dificil de administrat decat privilegiile individuale
B. Sunt eliminate atunci cand este sters utilizatorul
C. Sunt eliminate atunci cand sunt sterse privilegiile
D. Pot fi atribuite fara a lua in considerare toate privilegiile continute
E. Este necesara o perioada suplimentara de instruire pentru administratorii care trebuie sa le
foloseasca
Raspuns D, E

14. Vizualizarile pot ajuta la implementarea politicii de securitate prin restrictionarea coloanelor
dintr-un table la care are acces un utilizator
A. Restrictionarea coloanelor dintr-un tavel la care are acces un utilizator
B. Restrictionarea bazelor de date la care are acces un utilizator
C. Restrictionarea randurilor dintr-un table la care acces un utilizator
D. Stocarea rezultatelor auditarii bazei de date
E. Monitorizarea intrusilor la baza de date
Raspuns A, C

2
15. Rolurile sunt create in Microsoft SQL Server si Sybase Adaptive Server utilizand
A. Procedura memorata sp_create_role
B. Procedura memorata sp_add_role
C. Procedura memorata sp_addrole
D. Instructiunea CREATE TABLE
E. Instructiunea GRANT
Raspuns C

16. Rolurile sunt create in Oracle folosind


A. Procedura memorata sp_create_role
B. Procedura memorata sp_add_role
C. Procedura memorata sp_addrole
D. Instructiunea CREATE ROLE
E. Instructiunea GRANT
Raspuns D

17. Privilegiile de roluri sunt atribuite utilizatorilor de baze de date in Microsoft SQL Server si Sybase
Adaptive Server folosind
A. Procedura memorata sp_create_role_member
B. Procedura memorata sp_add_role_member
C. Procedura memorata sp_addrolemember
D. Instructiunea CREATE ROLE MEMBER
E. Instructiunea GRANT
Raspuns C

18. Privilegiile de roluri sunt atribuite utilizatorilor de baze de date in Oracle folosind
A. Procedura memorata sp_create_role_member
B. Procedura memorataq sp_add-role_member
C. Procedura memorata sp_addrolemember
D. Instructiunea CREATE ROLE MEMBER
E. Instructiunea GRANT
Raspuns E

19. Scrieti instructiunea SQL pentru a acorda utilizarorilor manager_1 si manager_2 privilegiile
SELECT, INSERT si DELETE pentru randurile din tabelul EMPLOYESS. Daca vreti sa tastati
instructiunea, la inceput va trebui sa creati utilizatorii manager_1 si manager_1

Raspuns
GRANT SELECT, INSERT, DELETE
ON EMPLOYEE
TO manager_1, manager_2<

20. Scrieti instructiunea SQL pentru a adauga privilegiile INSERT, UPDATE si DELETE ale
utilizatorului clerk_127 la tabelul MOVIE. Daca vreti sa testati instructiunea, la inceput va trebui sa
creati utilizatorul clerk_127

Raspuns
REVOKE INSERT, UPDATE, DELETE
ON MOVIE
FROM clerk_127;

3
Cap. 9 - Mentinerea integritatii bazei de date cu ajutorul tranzactiilor

1. O tranzactie
A. Poate fi procesata partial
B. Nu poate fi procesata partial
C. Schimba baza de date dintr-o stare consistenta in alta
D. Este denumita uneori unitate de lucru
E. Are proprietatile deschise de acronimul ACID
Raspuns B, C, D, E

2. Litera A din acronimul ACID provine de la


A. Automat
B. Auxiliar
C. Atomicitate
D. Augumentat
E. Administrare
Raspuns C

3. Litera C din acronimul ACID provine de la


A. Corelat
B. Consistenta
C. Codificare
D. Calculat
E. Consolidat
Raspuns B

4. Litera I din acronimul ACID provine de la


A. Integrare
B. Instructiune
C. Iconic
D. Izolare
E. Informatie
Raspuns D

5. Litera D de la acronimul ACID provine de la


A. Durabilitate
B. Dedicatie
C. Dualitate
D. Date
E. Distributie
Raspuns A

6. Procesul care anuleaza modificarile efectuate de o tranzactie esuata este numit


A. Inregistrarea tranzactiei
B. Finalizare
C. Refacere
D. Recuperare
E. Crearea unui punct de salvare
Raspuns C

7. Procesul care face permanente modificarile efectuate de o tranzactie este numit


A. Inregistrarea tranzactiei
B. Finalizare
C. Refacere
D. Crearea unui punct de salvare
E. Salvarea tranzactiei
Raspuns B
4
8. Suportul pentru tranzactii in bazele de date relationale include:
A. Identificarea inceputului fiecarei tranzactii
B. Identificarea sfarsitului fiecarei tranzactii
C. Managementul bazei de date dristibuite
D. Salvari periodice ale bazei de date
E. Jurnalul de tranzactii
Raspuns A, B, E

9. Microsoft SQL Server suporta urmatoarele moduri de tranzactii:


A. Finalizare automata
B. Automat
C. Durabil
D. Explicit
E. Implicit
Raspuns A, D, E

10. Oracle suporta urmatoarele moduri de tranzactii:


Finalizare auiomata
A. Finalizarea automata
B. Automat
C. Durabil
D. Explicit
E. Implicit
Raspuns A, E

11. In modul implicit pentru tranzactii din Microsoft SQl Server, o tranzactie noua este initiata de
A. Conectarea la baza de date
B. O instructiune COMMIT
C. O instructiune ROLLBACK
D. O Instructiune INSERT
E. O instructiune SELECT
Raspuns D

12. In modul implicit pentru tranzactii in Oracle, o tranzactie noua este initiata de
A. Conectarea la baza de date
B. O instructiune COMMIT
C. O instructiune ROLLBACK
D. O Instructiune INSERT
E. O instructiune SELECT
Raspuns A, B, C

13. Instructiunile SQL utilizate pentru gestionarea tranzactiilor in Microsoft SQL Server si Sybase
Adaptive Server sunt
A. BEGIN TRANSACTION
B. END TRANSACTION
C. COMMIT
D. ROLLBACK
E. SET AUTOCOMMIT
Raspuns A, C, E

14. Instructiunile SQL utilizate pentru gestionarea tranzactiilor in Oracle sunt


A. BEGIN TRANSACTION
B. END TRANSACTION
C. COMMIT
D. ROLLBACK
E. SET AUTOCOMMIT
Raspuns C, D, E

5
15. In My SQL, suportul pentru tranzactii
A. Se aplica doar motoarelor de stocare ISAM si MyISAM
B. Se aplica doar motoarelor de stocare InnoDB si BDB
C. Include modulele finalizare automata, implicit si explicit
D. Include modurile finalizare automata si implicit
E. Include modurile finalizare automata si explicit
Raspuns B, D

16. Instructiunile SQL utilizate pentru gestionarea tranzactiilor in DB2 UDB sunt
A. BEGIN TRANSACTION
B. END TRANSACTION
C. COMMIT
D. ROLLBACK
E. SAVE POINT
Raspuns C, D, E

17. Cantitatea de date afectata de o blocare (granularitatea blocarii) poate fi


A. O baza de date
B. Un tabel
C. Un rand
D. O coloana
E. Un bloc sau o pagina
Raspuns A, B, C, D, E

18. Probelma actualizarii concurente


A. Este o consecinta a partajarii simultane a datelor
B. Nu poate aparea cand este activata (ON) optiunea AUTOCOMIT
C. Este motivul pentru care trebuie asigurat suport pentru blocarea tranzactiilor
D. Apare cand doi utilizatori ai bazei de date initiaza instructiuni SELECT care intra in conflict
E. Apare cand doi utilizatori ai bazei de date efectueaza actualizari conflictuale acelorasi date
Raspuns A, C, E

19. O blocare
A. Este un element de control atasat datelor pentru a le rezerva in scopul actualizarii de catre utilizator
B. Este anulata de obicei atunci cand are loc o operatie COMMIT sau ROLLBACK
C. Are setat un interval de asteptare in sistemul DB2 si alte produse RDBMS
D. Poate provoca aparitia unor conflicte atunci cand alti utilizatori incearca sa actualizeze datele
blocate
E. Poate avea niveluri si un protocol de extindere in unele produse RDBMS
Raspuns B, C, D, E

20. O interblocare
A. Este o blocare care a depasit intervalul de asteptare si din acest motiv nu mai este necesara
B. Apare cand doi utilizatori ai bazei de date solicita simultar blocarea unor date blocate de
celalalt utilizator
C. Poate, teoretic, sa plaseze doi sau mai multi utilizatori intr-o stare de asteptare finita
D. Poate fi rezolvata prin detectarea interblocarilor in unele sisteme RDBMS
E. Poate fi rezolvata prin intervale de asteptare a blocarii in unele sisteme EDBMS
Raspuns B, D, E

6
Capitolul 10 - Integrarea limbajului SQL in aplicatii

1. Un cursor este
A. Colectia de randuri returnate de o interograre la baza de date
B. Un pointer(indicator) intr-un set de rezultate
C. Acelasi lucru cu un set de rezultate
D. Un buffer care pastreaza randurile extrase din baza de date
E. O metoda de analiza a performantei instructiunilor SQL
Raspuns B

2. Un set de rezultate este:


A. Colectia de randuri returnate de o interogare la baze de date
B. Un pointer (indicator) intr-un cursor
C. Acelasi lucru cu un cursor
D. Un buffer care pastraza randurile extrase din baza de date
E. O metoda de analiza a performantei instructiunilor SQL
Raspuns A

3. Inainte ca randurile sa poate fi extrase dintr-un cursor, cursor trebuie sa fie:


A. Declarat
B. Finalizat
C. Deschis
D. Inchis
E. Dezalocat
F. Raspus A, C

4. Cursoanele sunt:
A. Destinate sa anuleze nepotrivirea dintre modul in care trateaza rezultatele unei interogari limbajele
orientate pe obiecte si bazele de date relationale
B. Destinate sa anuleze nepotrivirea dintre modul in care trateaza rezultatele unei interogori
limbajele procedurale si bazele de date relationale
C. Incluse in limbajul Oracle PL/SQL
D. Incluse in limbajul Sybase Transact-SQL
E. Incluse in limbajul Microsoft Transact-SQL
Raspuns B, C, D, E

5. Numele cursorului este inclus in:


A. Instructiunea DECLARE CURSOR
B. Instructiunea SELECT
C. Instructiunea OPEN
D. Instructiunea FETCH
E. Instructiunea CLOSE
Raspuns A, C, D, E

6. Numele cursorului trebuie sa fie unic in


A. Un tabel
B. Un rand
C. Un set de rezultate
D. O baza de tate
E. Un program
Raspuns E

7. O instrctiune OPEN pentru cursor


A. Determina intodeauna rularea interogarii si completarea setului de rezultate cu date
B. Pentru a determina rularea interogarii si plasarea unor date in setul de rezultate
C. Trebuie sa inclusa o clauza INTO
D. Trebuie sa includa numele cursorului
E. Trebuie sa includa numele tabelului (tabelelor)
Raspuns B, D
7
8. ODBC este
A. O interfata API standars pentru conectarea la sistemele DBMS
B. Independent de orice limbaj, sistem de operare sau sistem DBMS
C. Un standard Micrososft
D. Utilizat in programele Java
E. Flexibil in tratarea limbajelor SQL proprietare
Raspuns A, B, E

9. JDBC este:
A. O interfata API standard pentru conectarea la sistemele DBMS
B. Independent de orice limbaj, sistem de operare sau sistem DBMS
C. Un standard Microsift
D. Utilizat de programele java
E. Flexibil in tratarea limbajelor SQL proprietate
Raspuns A, D, E

10. JSQL este


A. Un standard Sun Microsystems
B. O metoda de inglobare a instructiunilor in java
C. O extensie a unui standard ISO/ANSI
D. O solutie middleware
E. Independent de orice limbaj, sistem de operare sau sistem DBMS
Raspuns B, C

11. Solutiile middleware pentru conexiunile java


A. Folosesc metode java standard pentru a crea un sistem RDBMS
B. Fac sistemul RDBMS sa arate la fel ca o baza de date orientata pe obiecte
C. Ofera o metoda de inglobare a instructiunilor SQL in codul Java
D. Sunt independente de orice limbaj, sistem de operare sau sistem DBMS
E. Ruleaza de obicei intr-un server situat la distanta
Raspuns A, B, E

12. Microsoft .NET Frameworks include


A. Limbajul Transact-SQL
B. Common Language Rutime (CLR)
C. Common Gateway Interface (CGI)
D. Framework Class Libraries (FCL)
E. Infrastructura de suport pentru diferite specificatii de retea, limbaje de programare si platforme
Raspuns B, D, E

13. Limbajul SQL complet computational include instructiuni pentru


A. Scrierea de rapoarte
B. Tratarea erorilor
C. Cicluri
D. Ramificari
E. Procesarea cursorului
Raspuns B, C, D, E

14. O procedura de declansare este


A. Executata doar atunci cand este apelata
B. Executata automat pe baza unui eveniment din baza de date
C. Scrisa intr-un limbaj neprocedural
D. Scrisa intr-un limbaj procedural
E. Stocata in baza de date
Raspuns B, D, E

8
15. O procedura memorata este:
A. Executata doar atunci cand este apelata
B. Executata automat pe baza unui eveniment din baza de date
C. Scrisa intr-un limbaj neprocedural
D. Scrisa intr-un limbaj procedural
E. Stocata in baza de date
Raspuns A, D, E

16. Transact-SQL
A. Apare in Oracle si Microsoft SQL Server
B. A aparut prima data in 1987
C. Include limbajul SQL standard insotit de extensii procedurale
D. A fost dezvoltat in partenereriat de oracle si Sybase
E. Este limbajul folosit pentru numeroase proceduri memorate oferite de Microsoft si sybase
Raspuns C, E

17. Elementele de limbaj incluse in Transact-SQL sunt


A. BEGIN si END pentru a incepe si incheia blocurile de instructiuni
B. WHILE pentru repetarea instructiunilor
C. Instructiunile SQL DDL, DQL, DML si DCL
D. DECLARE pentru definirea variabilelor
E. GOTO si EXIT pentru iesirea din cicluri
Raspuns A, B, C, D

18. PL/SQL
A. A fost cunoscut initial ca Ada
B. A fost lansat prima data in 1991
C. A fost dezvoltat de CIA
D. Nu include instruciuni SQL standard
E. A aparut prima data in sistemul Oracle versiunea 6
Raspuns B, D, E

19. Elementele de limbaj incluse in PL/SQL sunt


A. DECLARE pentru definirea variabilelor
B. WAITFOR pentru intarzierea executarilor instructiunilor
C. EXCEPTION pentru tratarea exceptiilor
D. FOR LOOP si WHILE pentru formarea ciclurilor
E. instructiunea SELECT
Raspuns A, C, D

20. Elementele de limbaj incluse atat in PL/SQL, cat si in TRANSACT-SQL sunt


A. BACKUP si RESTORE pentru salvarea si restaurarea elementelor din baza de date
B. IF…ELSE pentru executarea conditionata a instructiunilor
C. NULL ca indicator care nu executa nici o actiune
D. DECLARARE pentru definirea variabilelor
E. RETURN pentru iesirea dintr-un bloc de instructiuni
Raspuns B, D, E

9
Cap.11 – Elemente de ajustare si performanta ale limbajului SQL

1. Cerintele pentru performanta


A. Ar trebui stabilite dupa ajustarea instructiunilor SQL
B. Asigura o cale de identificare a instructiunilor ce necesita ajustare
C. Sunt mai bune atunci cand contin criterii complexe
D. Asigura o cale de a afla cand se incheie particularizarea unei interograri
E. Sunt dezvoltate doar pentru a-I face pe auditori fericiti
Raspuns B, D

2. Criteriile si scrierile efectuate pe disc pot fi diminuate


A. Alocand buffere de capacitate suficienta
B. Plasand toate fisierele bazei de dte pe o singura unitate de disc
C. Introducand toata baza de date in memorie
D. Adaugand indexuri pentru toate coloanele importante din tabel
E. Dispersand fisierele pe toate unitatile de disc disponibile
Raspuns A, C, E

3. Sistemul calculatorului poate fi ajustat


A. Colectand date statistice ale bazei de date
B. Aplicand actualizarile de securitate disponibile
C. Selectand componente hardware rapide si fiabile
D. Respectand recomandarile de ajustare ale sistemului SGBD
E. Consultand un ghid de ajustare al sistemului de operare
Raspuns C, E

4. Un proiect eficient de tabel include


A. Folosirea tipului VARCHAR pentru toate de tip caracter cu lungime variabila
B. Folosirea celui mai mic tip de data numerica posibil care retine valorile datelor
C. Folosind proceduri de declansare oricand este posibil
D. Folosind tipuri de date identice pentru cheile externe corespunzatoare
E. Folosind tipuri de date identice pentru toate coloanele cu cheie primara
Raspuns B, D

5. Planul de executie a unei interogari


A. Descrie modul in care va rula sistemul DBMS o interogare
B. Este stocat in zona de cache SQL
C. este creat folosind utilitarul pentru planuri explicative al sistemului RDBMS
D. Necesita un tabel de planuri pentru stocarea rezultatelor explicative
E. Necesita folosirea unei proceduri memorate
Rezultat A, C, D

6. Optimizatorul de interogari
A. Creaza un plan de executie a interogarii in tabelul de planuri
B. Determina cea mai buna cale de executie a unei instructiuni SQL
C. Poate folosi date statistice adunate din baza de date
D. Poate folosi reguli aplicate modului in care a fost scrisa instructiunea
E. Poate fi bazat pe cost sau bazat pe reguli
Raspuns B, C, D, E

7. Pentru a scrie interogari proiectate corect, dezvoltatorul trebuie


A. Sa stie caracteristicile datelor din baza de date
B. Sa potriveasca tipurile de date in predicate
C. Sa foloseasca indicii cat mai des posibil
D. Sa evite coloanele si tabelele care nu sunt necesare
E. Sa maximizeze numarul de randuri din fiecare set de rezultate
Raspuns A, B, D

10
8. Scanarile unui tabel pot fi evitate
A. Incluzand o clauza WHERE care refera o coloana indexata
B. Folosind GROUP BY in loc de DISTINCT
C. Asigurandu-va ca datele statistice sunt actualizate
D. Configurand cel putin un predicat sa faca referire la coloana principala a unui index
E. Evitand coloanele care nu sunt folositoare
Raspuns A, C, D

9. Un index nu poate fi folosit cand


A. Clauza WHERE face referire la a doua coloana a unui index
B. Exista o clauza LIKE care face referire la un sir de comparatie care contine un caracter de inlocuire (cu
exceptia primei pozitii a sirului)
C. Operatorul NOT este folosit intr-un predicat
D. O functie SQL este inclusa intr-o comparatie de coloane (exceptand cazul in care corespunde
unui index bazat pe functii)
E. Operatorul NOT EQUAL este folosit intr-un predicat.
Raspuns A, C, D, E

10. Aspectele privind folosirea indexurilor includ


A. Amplasarea de indexuri pentru toate coloanele actualizate frecvent
B. Amplasarea de indexuri pentru coloanele cu cheie externa
C. Evitarea suprapunerii indexurilor
D. Crearea de indexuri pentru coloanele care au doar cateva valori posibile
E. Evitarea indexurilor unice
Raspuns B, C

11. Aspectele de ajustare privitoare la MySQL include


A. Indexuri bazate pe functii
B. Indexuri rezumat
C. Indexuri organizate pe grupuri
D. Optiunile motorului de stocare
E. Indexuri bit-map
Raspuns B, D

12 Aspecte de ajustare privitoare la Oracle include


A. Indexuri bazate pe functii
B. Indexuri rezumat
C. Indexuri organizate pe grupuri
D. Optiunile motorului de stocare
E. Indexuri bit-map
Raspuns A, E

13. Aspectele de ajustare privitoare la Microsoft SQL Sercer include


A. Indexuri bazate pe functii
B. Indexuri rezumat
C. Indexuri organizate pe grupuri
D. Optiunile motorului de stocare
E. Indexuri bit-map
Raspuns C

14. Un plan explicativ in Oracle


A.Necesita folosirea unui tabel de planuri
B. Contine o coloana PLAN_ID pentru o identificare unica
C. Poate fi vizualizat folosind intrumentul Entreprinse Manager
D. Poate fi vizualizat folosind limbajul SQL prin selectarea din tabelul de planuri
E. Este creat folosind instructiunea CREATE_PLAN
Raspuns A, C, D

15. Un plan de executie In Microsoft SQL Server


A. Necesita folosirea unui tabel de planuri
11
B. Poate fi afisat folosind o optiune din utilitarul SQL Query Analyzer
C. Afiseaza planul de executie intr-un format text
D. Afiseaza planul de executie intr-un format grafic
E. Poate fi vizualizat in SQL prin selectarea din tabelul de planuri
Raspuns B, D

16. La ajustarea instructiunii INSERT , ar trebui luata in consideratie


A. Intretinerea indexului
B. Expansiunea randului
C. Optiunea CASCADE
D. Spatiul liber adecvat
E. Rescrierile interogarilor
Raspuns A, D

17. La ajustarea interactiunii UPDATE, ar trebui luata in consideratie


A. Intretinerea indexului
B. Expasnsiunea randului
C. Optiunea CASCADE
D. Spatiul liber adecvat
E. Rescrierea interogarilor
Raspuns A, B

18. La ajustarea instructiunii DELETE, ar trebui sa die luata in consideratie


A. Intretinerea indexului
B. Expansiunea randului
C. Optiunea CASCADE
D. Spatiul liber adecvat
E. Rescrierile interogarilor
Raspuns A, C

19. Tipurile de date ar trebui sa corespunda


A. pentru toate coloanele cu cheie primara
B. Intre cheia primara si coloanele corespunzatoare cu cheie secundara
C. Intre cheia primara si coloanele corespunzatoare cu cheie externa
D. Intre valorile din coloana si valorile literale comparate in predicate
E. Pentru toate indexurile bazate pe functii
Raspuns C, D

20. Principala cauza a problemelor legate de performantele interogarilor este


A. un sistem de operare slab ajustat
B. O instructiune SQL redactata neprofesionist
C. Supraincarcarea procedurii de declansare
D. Supraancarcarea intretinerii indexurilor
E. Expansiunea randului
Raspuns B

©GMX

12
SISTEME DE GESTIUNE A BAZELOR DE DATE 2007-2008

1) O bază de date este:


a) o colectie de date aflate în relatie unele cu altele si structurată astfel încât să poată servi unui anumit scop
b) un set de date corelate si organizate în scopul prelucrării lor rapide si concomitente de către mai multe persoane.
c) si (a) si (b)
d) nici (a) nici (b)
Raspuns C

2) O bază de date este:


a) un tabel organizat pe coloane
b) o listă organizată pe linii
c) un model al microuniversului la care se referă
Raspuns C

3) Datele sunt:
a) informatii contextualizate
b) cunostinte care au suferit prea putine prelucrari
c) informatii primare
Raspuns C

4) Informatiile sunt:
a) date contextualizate
b) date validate, organizate si relationate
c) cunostinte care au suferit doar putine prelucrari
Raspuns B

5) Cunostintele sunt:
a) informatii contextualizate
b) date contextualizate
c) informatii validate, organizate si relationate
Raspuns A

6) Un model de date este:


a) o colectie de concepte care descriu tipurile de date din baza de date si un set de operatii de bază care descriu modul
de interogare si actualizare a acestora
b) o colectie de concepte care descriu structura bazei de date si un set de operatii de bază care descriu modul de
lucru cu baza de date
c) o colectie de concepte care descriu datele, informatiile si cunostintele înmagazinate în baza de date si un set de
operatii de bază care descriu modul actualizare a acestora
Raspuns B

7) Sistemele de gestiune a bazelor de date prerelationale sunt:


a) sistemele grafice
b) sistemele de fisiere
c) sistemele ierahice si sistemele de tip retea
Raspuns C

8) Sistemele de gestiune a bazelor de date relationale comerciale sunt sistemele de gestiune care respectă:
a) cele 12 reguli ale lui Chuck Kelly
b) cele 12 reguli ale lui E.F. Codd
c) cele 12 reguli restrictii ale lui D.L. Childs
Raspuns B

1
9) Modelul relational se bazează pe:
a) notiunea matematică de relatie binară între multimi
b) noŃiunea matematică de submultime a unui produs cartezian de mulŃimi
c) noŃiunea matematică de relaŃie ternară între mulŃimi
Raspuns B

10) Tabelul este reprezentarea conventională si comodă a:


a) entitătilor
b) entitătilor si a relatiilor n-m dintre entităti
c) entitătilor si relatiilor 1-m dintre entităti
d) entitătilor si relatiilor dintre entităti
D sau B?

Reamintim faptul că în modelul relaŃional, orice entitate si relaŃie dintre entităŃi este modelată matematic prin
conceptul de relaŃie si reprezentată convenŃional printr-o tabelă
Rezolvarea relatiilor n-m
In acest caz, ne bazăm pe faptul că în modelul relaŃional nu numai entităŃile ci si relaŃiile dintre ele sunt relaŃii în
sens matematic si, ca urmare, pot fi reprezentate prin tabele.

11) Sistemele de gestiune post-relationale ale bazelor de date sunt


a) sistemele orientate obiect si sistemele hibride;
b) sistemele obiect-relatioanle;
c) sistemele orientate obiect;
Raspuns A

12) Un sistem de gestiune a bazei de date este o componentă:


a) software
b) hardware
c) si (a) si (b)
Raspuns A

13) Un sistem de gestiune a bazei de date este:


a) o interfată între baza de date si utilizatorii ei
b) o interfaŃă între baza de date si administratorul ei
c) si (a) si (b)
Raspuns C

14) Intr-o bază de date este necesară :


a) numai independenta fizică a datelor
b) numai independenta logică a datelor
c) si independenta fizică si independenta logică a datelor
Raspuns C

15) Independenta fată de strategiile de acces la datele dintr-o bază de date este:
a) necesară
b) interzisă
c) optională
Raspuns A

16) Arhitectura ANSI-SPARC pe 3 nivele pentru bazele de constă din:


a) nivelul extern, nivelul hibrid si nivelul intern
b) nivelul fizic, nivelul conceptual si nivelul hibrid
c) nivelul extern, nivelul conceptual si nivelul intern;
Raspuns C

2
17) Reprezentarea fizică a datelor din baza de date este descrisă la nivelul:
a) hibrid;
b) intern;
c) conceptual;
Raspuns B

18) Nivelul extern:


a) reprezintă modurile diferite în care diferiti utilizatori ai bazei de date percep datele stocate în aceasta
b) reprezintă modul unic în care datele din baza de date sunt percepute de către proprietarul, administratorul si
proiectantul bazei de date
c) permite sistemului de operare să interogheze baza de date
Raspuns A

19) Nivelul conceptual


a) descrie datele si relatiile dintre ele, precum si modul de implementare a acestora la nivelul fizic
b) descrie datele si relatiile dintre ele, fără detalii de implementare
c) constă exclusiv din schema conceptuală a bazei de date
Raspuns B

20) Proiectarea bazei de date la nivel logic constă din realizarea:


a) schemei interne si a schemei conceptuale a bazei de date;
b) schemei externe si a schemei conceptuale a bazei de date;
c) schemei externe si a schemei interne a bazei de date;
Raspuns B

21) Integritatea referentială a bazei de date se referă la:


a) relatiile din baza de date
b) entitătile din baza de date
c) si la relatiile si la entitătile din baza de date
Raspuns A

22) Forma normală Boyce-Codd este o variantă mai tare a:


a) FN1
b) FN3
c) FN5
Raspuns B

23) O relatie este în FN2 dacă este în FN1 si dacă :


a) oricare dintre atributele sale care nu fac parte din cheia primară este complet dependent functional de cheia
primară
b) oricare dintre atributele sale care nu fac parte din cheia primară ia câte o singură valoare pentru fiecare instantă a sa
c) oricare dintre atributele sale care nu fac parte din cheia primară ia valoarea NULL
Raspuns A

24) O relatie este în FN3 dacă


a) este în FN1 si în FN2 simultan
b) este în FN1 si nici unul dintre atributele sale care nu fac parte din cheia primară nu este, prin tranzitivitate,
dependent functional de cheia primară
c) este în FN2 nici unul dintre atributele sale care nu fac parte din cheia primară nu este, prin tranzitivitate,
dependent funcŃional de cheia primară
Raspuns C

25) Interogările de actiune sunt interogări de:


a) creare de tabel, actualizare si adăugare
b) actualizare, adăugare si stergere

3
c) actualizare, adăugare, stergere si creare de table
Raspuns C

26) Un index se poate sterge cu clauza:


a) DELETE INDEX
b) DROP INDEX
c) REMOVE INDEX
Raspuns B

27) În algebra relatională există:


a) numai operatii unare
b) numai operatii binare
c) operatii unare si binare
Raspuns C

28) Cardinalul relatiei rezultate din produsul cartezian de relatii este:


a) mai mare decât cardinalul relatiei rezultate din .θ-jonctiunea acelorasi relatii
b) egal cu cardinalul relatiei rezultate din . θ-jonctiunea acelorasi relatii
c) mai mic decât cardinalul relatiei rezultate din .-joncŃiunea acelorasi relatii
Raspuns A?

29) Pentru optimizarea interogărilor pe baze de date relatioanle se recomandă:


a) utilizarea clauzei WHERE în detrimentul clauzei HAVING pentru a filtra înregistrările returnate de clauza
SELECT
b) utilizarea cuvântului-cheie DISTINCT în detrimentul clauzei GROUP BY pentru a găsi o listă de înregistrări
distincte
c) toate cele de mai sus
Raspuns C

30) Pentru optimizarea interogărilor pe baze de date relaŃioanle se recomandă:


a) evitarea clauzei LEFT JOIN si a valorii NULL pentru atribute
b) utilizarea cererilor imbricate
c) toate cele de mai sus
Raspuns C

31) Autorul conceptului de "data warehouse" (depozit de date) este:


a) E.F. Codd
b) William Inmon
c) Earl Hadden
Raspuns B

32) Un depozit de date este:


a) o colectie tematică si integrată de date
b) o colectie de date nevolatilă dar dinamică în timp
c) si (a )si (b)
Raspuns C

33) Depozitele de date constituie baza informatională a:


a) sistemelor de management a informatiilor (MIS)
b) sistemelor de suport pentru decizii (DSS)
c) sistemelor de suport pentru management (MSS)
Raspuns B

34) Redundanta datelor:


4
a) este creată în mod intentionat în depozitele de date
b) este minimizată în bazele de date relationale
c) este maximizată în bazele de date obiect-relationale
d) este minimizată în depozitele de date
Raspuns A

35) Intr-un depozit de date este necesar să existe:


a) un sistem coerent de codificare si reprezentare a informatiilor
b) un sistem consistent de unităti de măsură
c) un sistem stabil de reprezentare fizică a datelor
d) toate cele de mai sus
Raspuns D

36) O cheie de acces:


a) pentru bazele de date relationale este nemodificabilă pe întreaga perioadă de existentă a bazei de date;
b) pentru bazele de date orientate obiect este o instantă a obiectului access key
c) pentru depozitele de date cuprinde si o variabilă temporală;
Raspuns C

37) Operatiile de actualizare a depozitelor de date sunt:


a) de tip stergere
b) de tip adăugare
c) si (a) si (b)
Raspuns B

38) OLTP înseamnă:


a) on line timing and processing
b) object linking and trigger parsing
c) on line transactional processing
Raspuns C

39) Datele dintr-un sistem OLTP:


a) sunt date dinamice, detaliate, incosistente, fragmentate, redundante
b) constituie o sursă de date pentru depozitele de date,
c) si (a) si (b)
d) nici (a) nici (b)
Raspuns C

40) Printre regulile cu care W. Inmon a definit depozitele de date se numără:


a) depozitul de date si mediul operational trebuie să fie separate,
b) depozitul de date conŃine date istorice referitoare la o lungă perioadă de timp
c) si (a) si (b)
Raspuns C

41) Printre regulile cu care W. Inmon a definit depozitele de date se numără:


a) datele din depozitul de date trebuie să fie de tip relational
b) datele din depozitul de date trebuie să fie integrate,
c) si (a) si (b)
Raspuns B

42) Printre regulile cu care W. Inmon a definit depozitele de date se numără:


a) sunt permise actualizari online
b) datele din depozitul de date sunt orientate spre obiect
c) si (a) si (b)
Raspuns B
5
43) Depozitele de date:
a) diferă fată de sistemele informatice clasice din punctul de vedere al ciclului de dezvoltare si de viată
b) diferă fată de sistemele OLTP din punctul de vedere al frecventei si tipului de tranzactii permise
c) si (a) si (b)
Raspuns C

44) Mecanismul charge-back pentru utilizarea resurselor este o caracteristică a:


a) sistemelor OLTP
b) sistemelor de fisiere
c) depozitelor de date
Raspuns C

45) Printre componentele unui depozit de date se numără:


a) datele operationale;
b) metadatele;
c) si (a) si (b)
Raspuns C

46) Printre componentele unui depozit de date se numără:


a) managerul depozitului de date;
b) sistemul de intrari si iesiri;
c) managerul read/write online
Raspuns A

47) Printre componentele unui depozit de date se numără:


a) componenta front-end;
b) managerul depozitului de date;
c) si (a) si (b)
Raspuns C

48) Printre componentele unui depozit de date se numără:


a) componenta front-end
b) componenta back-end
c) si (a) si (b)
Raspuns C

49) Printre componentele unui depozit de date se numără:


a) componenta front-line
b) componenta back-end
c) si (a) si (b)
Raspuns B

50) Printre componentele unui depozit de date se numără:


a) uneltele de data mining si OLAP
b) uneltele de raportare si interogare
c) si (a) si (b)
Raspuns C

51) Printre componentele unui depozit de date se numără:


a) uneltele de data mining si OLTP
b) unelte de dezvoltare a aplicatiilor
c) si (a) si (b)
Raspuns B

6
52) Printre componentele unui depozit de date se numără:
a) uneltele de OLAP si OLTP
b) unelte pentru sisteme de informatii executive
c) si (a) si (b)
Raspuns B

53) Printre componentele unui depozit de date se numără:


a) datele sintetizate
b) metadatele
c) si (a) si (b)
Raspuns C

54) Printre componentele unui depozit de date se numără:


a) datele detaliate
b) metadatele
c) si (a) si (b)
Raspuns C

55) Printre componentele unui depozit de date se numără:


a) macrodatele
b) metadatele
c) si (a) si (b)
Raspuns B

56) Metadatele care intră în componenta unui depozit de date pot fi:
a) metadate administrative
b) metadate de actualizare
c) metadate calendaristice
Raspuns A

57) Metadatele care intră în componenta unui depozit de date pot fi:
a) metadate pentru optimizare
b) metadate pentru minimizarea timpului de scriere în depozit
c) metadate fragmentate
Raspuns A

58) Valorificarea informatiei din depozitele de date se poate face prin:


a) analiza multirelatională
b) mecanismul OLAP
c) mecanismul OLTP
Raspuns B

59) Valorificarea informatiei din depozitele de date se poate face prin:


a) analiza multidimensională
b) analiza multirelatională
c) mecanismul OLTP
Raspuns A

60) Valorificarea informatiei din depozitele de date se poate face prin:


a) mecanismul OLAP
b) analiza multidimensională
c) si (a) si (b)
Raspuns C

61) Arhitectura unui instrument OLAP este o arhitectura pe:


7
a) 3 niveluri
b) 2 niveluri
c) 4 niveluri
Raspuns A

62) Arhitectura unui instrument OLAP include:


a) una sau mai multe baze de date
b) o componenta OLTP
c) metadate pentru optimizare
Raspuns A

63) Arhitectura unui instrument OLAP include:


a) un manager pentru datele sintetizate
b) un motor analitic pe post de server pentru aplicatiile desktop
c) metadate pentru optimizare
Raspuns B

64) Arhitectura unui instrument OLAP include:


a) uneltele utilizatorului final pentru operatii de raportare etc.
b) un motor analitic pe post de server pentru aplicatiile desktop
c) si (a) si (b)
Raspuns C

65) Fluxul de intrare a datelor în depozitul de date constă din operatii de:
a) stergere
b) actualizare în loturi
c) suprascriere
Raspuns B

66) Procesul de sintetizare, împachetare si distribuire a datelor intrate într un data warehouse poartă numele
de:
a) up-flow
b) in-flow
c) down-flow
Raspuns A

67) Procesul de ierarhizare si relocare a datelor intrate într un data warehouse poartă numele de:
a) up-flow
b) in-flow
c) down-flow
Raspuns C

8) Principalele activităti care compun asa-numitul out-flow din depozitele de date sunt:
a) integrarea si interogarea datelor
b) accesarea si livrarea datelor
c) sintetizarea si abstractizarea datelor
Raspuns B

69) Transformările si circuitul datelor în depozitele de date sunt descrise prin următoarele tipuri de fluxuri::
a) in-flow, up-flow, out-flow, meta-flow, alfa-flow, beta-flow;
b) out-flow, up-flow, beta-flow, down-flow, in-flow;
c) in-flow, meta-flow, out-flow, down-flow, up-flow
Raspuns C

70) Schema clasică a unui depozit de date este:


8
a) de tip retea
b) de tip stea
c) de tip ierarhic
Raspuns B

71) Cel mai simplu mod de vizualizare a datelor dintr-un depozit de date este reprezentat de:
a) un cub n-dimensional;
b) o stea;
c) si (a) si (b)
Raspuns A

72) O bază de date multimedia este o bază de date care inglobează informatie de tip:
a) text, sunet, grafic;
b) sunet, imagini fixe si video
c) text, grafic, sonor, animat, video;
Raspuns C

73) MIDI inseamnă::


a) Microsoft Interchange Digital Interface
b) Musical Instrument Digital Interface
c) Musical Interface for Digital Interchange
Raspuns B

74) Rezolutia monitorului VGA este de :


a) 640x480 pixeli;
b) 800×600 pixeli;
c) 1024×768 pixeli;
Raspuns A

75) CGI înseamnă:


a) Common Graphical Interface
b) Common Gateway Interface;
c) Common Graphical Interchange;
Raspuns B

9
1. Creati tabelul salariat_*** având următoarea structură:

Nume Caracteristici Tip


cod_ang NOT NULL NUMBER(4)
nume VARCHAR2(25)
prenume VARCHAR2(25)
functia VARCHAR2(20)
sef NUMBER(4)
data_angajarii Valoare implicită data curentă DATE

varsta NUMBER(2)
email CHAR(50)
salariu Valoare implicită 0 NUMBER(9,2)

2. Afisati structura tabelului creat anterior.


DESCRIBE salariat;
3. Se dau următoarele valori:
COD_AN NUME PRENUME FUNCTIA SEF DATA_ANG VARSTA EMAIL SALARIU
G
1 ..... ..... director null ........ 30 ..... 5500
2 ..... ..... fuctionar 1 ..... 25 ..... 0
3 ..... ..... economist 1 ..... 45 ..... 3000
4 ..... ..... functionar 1 ..... 35 ..... 1000

4. Inserati în tabelul salariat_*** prima înregistrare din tabelul de mai sus fără să precizati lista de coloane
în comanda INSERT.
INSERT INTO salariat VALUES (
1, '.....', '.....', 'director', null ,’' , 30, '.....', 5500 );
5. Inserati a doua înregistrare folosind o listă de coloane din care excludeti data_angajarii si salariul care
au valori implicite. Observati
apoi rezultatul.
COD_ANG NUME PRENUME FUNCTIA SEF DATA_ANG VARSTA EMAIL SALARIU
2 ..... ..... fuctionar 1 ..... 25 ..... 0

INSERT INTO salariat (cod_ang, nume, prenume, functia, sef, varsta, email)
VALUES (2, '...', '...', 'functionar', 1, 25, '...' );
6. Inserati înregistrările 3 si 4.
INSERT INTO salariat (cod_ang, nume, prenume, functia, sef, varsta, email, salariu) VALUES (3, '...', '...',
'economist', 1, 45, '...', 3000 );
INSERT INTO salariat (cod_ang, nume, prenume, functia, sef, varsta, email, salariu) VALUES (4, '...', '...',
'functionar', 1, 35, '...', 1000 );
7. Creati tabelul functionar_*** care să contină functionarii din tabelul salariat_***, având următoarele
coloane: codul, numele, salariul anual si data angajării. Verificati cum a fost creat tabelul si ce date
contine.
CREATE TABLE functionar
AS SELECT cod_ang, nume, prenume, salariu, data_angajarii
FROM salariat WHERE functia = 'functionar';
DESCRIBE functionar;
SELECT * FROM functionar;
8. Adăugati o nouă coloană tabelului salariat_*** care să contină data nasterii.
ALTER TABLE salariat
ADD (datan DATE);
9. Modificati dimensiunea coloanei nume la 30 si pe cea a salariului la 12 cu 3 zecimale.

1
ALTER TABLE salariat
MODIFY (nume VARCHAR2(30), salariu NUMBER(12,3));
10. Modificati tipul coloanei email la VARCHAR2.
ALTER TABLE salariat
MODIFY (email VARCHAR2(50));
11. Modificati valoarea implicită a coloanei data_angajarii la data sistemului + o zi.
ALTER TABLE salariat
MODIFY (data_angajarii DATE DEFAULT SYSDATE + 1);
12. Eliminati coloana varsta din tabelul salariat_***.
ALTER TABLE salariat
DROP COLUMN varsta;
13. Redenumiti tabelul functionar_*** cu funct_***.
RENAME functionar to funct;
14. Recreati tabelul functionar_*** utilizând tabelul funct_***..
CREATE TABLE functionar
AS SELECT cod_ang, nume, prenume, salariu, data_angajarii
FROM funct;
15. Eliminati tabelul funct_***.
DROP TABLE funct;
16. Stergeti si apoi creati din nou tabelul salariat_*** cu următoarea structură.
NUME TIP CONSTRÂNGERE
cod_ang NUMBER(4) Cheie primară
nume VARCHAR2(25) NOT NULL
prenume VARCHAR2(25)
data_nasterii DATE data_nasterii<data_angajarii
functia VARCHAR2(9) NOT NULL
sef NUMBER(4) Referă ca si cheie externă cod_ang
din acelasi tabel
data_angajarii DATE
email VARCHAR2(20) unic
salariu NUMBER(12,3) >0
cod_dept NUMBER(4)

cod_dept NUMBER(4) CombinaŃia NUME + PRENUME


să fie unică
Observatie: Constrângerile de tip CHECK se pot implementa la nivel de coloană doar dacă nu referă o altă
coloană a tabelului.

DROP TABLE salariat;


CREATE TABLE salariat (
cod_ang NUMBER(4) PRIMARY KEY,
nume VARCHAR2(25) NOT NULL,
prenume VARCHAR2(25),
data_nasterii DATE,
functia VARCHAR2(9) NOT NULL,
sef NUMBER(4) REFERENCES salariat (cod_ang),
data_angajarii DATE DEFAULT SYSDATE,
email VARCHAR2(20) UNIQUE,
salariu NUMBER(9,2) CHECK (salariu > 0),
cod_dep NUMBER(4),
CONSTRAINT const_c CHECK (data_angajarii > data_nasterii),
CONSTRAINT const_u UNIQUE (nume, prenume, data_nasterii));
17. Stergeti tabelul salariat_***, iar apoi recreati-l implementând toate constrângerile la nivel de tabel.
Observatie: Constrângerea de tip NOT NULL se poate declara doar la nivel de coloană.
DROP TABLE salariat;
CREATE TABLE salariat (
2
cod_ang NUMBER(4),
nume VARCHAR2(25) NOT NULL,
prenume VARCHAR2(25),
data_nasterii DATE,
functia VARCHAR2(9) NOT NULL,
sef NUMBER(4),
data_angajarii DATE DEFAULT SYSDATE,
email VARCHAR2(20),
salariu NUMBER(9,2),
cod_dep NUMBER(4),
CONSTRAINT ccp PRIMARY KEY (cod_ang),
CONSTRAINT cce FOREIGN KEY (sef) REFERENCES salariat (cod_ang),
CONSTRAINT cu1 UNIQUE (email),
CONSTRAINT cc1 CHECK (data_angajarii > data_nasterii),
CONSTRAINT cc2 CHECK (salariu > 0),
CONSTRAINT cu2 UNIQUE (nume,prenume,data_nasterii));
18. Creati tabelul departament_*** care să aibă următoarea structură.
NUME TIP CONSTRÂNGERI
COD_DEP NUMBER(4) Cheie primară
NUME VARCHAR2(20) Not null
ORAS VARCHAR2(25)
CREATE TABLE departament (
cod_dep NUMBER(4) PRIMARY KEY,
nume VARCHAR2(20) NOT NULL,
oras VARCHAR2(25));
Adăugarea constrângerilor ulterior creării tabelului, eliminarea, activarea sau dezactivarea
constrângerilor (ALTER TABLE)
- adaugă constrângeri
ALTER TABLE nume_tabel
ADD [CONSTRAINT nume_constr] tip_constr (coloana);
- elimină constrângeri
ALTER TABLE nume_tabel
DROP [CONSTRAINT nume_constr] tip_constr (coloana);
- activare/dezactivare constrângere
ALTER TABLE nume_tabel
MODIFY CONSTRAINT nume_constr ENABLE|DISABLE;
sau
ALTER TABLE nume_tabel
ENABLE| DISABLE nume_constr;
19. Inserati o nouă înregistrare în salariat_*** de forma:
cod nume prenume data_n functia sef data_ang email salariu cod_dep
2 N2 P2 11-JUN-1960 economist 1 Sysdate E2 2000 10
INSERT INTO salariat VALUES (
2, 'N2' , 'P2' , '11-06-1960' , 'ECONOMIST', 1, SYSDATE, 'E2', 2000, 10 );
/*EROARE la linia 1: ORA-02291: constrângere de integritate (SCOTT.CCE) violata - cheia parinte negasita
Ce observati? Introduceti înregistrarea dar specificând valoarea NULL pentru coloana sef.
INSERT INTO salariat VALUES (
2, 'N2' , 'P2' , '11-06-1960' , 'ECONOMIST', Null, SYSDATE, 'E2', 2000, 10 ); /*1 înregistrare creatã.*/
20. Încercati să adăugati o constrângere de cheie externă pe cod_dep din salariat_***. Ce observati?
ALTER TABLE salariat
ADD CONSTRAINT cce2 FOREIGN KEY (cod_dep) REFERENCES departament (cod_dep);
/*EROARE la linia 2: ORA-02298: (SCOTT.CCE2) nu a putut fi validata - nu au fost gasite cheile parinte
21. Inserati o nouă înregistrare în departament_***. Apoi adăugati constrângerea de cheie externă definită
anterior.
cod_dep nume Loc
10 Economic Bucuresti
3
INSERT INTO departament VALUES (
10, 'Ecomomic', 'Bucuresti' );
Adaugam constrangerea de la ex.20:
ALTER TABLE salariat
ADD CONSTRAINT cce2 FOREIGN KEY (cod_dep) REFERENCES departament (cod_dep);
22. Inserati noi înregistrări în salariat_***, respectiv în departament_***. Care trebuie să fie ordinea de
inserare?

cod nume prenume data_n functia sef data_ang email salariu cod_dep

3 N3 P3 11- jurist 2 Sysdate E3 2500 20


JUN-
1967

cod_dep nume loc

20 Juridic Constanta
INSERT INTO departament VALUES (
20, 'Juridic', 'Constanta' );
INSERT INTO salariat VALUES (
3, ’N3’, ’P3 ’, ’11-06-1967’, ’JURIST ’, 2, ’’, ’E3’, 2500, 20 );
23. Stergeti departamentul 20 din tabelul departament_***. Ce observati?
DELETE FROM departament
WHERE cod_dep=20;
/*EROARE la linia 1: ORA-02292: constrângerea de integritate (SCOTT.CCE2) violata – gasita înregistrarea
copil
24. Stergeti constrângerea cce2_***. Recreati această constrângere adăugând optiunea ON DELETE
CASCADE.
ALTER TABLE salariat
DROP CONSTRAINT cce2;
ALTER TABLE salariat
ADD CONSTRAINT cce2 FOREIGN KEY (cod_dep) REFERENCES departament (cod_dep) ON DELETE
CASCADE;
25. Stergeti departamentul 20 din tabelul departament_***. Ce observati în tabelul salariat_***? Anulati
modificările.
DELETE FROM departament
WHERE cod_dep=20;
ROLLBACK;
26. Stergeti constrângerea cce2_***. Recreati această constrângere adăugând optiunea ON DELETE SET
NULL.
ALTER TABLE salariat DROP CONSTRAINT cce2;
ALTER TABLE salariat
ADD CONSTRAINT cce2
FOREIGN KEY (cod_dep)
REFERENCES departament (cod_dep)
ON DELETE SET NULL;
27. Încercati să stergeti departamentul 10 din tabelul departament_***. Ce observati?
DELETE FROM departament
WHERE cod_dep=10;
/*1 înregistrare stearsã.
Verificam continutul tabelului departament
SELECT * FROM departament;
Consultarea dictionarului datelor
Informatii despre tabelele create se găsesc în vizualizările :
4
· USER_TABLES – informatii complete despre tabelele utilizatorului curent.
· ALL_TABLES – informatii complete despre tabelele tuturor utilizatorilor.
· COLS – informatii despre coloane.
· TAB – informatii de bază despre tabelele existente în schema utilizatorului curent.
Informatii despre constrângeri găsim în :
· USER_CONSTRAINTS – informatii despre constrângerile definite de utilizatorul curent;
· ALL_CONSTRAINTS – informatii despre cosntrângerile definite de toti

Sintaxa simplificată a comenzii CREATE VIEW este:


CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW nume_view [(alias, alias, ..)]
AS subcerere
[WITH CHECK OPTION [CONSTRAINT nume_constr]]
[WITH READ ONLY [CONSTRAINT nume_constr]];

- FORCE permite crearea vizualizarea înainte de a defini tabelele de bază;


- subcererea poate fi oricât de complexă dar nu poate conŃine clauza ORDER BY;
- WITH CHECK OPTION permite inserarea si modificarea prin intermediul vizualizării numai a liniilor ce sunt
accesibile vizualizării; dacă lipseste numele constrângerii atunci sistemul asociază un nume implicit de tip
SYS_Cn acestei constrângeri;
- WITH READ ONLY asigură că prin intermediul vizualizării nu se pot executa operatii LMD.
Eliminarea unei vizualizări se face prin comanda DROP VIEW :
DROP VIEW nume_viz;
1. Să se creeze vizualizarea v_emp_*** care să contină codul si numele salariatilor din tabelul emp_***. Să
se afiseze continutul acesteia. Să se insereze o nouă înregistrare în această vizualizare. Ce observati? Să se
steargă vizualizarea v_emp_***.
Se creaza tabelul emp
CREATE TABLE emp (
employee_id NUMBER(4) PRIMARY KEY,
last_name VARCHAR2(64),
email VARCHAR2(64),
hire_date DATE DEFAULT SYSDATE,
salary NUMBER(8,2) DEFAULT 1000,
job_id VARCHAR2(10));
Se creaza vizualizarea v_emp
CREATE VIEW v_emp (cod, nume)
AS SELECT employee_id, last_name
FROM emp;
Se afiseaza continutul vizualizarii
select * from v_emp;
/*nici o înregistrare selectatã
Inseram o noua inregistrare
INSERT INTO v_emp
VALUES (400,’N1’);
Se sterge vizualizarea v_emp
DROP VIEW v_emp;
2. Să se creeze vizualizarea v_emp_*** care să contină codul, numele, emailul, data angajării, salariul si
codul jobului salariatilor din tabelul emp_***. Să se analizeze structura si continutul vizualizării. Să se
insereze o nouă înregistrare în această vizualizare. Să se verifice că noua înregistrare a fost inserată si în
tabelul de bază.
CREATE VIEW v_emp
AS
SELECT employee_id, last_name, email, hire_date, salary,job_id
FROM emp;
DESC v_emp
SELECT * FROM v_emp;
INSERT INTO v_emp
5
VALUES (400,’N1’,’E1’,SYSDATE,5000,’SA_REP’);
SELECT employee_id, last_name, email, hire_date, salary, job_id
FROM emp;
/* restrictia unica (SCOTT.SYS_C002806) nu este respectata – linia 5 si 6
3. Să se mărească cu 1000 salariul angajatului având codul 400 din vizualizarea creată anterior. Ce efect va
avea această actiune asupra tabelului de bază?
UPDATE v_emp
SET salary = salary + 1000
WHERE employee_id = 400;
SELECT * FROM v_emp;
SELECT * FROM emp;
/* salariul angajatului cu codul 400 devine 2000, in rest nu se schimba nimic
4. Să se steargă angajatul având codul 400 din vizualizarea creată anterior. Ce efect va avea această
actiune asupra tabelului de bază?
DELETE FROM v_emp
WHERE employee_id =400;
/* tabelul emp nu mai contine nici o inregistrare
5.a) Să se creeze vizualizarea v_emp_dept_*** care să contină employee_id, last_name, hire_date, job_id,
department_id din tabelul emp_*** si coloana department_name din tabelul dept_***.
Cream tabelul dept
CREATE TABLE dept (
department_id NUMBER(2) PRIMARY KEY,
department_descriere VARCHAR2(128));
Inseram in tabelul dept coloana department_name
Alter table dept
Add (department_name VARCHAR2(20));
Tabelul emp nu are coloana department_id asa ca trebuie creata pentru a putea continua
ALTER TABLE emp
ADD department_id NUMBER(2);
Se creaza vizualizarea
CREATE VIEW v_emp_dept
AS SELECT e.employee_id, e.last_name, e.hire_date, e.job_id, e.department_id, d.department_name
FROM emp e, dept d
WHERE e.department_id =d.department_id;
5.b) Să încerce inserarea înregistrării (500, 'N2', 'E2',SYSDATE,’SA_REP’,30, 'Administrativ') în
vizualizarea creată anterior.
INSERT INTO v_emp_dept VALUES (
500, 'N2', 'E2', SYSDATE,'SA-REP',30, 'Administrativ');
/*EROARE la linia 1: ORA-00913: prea multe valori
5.c) Care dintre coloanele vizualizării v_emp_dept_*** sunt actualizabile?
SELECT column_name, updatable
FROM user_updatable_columns
WHERE UPPER(table_name) = UPPER('v_emp_dept');
/* Toate sunt actualizabile in afara de departament_name
5.d) Adăugati tabelului emp_*** constrângerea de cheie externă care referă tabelul dept_***, apoi
verificati ce coloane din vizualizarea v_emp_dept_*** sunt actualizabile.
ALTER TABLE emp
ADD CONSTRAINT dep FOREIGN KEY (department_id)
REFERENCES dept1(department_id);
SELECT column_name, updatable
FROM user_updatable_columns
WHERE UPPER(table_name) = UPPER('v_emp_dept');
/* Toate sunt actualizabile in afara de departament_name
5.e) Recreati vizualizarea v_emp_dept_***, apoi verificati ce coloane sunt actualizabile.
CREATE OR REPLACE VIEW v_emp_dept
AS SELECT e.employee_id, e.last_name, e.hire_date, e.job_id, e.department_id, d.departament_name
6
FROM emp e, dept d
WHERE e.department_id =d.department_id;
SELECT column_name, updatable
FROM user_updatable_columns
WHERE UPPER(table_name) = UPPER('v_emp_dept');
/* Toate sunt actualizabile in afara de departament_name
6. Să se creeze vizualizarea v_dept_*** care să contine codul si numele departamentului, numărul de
angajati din departamentul respectiv si suma alocată pentru plata salariilor. Această vizualizare permite
actualizări?
CREATE VIEW v_dept (cod, nume, nr_angajati, val_salarii)
AS SELECT e.department_id, department_name, COUNT(*) nr_angajati,
SUM(salary) val_salarii
FROM emp e, dept d
WHERE e.department_id = d.department_id
GROUP BY e.department_id, department_name;
SELECT column_name, updatable
FROM user_updatable_columns
WHERE UPPER(table_name) = UPPER('v_dept');
/*Aceasta vizualizare nu permite actializari
7. a) Să se creeze vizualizarea v_emp30_*** care să contină numele, emailul, data angajării, salariul, codul
jobului si codul departamentului celor care lucrează în departamentul 30. În această vizualizare nu se va
permite modificarea sau inserarea liniilor ce nu sunt accesibile ei. Dati un nume constrângerii.
CREATE VIEW v_emp30
AS
SELECT employee_id, last_name, email, hire_date, salary, job_id,
department_id
FROM emp
WHERE department_id=30
WITH CHECK OPTION CONSTRAINT ck_option1;
7. b) Să se listeze structura si continutul vizualizării v_emp30_***.
DESCRIBE v_emp30;
SELECT * FROM v_emp30;
/*nici o inregistrare selectata
7. c) Să se încerce prin intermediul vizualizării inserarea unui angajat în departamentul 10 si a unui
angajat în departamentul 30
INSERT INTO v_emp30
VALUES ( 600, 'N5', 'E5', SYSDATE, 4000, 'ADMIN', 10);
EROARE la linia 1: ORA-01402: în vizualizarea WITH CHECK OPTION clauza where este încãlcatã
INSERT INTO v_emp30 VALUES (
600, 'N5', 'E5', SYSDATE, 4000, 'ADMIN', 30);
/*Daca department_id este 30 se face inserarea, inregistrarea de regaseste in tabela emp.
7. d) Să se încerce prin intermediul vizualizării modificarea departamentului unui angajat.
UPDATE v_emp30
SET department_id =20
WHERE employee_id = 11;
/*0 înregistrãri actualizate.
8. Să se creeze o vizualizare (v_dept_***) asupra tabelului dept_*** să nu permită efectuarea nici unei
operatii LMD. Testati operatiile de inserare, modificare si stergere asupra acestei vizualizări.
CREATE VIEW v_dept
AS SELECT * FROM dept
WITH READ ONLY;
/* EROARE la linia 1: ORA-00955: numele este deja utilizat de un obiect existent
CREATE OR REPLACE VIEW v_dept
AS SELECT * FROM dept
WITH READ ONLY;

7
9. Să se consulte informatii despre vizualizarea v_dept_***. Folositi vizualizarea dictionarului datelor
USER_VIEWS (coloanele VIEW_NAME si TEXT).
Obs: Coloana TEXT este de tip LONG. În cazul selectării unei coloane de tip LONG trebuie utilizată
comanda SET LONG n pentru a seta numărul de caractere afisate.
SET LONG 200
SELECT view_name, text
FROM user_views
WHERE UPPER(view_name)=UPPER(’v_dept’);

Definirea secventelor

Sintaxa comenzii CREATE SEQUENCE este:


CREATE SEQUENCE nume_secventă
[INCREMENT BY n]
[START WITH valoare_start]
[ {MAXVALUE valoare_maximă | NOMAXVALUE} ]
[ {MINVALUE valoare_minimă | NOMINVALUE} ]
[ {CYCLE | NOCYCLE} ]
[ {CACHE n | NOCACHE} ];
Stergerea secventelor se realizează cu ajutorul comenzii DROP SEQUENCE.
DROP SEQUENCE nume_secv;
10. Să se creeze o secventă care are pasul de incrementare 10 si începe de la 10, are ca valoare maximă
10000 si nu ciclează.
CREATE SEQUENCE sec
INCREMENT BY 10
START WITH 10
MAXVALUE 10000
NOCYCLE;
11. Să se modifice toate liniile din tabelul emp_***, regenerând codul angajatilor astfel încât să utilizeze
secventa sec_emp***. Să se anuleze modificările.
UPDATE emp
SET employee_id = sec_emp.NEXTVAL;
ROLLBACK;
12. Să se introducă un nou salariat în tabelul emp_*** folosindu-se pentru codul salariatului secventa
creată.
INSERT INTO emp VALUES (
sec_emp.NEXTVAL, 'N5', 'E5', SYSDATE, 2500, 'admin', 30);
13. Să se afiseze valoarea curentă a secventei.
SELECT sec_emp.CURRVAL valoare FROM DUAL;
Exercitiu
a) Creati o secventă pentru generarea codurilor de departamente, seq_dept_***. Secventa va începe de la
200, va creste cu 10 la fiecare pas si va avea valoarea maximă 20000, nu va cicla.
CREATE SEQUENCE seq_dept
START WITH 200
INCREMENT BY 10
MAXVALUE 20000
NOCYCLE;
b) Să se selecteze informatii despre secventele utilizatorului curent (nume, valoare minimă, maximă, de
incrementare, ultimul număr generat). Se va utiliza vizualizarea user_sequences.
SELECT * FROM user_sequences
WHERE sequence_name='SEQ_DEPT';
c) Să se insereze o înregistrare nouă în DEPT_*** utilizând secventa creată.
INSERT INTO departments VALUES (
seq_dept.NEXTVAL, 'contabil');

8
d) Să se selecteze valoarea curentă a secventei.
SELECT seq_dept.CURRVAL valoare FROM DUAL;
e) Să se steargă secventa.
DROP SEQUENCE seq_dept;

Definirea indecsilor
Sintaxa comenzii CREATE INDEX:
CREATE [UNIQUE] INDEX nume_index
ON tabel (coloana1 [, coloana2…]);
Modificarea unui index se face prin comanda ALTER INDEX.
Eliminarea unui index se face prin comanda: DROP INDEX nume_index;
14. Să se creeze un index neunic, emp_last_name_idx_***, asupra coloanei last_name din tabelul emp_***.
CREATE INDEX emp_last_name_idx ON EMP (last_name);
15. Să se creeze indecsi unici asupra codului angajatului (employee_id) si asupra combinatiei last_name,
first_name, hire_date.
CREATE UNIQUE INDEX employee_id_idx ON emp (employee_id);
CREATE UNIQUE INDEX employee_id_idx1 ON emp (last_name, hire_date);
16. Creati un index neunic asupra coloanei department_id din emp_*** pentru a eficientiza joinurile dintre
acest tabel si dept_***.
CREATE INDEX emp_department_idx ON EMP(department_id);

Definirea sinonimelor

Comanda pentru crearea sinonimelor este:


CREATE [PUBLIC] SYNONYM nume_sinonim
FOR obiect;
Eliminarea sinonimelor se face prin comanda
DROP SYNONYM nume_sinonim;
17. Creati un sinonim public se_*** pentru tabelul emp_***.
CREATE SYNONYM se for emp;
18. Creati un sinonim pentru vizualizarea v_dept_***.
CREATE SYNONYM sy_dept FOR v_dept;
19. Utilizând sinonimele create anterior, afisati informatii depre salariti si despre departamente.
SELECT * FROM se;
SELECT * FROM sy_dept;

Limbajul de interogare al datelor (DQL). SELECT

CERERI MONOTABEL
1. Analizati sintaxa simplificată a comenzii SELECT. Care dintre clauze sunt obligatorii?
SELECT { [ {DISTINCT | UNIQUE} | ALL] lista_campuri | *}
FROM [nume_schemă.]nume_obiect ]
[, [nume_schemă.]nume_obiect …]
[WHERE condiŃie_clauza_where]
[GROUP BY expresie [, expresie …]
[HAVING condiŃie_clauza_having] ]
[ORDER BY {expresie | poziŃie} [, {expresie | poziŃie} …] ]
2. Să se listeze structura tabelelor din schema HR (EMPLOYEES, DEPARTMENTS, JOB_HISTORY,
JOBS, LOCATIONS, COUNTRIES, REGIONS), observând tipurile de date ale coloanelor.
Obs: Se va utiliza comanda SQL*Plus DESCRIBE nume_tabel

9
Se creaza tabelele:
1. REGIONS TABLE – din fisierul hr_create.sql
2. COUNTRIES TABLE– din fisierul hr_create.sql
3. LOCATIONS TABLE– din fisierul hr_create.sql
4. DEPARTAMENTS TABLE– din fisierul hr_create.sql
5. JOBS TABLE– din fisierul hr_create.sql
6. EMPLOYYES TABLE– din fisierul hr_create.sql
7. JOB_HISTORY TABLE– din fisierul hr_create.sql
8. JOB_GRADES TABLE– din fisierul hr_create.sql

2. Să se listeze structura tabelelor din schema HR (EMPLOYEES, DEPARTMENTS, JOB_HISTORY,


JOBS, LOCATIONS, COUNTRIES, REGIONS), observând tipurile de date ale coloanelor.
Obs: Se va utiliza comanda SQL*Plus DESCRIBE nume_tabel
DESCRIBE employees;
DESCRIBE departments;
DESCRIBE jobs;
DESCRIBE job_history;
DESCRIBE locations;
DESCRIBE countries;
DESCRIBE regions;
3.Să se listeze continutul tabelelor din schema considerată, afisând valorile tuturor câmpurilor. Obs: Se va
utiliza comanda SQL SELECT * FROM nume_tabel;
SELECT * FROM employees;
SELECT * FROM departments;
SELECT * FROM jobs;
10
SELECT * FROM job_history;
SELECT * FROM locations;
SELECT * FROM countries;
SELECT * FROM regions;
/*nici o înregistrare selectatã – trebuie sa inseram valori in fiecare tabel
1. Inseram datele in tabelul REGIONS – din fisierul hr_insert.sql
2. Inseram datele in tabelul COUNTRIES – din fisierul hr_insert.sql
3. Inseram date in tabelul LOCATIONS – din fisierul hr_insert.sql
4. Inseram date in tabelul DEPARTMENTS – din fisierul hr_insert.sql
5.Inseram date in tabelul JOBS – din fisierul hr_insert.sql
6. Inseram date in tabelul EMPLOYEES– din fisierul hr_insert.sql
7. Inseram date in tabelul JOB_HISTORY - din fisierul hr_insert.sql
8. Inseram datele in tabelul JOB_GRADES - din fisierul hr_insert.sql
Reluam exercitiul
SELECT * FROM employees;
/*106 înregistrãri selectate.*/
SELECT * FROM departments;
/*27 înregistrãri selectate.*/
SELECT * FROM jobs;*/
/*19 înregistrãri selectate.*/
SELECT * FROM job_history;
/*10 înregistrãri selectate.*/
SELECT * FROM locations;
*/22 înregistrãri selectate.
SELECT * FROM countries;
*/22 înregistrãri selectate.
SELECT * FROM regions;
*/4 inregistrari */
4. Să se obtină încă o dată rezultatul cererii precedente, fără a rescrie cererea.
Obs: Ultima comandă SQL lansată de către client este păstrată în buffer-ul SQL. Pentru rularea acesteia se
utilizează “/” sau RUN.
RUN sau /
/* Acelasi rezultat ca la ex. 3
5. Listati structura tabelului EMPLOYEES si apoi dati comanda RUN (sau “/”). Ce observati? Comenzile
SQL*Plus sunt păstrate în buffer?
DESC employees
RUN
/*Comenzile sunt pastrate in buffer.
6. Să se afiseze codul angajatului, numele, codul job-ului, data angajării. Salvati instruciunea SQL într-un
fisier numit p1_14.sql.
Obs: Pentru salvarea ultimei comenzi SQL se utilizează comanda SAVE. Precizarea extensiei „.sql” a
fisierului nu este obligatorie.
SELECT employee_id, last_name, job_id, hire_date
FROM employees;
SAVE z:\…\ p1_14.sql
SELECT employee_id, last_name, job_id, hire_date
FROM employees;
SAVE E:\Oracle\p1_14.sql
7. Reexecutati cererea folosind fisierul p1_14.sql.
START z:\…\ p1_14.sql sau @ z:\…\ p1_14.sql
START E:\Oracle\p1_14.sql;
@ E:\Oracle\p1_14.sql;
8. Editati fisierul p1_14.sql, adăugând coloanelor câte un alias (cod, nume, cod job, data angajarii).
EDIT z:\…\ p1_14.sql
EDIT E:\Oracle\p1_14.sql;
SELECT employee_id cod, last_name nume, job_id "cod job", hire_date "data angajarii"
11
FROM employees;
9. Să se listeze, cu si fără duplicate, codurile job-urilor din tabelul EMPLOYEES.
Obs. DISTINCT = UNIQUE
SELECT DISTINCT job_id FROM employees;
sau
SELECT UNIQUE job_id FROM employees;
SELECT job_id FROM employees;
10. Să se afiseze numele concatenat cu prenumele, separate prin spatiu. Etichetati coloana “Nume si
prenume”.
Obs: Operatorul de concatenare este “||”. Sirurile de caractere se specifică între apostrofuri (NU ghilimele,
caz în care ar fi interpretate ca alias-uri).
SELECT last_name||' '||first_name "Nume si prenume"
FROM employees;
11. Să se listeze numele si salariul angajatilor care câstigă mai mult de 10000 $.
SELECT last_name, salary
FROM employees
WHERE salary > 10000;
12. Să se modifice cererea anterioară astfel încât să afiseze numele si salariul pentru toti angajatii al căror
salariu este cuprins între 5000$ si10000$.
Obs: Pentru testarea apartenentei la un domeniu de valori se poate utiliza operatorul [NOT] BETWEEN
valoare1 AND valoare2
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 5000 AND 10000;
13. Să se creeze o cerere pentru a afisa numele angajatului si numărul departamentului pentru angajatul
104.
SELECT last_name, department_id
FROM employees WHERE employee_id = 104;
14. Să se afiseze numele si salariul pentru toti angajatii din departamentele 10 sau 30, în ordine alfabetică a
numelor.
Obs: Apartenenta la o multime finită de valori se poate testa prin intermediul operatorului IN, urmat de
lista valorilor între paranteze si separate prin virgule:
expresie IN (valoare_1, valoare_2, …, valoare_n)SELECT last_name, salary
FROM employees
WHERE department_id IN (10, 30)
ORDER BY last_name;
/*afiseaza numai numele salariatilor in ordine alfabetica
Sau
SELECT last_name||' '||first_name "Nume complet", salary
FROM employees
WHERE department_id IN (10,30)
ORDER BY last_name, first_name;
/* afiseaza last_mame si frist_name (numele complet) in ordine alfabetica.
15. Să listeze numele si salariile angajatilor care câstigă mai mult de 10000 $ si lucrează în departamentul
10 sau 30. Se vor eticheta coloanele drept Angajat si Salariu lunar.
SELECT last_name "Angajat", salary "Salariu lunar"
FROM employees
WHERE department_id IN(10,30);
16. Care este data curentă?
Obs: Pseudocoloana care returnează data curentă este SYSDATE. Pentru completarea sintaxei obligatorii a
comenzii SELECT, se utilizează tabelul DUAL:
SELECT SYSDATE
FROM dual;
Datele calendaristice pot fi formatate cu ajutorul functiei TO_CHAR(data, format), unde formatul poate fi
alcătuit dintr-o combinatie a următoarelor elemente:

12
Element Semnificaie
D Numărul zilei din săptămână (duminică=1;
luni=2; …sâmbătă=6).
DD Numărul zilei din lună.
DDD Numărul zilei din an.
DY Numele zilei din săptămână, printr-o
abreviere de 3 litere (MON, THU etc.)
DAY Numele zilei din săptămână, scris în
întregime.
MM Numărul lunii din an.
MON Numele lunii din an, printr-o abreviere de 3
litere (JAN, FEB etc.)
MONTH Numele lunii din an, scris în întregime.
Y Ultima cifră din an
YY, YYY, YYYY Ultimele 2, 3, respectiv 4 cifre din an.
YEAR Anul, scris în litere (ex: two thousand
four).
HH12, HH24 Orele din zi, între 0-12, respectiv 0-24.
MI Minutele din oră.
SS Secundele din minut.
SSSSS Secundele trecute de la miezul nopŃii.

SELECT sysdate FROM DUAL;


17. Să se afiseze numele si data angajării pentru fiecare salariat care a fost angajat în 1987. Se cer 2
solutiiuna în care se lucrează cu formatul implicit al datei si alta prin care se formatează data.
Varianta1- cu formatul implicit al datei
SELECT last_name, hire_date
FROM employees
WHERE hire_date LIKE ('%87');
Varianta 2 – cu data formatata
SELECT last_name, hire_date
FROM employees
WHERE TO_CHAR(hire_date, 'YYYY' ) = 1987;
Sunt obligatorii ghilimelele de la sirul ‘1987’? Ce observati?
Nu sunt obligatorii.
18. Să se afiseze numele si job-ul pentru toti angajatii care nu au manager.
SELECT last_name, job_id
FROM employees
WHERE manager_id IS NULL;
19. Să se afiseze numele, salariul si comisionul pentru toti salariatii care câstigă comisioane. Să se sorteze
datele în ordine descrescătoare a salariilor, iar pentru cei care au acelasi salariu în ordine crescătoare a
comisioanelor.
SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC, commission_pct ASC;
20. Să se listeze numele tuturor angajatilor care au a treia litera din nume 'a'.
Obs: Pentru a forma măstile de caractere utilizate împreună cu operatorul LIKE cu scopul de a compara sirurile de
caractere, se utilizează:
% - reprezentând orice sir de caractere, inclusiv sirul vid; _ (underscore) reprezentând un singur caracter.
SELECT DISTINCT last_name
FROM employees WHERE last_name LIKE '__a%';
21. Folosind data curentă să se afiseze următoarele informatii:
- numele zilei, numărul zilei din săptămână, numărul zilei din luna, respectiv numărul zilei din an;

13
SELECT TO_CHAR(SYSDATE,'DAY,D,DD,DDD') FROM DUAL;
- numărul lunii din an, numele lunii cu abreviere la 3 caractere, respectiv numele complet al lunii;
SELECT TO_CHAR(SYSDATE,'MM-MON-MONTH') FROM DUAL;
- ora curentă (ora, minute, secunde).
SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') FROM DUAL;
22. Să se listeze numele departamentelor care functionează în locatia având codul 1700 si al căror manager
este cunoscut.
SELECT department_name
FROM departments
WHERE location_id=1700 AND manager_id IS NOT NULL;
23. Să se afiseze codurile departamentelor în care lucrează salariati.
SELECT DISTINCT department_id
FROM employees
WHERE department_id IS NOT NULL
ORDER BY department_id;
24. Să se afiseze numele si prenumele salariatilor angajati în luna mai 1987.
SELECT last_name, first_name
FROM employees
WHERE TO_CHAR(hire_date, 'MON,YYYY') = 'may-1987';
Sau
SELECT last_name, first_name
FROM employees
WHERE TO_CHAR (hire_date, 'mm-YYYY') = '05-1987';
25. Să se listeze codurile angajatilor care au avut si alte joburi fată de cel prezent. Să se ordoneze rezultatul
descrescător după codul angajatului.
SELECT department_name FROM departments
WHERE manager_id IS NOT NULL;
26. Să se afiseze numele si data angajării pentru cei care lucrează în departamentul 80 si au fost angajati în
luna martie a anului 1997.
SELECT last_name, hire_date
FROM employees
WHERE TO_CHAR(hire_date, 'MON-YYYY') = 'MAR-1987' AND department_id = 80;
27. Să se afiseze numele joburilor care permit un salariu cuprins între 8300$ si 14000$.
SELECT DISTINCT j.job_title, s.salary
FROM jobs j, employees s
WHERE j.job_id = s.job_id and salary BETWEEN 8300 AND 14000
ORDER BY salary DESC;
28. Care este grila de salarizare pentru un salariu de 10000$?
DELECT * FROM employees WHERE salary = 10000;
29. Să se listeze numele tuturor angajatilor care au 2 litere 'L' în nume si lucrează în departamentul 30 sau
managerul lor este 123.
SELECT last_name||' '||first_name "Numele si prenumele"
FROM employees
WHERE last_name LIKE '%L%L%'
AND department_id = 30 OR
manager_id = 123;
30. Să se afiseze numele, job-ul si salariul pentru toti salariatii al căror job contine sirul 'CLERK' sau
'REP' si salariul nu este egal cu 1000, 2000 sau 3000 $.
31. Să se afiseze numele, salariul si comisionul pentru toti angajatii al căror salariu este mai mare decât de
5 ori valoarea comisionului (salary*commission_pct*5).
SELECT last_name||' '||first_name "Numele si prenumele", commission_pct
FROM employees
WHERE salary > commission_pct*5;

FUNCłII SQL (single-row)

14
Principalele functii SQL pot fi clasificate în următoarele categorii:
· Functii single-row
· Functii multiple-row (functii agregat)
Functiile single-row returnează câte o linie rezultat pentru fiecare linie a tabelului sau vizualizării
interogate. Aceste functii pot apărea în listele SELECT, clauzele WHERE, START WITH, CONNECT BY
si HAVING.
1. Analizati următoarele functii pentru prelucrarea sirurilor de caractere:
2. LOWER (expresie) - Converteste un sir de caractere la minuscule.
LOWER ('AbCdE') = 'abcde'
UPPER (expresie) - Converteste un sir de caractere
UPPER ('AbCdE') = 'ABCDE'
INITCAP (expresie) - Converteste un sir de caractere la un sir care începe cu majusculă si continuă cu
INITCAP ('AbCdE') = 'Abcde'
INITCAP (expresie) - Converteste un sir de caractere la un sir care începe cu majusculă si continuă cu minuscule.
INITCAP ('AbCdE') = 'Abcde'
SUBSTR (expresie, m[, n]) - Extrage din expresia de tip sir de caractere, n caractere începând cu pozitia m. Dacă
lipseste argumentul n, atunci extrage toate caracterele până la sfârsitul sirului. Dacă m este negativ numărătoarea
poziŃiilor începe de la sfârsitul sirului de caractere spre început.
SUBSTR ('AbCdE', 2) = 'bCdE'
SUBSTR ('AbCdE', -3,2) = 'Cd'
SUBSTR ('AbCdE', -3) = 'CdE'
LENGTH (expresie) - Returnează numărul de caractere al expresiei.
LENGTH ('AbCdE') = 5
INSTR (expresie, expr1[, m][, n]) - Returnează pozitia la care se găseste a n-a ocurentă a expresiei 'expr1' în
cadrul expresiei 'expresie', căutarea începând de la poziŃia m. Daca m sau n lipsesc, valorile implicite sunt 1
pentru ambele.
INSTR (LOWER('AbCdE aBcDe'), 'ab', 5) = 7
INSTR (LOWER('AbC aBcDe'), 'ab', 5, 2) = 0
LTRIM (expresie[, expr1]) sau RTRIM (expresie[, expr1]) - Reversul functiilor LPAD, RPAD. Trunchează
expresia RTRIM (expresie[, expr1]) caracter la stânga sau la dreapta prin eliminarea succesivă a caracterelor din
expresia expr1. Implicit, daca lipseste, expr1 = 'abcde'
RTRIM ('abcdeXXXX', 'X') = 'abcde'
LTRIM (' abcde') = 'abcde'
TRIM (LEADING | TRAILING | BOTH caractere_trim FROM expresie) - Permite eliminarea caracterelor
specificate (caractere_trim) de la începutul (leading) , sfârsitul (trailing) sau din ambele părti, dintr-o expresie
caracter data.
TRIM (LEADING 'X' FROM
'XXXabcdeXXX') = 'abcdeXXX'
TRIM (TRAILING 'X' FROM
'XXXabcdeXXX') = 'XXXabcde'
TRIM ( BOTH 'X' FROM
XXXabcdeXXX') = 'abcde'
TRIM (' abcde ') = 'abcde'
2. Să se afiseze pentru fiecare angajat din departamentul 20 un sir de caractere de forma "Functia
salariatului {prenume} {nume} este {cod functie}".
Să se afiseze prenumele cu initiala litera mare, iar numele cu litere mari (Stephen KING), iar codul functiei
să se afiseze cu litere mici.
SELECT 'Functia salariatului ' || INITCAP(first_name)||' '||UPPER(last_name) ||' este ' ||LOWER(job_id)||' .' AS
"Angajatul si codul functiei"
FROM employees
WHERE department_id = 20;
3. Să se afiseze pentru angajatul cu numele 'HIGGINS' codul, numele si codul departamentului. Cum se
scrie conditia din WHERE astfel încât să existe siguranta ca angajatul 'HIGGINS' va fi găsit oricum ar fi
fost introdus numele acestuia? Căutarea trebuie să nu fie case-sensitive, iar eventualele blank-uri care
preced sau urmează numelui trebuie ignorate.

15
SELECT employee_id, last_name, department_id
FROM employees
WHERE UPPER(TRIM(last_name)) = 'HIGGINS';
4. Să se afiseze pentru toti angajatii al căror nume se termină în 'n', codul, numele, lungimea numelui si
pozitia din nume în care apare prima data litera 'a'. Asociati aliasuri coloanelor returnate de cerere.
SELECT employee_id, last_name, LENGTH(last_name), INSTR(UPPER(last_name), 'A')
FROM employees
WHERE SUBSTR(last_name,-1)='n';
5. Analizati următoarele functii aritmetice:
ROUND (expresie [, n]) - Returnează valoarea rotunjită a expresiei până la n zecimale. Daca n este negativ sunt
rotunjite cifre din stânga virgulei. Valoarea implicită pentru n este 0.
ROUND(1.6) = 2
ROUND(1.4) = 1
ROUND (1234.56,1) = 1234.6
ROUND (1230.56, -2) = 1200
ROUND (1260.56, -2) = 1300
MOD (m,n) - Returnează restul împărtirii lui m la n.
MOD (11, 4) = MOD (11, -4) = 3
MOD(-11, 4) = MOD (-11, -4) = -3
7. Să se afiseze numele, salariul si numărul de mii al salariului rotunjit la 2 zecimale pentru cei care nu au
salariul divizibil cu 1000.
SELECT last_name, salary, ROUND(salary/1000 ,2) "MII LEI"
FROM employees
WHERE MOD(salary,1000) !=0;
8. Analizati următoarele operatii pe expresii de tip dată calendaristică:
date -/+ number - Date - Scade/Adaugă un număr de zile dintr-o / la o dată.
date1 - date2 - Number - Întoarce numărul de zile dintre două date calendaristice.
date +/- number/24 – Date - Scade/Adaugă un număr de ore la o / dintr-o dată calendaristică.
9. Să se afiseze data (luna, ziua, ora, minutul si secunda) de peste 10 zile.
SYSDATE+10
SELECT TO_CHAR(SYSDATE+30, ‘MONTH DD HH24:MM:SS’) “Data”
FROM DUAL;
10. Să se afiseze numărul de zile rămase până la sfârsitul anului. ROUND(TO_DATE(’31-DEC-2009’)-
SYSDATE)
SELECT ROUND(TO_DATE('31-DEC-2009') - SYSDATE) FROM DUAL;
11. a. Să se afiseze data de peste 12 ore. SYSDATE+12/24
SELECT SYSDATE + 12/24 FROM DUAL;
Sau
SELECT TO_CHAR(SYSDATE+12/24, ‘ DD/MM HH24:MM:SS’) “Data”
FROM DUAL;
11. b. Să se afiseze data de peste 5 minute. SYSDATE+1/288
SELECT SYSDATE + 1/288 FROM DUAL;
Sau – data, incluziv minutele si secundele
SELECT TO_CHAR(SYSDATE+1/288, ‘ DD/MM HH24:MM:SS’) “Data”
FROM DUAL;
12. Analizati următoarele functii pentru prelucrarea datelor calendaristice:
SYSDATE - Întoarce data si timpul curent
MONTHS_BETWEEN (date1, date2) - Returnează numărul de luni dintre data date1 si data date2. Rezultatul
poate fi pozitiv sau negativ după cum date1 este mai recentă sau nu fată de date2. Zecimalele reprezintă parti
dintr-o luna!
ROUND(MONTHS_BETWEEN
(SYSDATE + 31, SYSDATE)) = 1
ADD_MONTHS (date, n) - Adaugă n luni la o data specificată. Valoarea n trebuie să fie întreagă (pozitivă sau
negativă).
ADD_MONTHS (date, n)
MONTHS_BETWEEN
16
(ADD_MONTHS(SYSDATE, 3),
SYSDATE) = 3
NEXT_DAY (date, char) - Returnează data corespunzătoare primei zile a săptămânii specificate (char) care
urmează după date.
NEXT_DAY('15-dec-2006','Monday') = '18-dec-2006'
NEXT_DAY ('15-dec-2006',1) = '18-dec-2006'
13. Să se afiseze numele angajatului, data angajării si data negocierii salariului, care a avut loc în prima zi
de Luni, după 6 luni de serviciu. Etichetati această coloană “Negociere”.
NEXT_DAY(ADD_MONTHS(hire_date, 6), ‘Monday’)
SELECT last_name, hire_date,
NEXT_DAY(ADD_MONTHS(hire_date, 6), 'Luni') "Negociere"
FROM employees;
14. Pentru fiecare angajat să se afiseze numele si numărul de luni de la data angajării. Etichetati
coloana“Luni lucrate”. Să se ordoneze rezultatul după numărul de luni lucrate. Se va rotunji numărul de
luni la cel mai apropiat număr întreg.
SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) “Luni lucrate”
FROM employees
ORDER BY MONTHS_BETWEEN(SYSDATE, hire_date);
SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) “Luni lucrate”
FROM employees
ORDER BY “Luni lucrate”;
SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) “Luni lucrate”
FROM employees
ORDER BY 2;
15. Analizati următoarele functii de conversie:
Obs. Conversiile implicite asigurate de server-ul Oracle sunt:
de la VARCHAR2 sau CHAR la NUMBER;
de la VARCHAR2 sau CHAR la DATE;
de la NUMBER la VARCHAR2 sau CHAR;
de la DATE la VARCHAR2 sau CHAR.
SELECT last_name
FROM employees
WHERE TO_CHAR(hire_date,'yyyy')=1994;
/* afiseaza o singura coloana cu numele salariatilor care au fost angajati in anul 1994*/
SELECT last_name
FROM employees
WHERE hire_date='07-IUN-1994';
/*afiseaza numele salariatilor care au fost angajati in 7 iunie 1994*/
SELECT employee_id||' '||last_name||' '||hire_date
FROM employees
WHERE department_id=10;
/* afiseaza id angajat, numele si data angajarii salariatilor din departamentul cu id 10*/
16. Să se afiseze numele si prenumele pentru toti angajatii care s-au angajat în luna mai.
SELECT last_name, first_name
FROM employees
WHERE TO_CHAR(hire_date,'MON') = 'MAY';
sau
SELECT last_name, first_name
FROM employees
WHERE TO_CHAR(hire_date,'mm') = 05;
18. Să se afiseze numele angajatilor si comisionul. Dacă un angajat nu câstigă comision, să se scrie “Fara
comision”. Etichetati coloana “Comision”.
NVL(TO_CHAR(commission_pct), ‘Fara comision’)
UPDATE employees SET commission_pct = NULL WHERE last_name = ' Kochhar';
SELECT last_name, NVL(TO_CHAR(commission_pct),'Fara comision') "Comision"
FROM employees;
17
19. Să se listeze numele, salariul si comisionul tuturor angajatilor al căror venit lunar depăseste 10000$.
salary * NVL(commission_pct, 0) venit_lunar
SELECT last_name, salary, commission_pct
FROM employees
WHERE salary * NVL(commission_pct, 0) >10000;
21. Să se afiseze numele, codul functiei, salariul si o coloana care să arate salariul după mărire. Se stie că
pentru IT_PROG are loc o mărire de 10%, pentru ST_CLERK 15%, iar pentru SA_REP o mărire de
20%. Pentru ceilalti angajati nu se acordă mărire. Să se denumească coloana "Salariu revizuit".
IT_PROG >> 44
ST_CLERK >> 55
SA_REP >> 99
SELECT last_name, job_id, salary,
DECODE(job_id, ‘IT_PROG’, salary*1.1, ’ST_CLERK’, salary*1.15, ‘SA_REP’, salary*1.2, salary ) “salariu
revizuit”
FROM employees;
SELECT last_name, job_id, salary,
CASE job_id WHEN ‘IT_PROG’ THEN salary* 1.1
WHEN ’ST_CLERK’ THEN salary*1.15
WHEN ‘SA_REP’ THEN salary*1.2
ELSE salary
END “salariu revizuit”
FROM employees;
SELECT last_name, job_id, salary,
CASE WHEN job_id= ‘IT_PROG’ THEN salary* 1.1
WHEN job_id=’ST_CLERK’ THEN salary*1.15
WHEN job_id =‘SA_REP’ THEN salary*1.2
ELSE salary
END “salariu revizuit”
FROM employees;
22. Să se afiseze numele salariatului si codul departamentului în care acesta lucrează. Dacă există salariati
care nu au un cod de departament asociat, atunci pe coloana id_depratment să se afiseze: textul “fara
departament”; valoarea zero.
SELECT last_name, NVL(TO_CHAR(department_id) , 'Fara departament') "department"
FROM employees;
SELECT last_name, NVL(TO_CHAR(department_id) , 0) "department"
FROM employees;
SELECT last_name,
CASE WHEN department_id IS NULL THEN 'Fara departament'
ELSE TO_CHAR(department_id)
END "DEPARTAMENT"
FROM employees;
SELECT last_name,
CASE WHEN department_id IS NULL THEN 0
ELSE department_id
END "DEPARTAMENT"
FROM employees;
23. a. Să se afiseze numele angajatilor care nu au manager.
SELECT last_name FROM employees WHERE manager_id IS NULL;
sau
SELECT last_name||' '||first_name FROM employees WHERE manager_id IS NULL;
23.b. Să se afiseze numele angajatilor si codul managerilor lor. Pentru angajatii care nu au manager să
apară textul “nu are sef”.
SELECT last_name,
CASE WHEN manager_id IS NULL THEN 'Nu are sef'
ELSE TO_CHAR(manager_id)
18
END "manager"
FROM employees;
Sau
SELECT last_name||' '||first_name,
CASE WHEN manager_id IS NULL THEN 'Nu are sef'
ELSE TO_CHAR(manager_id)
END "manager"
FROM employees;
24. Să se afiseze numele salariatului si:
· venitul anual dacă are comision;
· salariul dacă nu are comision.
Se va utiliza functia NVL2.
Functie
NVL2 (expr1, expr2, expr3)
Explicatie
Dacă expr1 este nenulă atunci returnează expr2, altfel Returnează expr3
Exemplu
NVL2 (1, 2, 3) = 2
NVL2 (NULL, 2, 3) = 3
24. Să se afiseze numele salariatului si:
· venitul anual dacă are comision;
· salariul dacă nu are comision.
Se va utiliza functia NVL2.
/*si aici voi aduna salariul cu comisionul*/
SELECT last_name NVL2(commission_pct, salary+commission_pct, 0) "It's about money"
FROM employees;
/*nu am inteles exact ce ar trebui sa facem asa ca am pus sa afiseze si separat pe doua coloane */
SELECT last_name, NVL2(commission_pct, salary+commission_pct, 0) "astia au comision",
NVL2(commission_pct, 0, salary) "astia nu au comision"
FROM employees;
?????????
25. Să se afiseze numele salariatului, salariul si salariul revizuit astfel:
- dacă lucrează de mai mult de 200 de luni atunci salariul va fi mărit cu 20%;
- dacă lucrează de mai mult de 150 de luni, dar mai putin de 200 de luni, atunci salariul va fi mărit cu 15%;
- dacă lucrează de mai mult de 100 de luni, dar mai puŃin de 150 de luni, atunci salariul va fi mărit cu
10%;
- altfel, salariul va fi mărit cu 5%.
SELECT last_name, salary,
CASE WHEN ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) > 200 THEN salary*1.2
WHEN ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) > 150 THEN salary*1.15 WHEN
ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) > 100 THEN salary*1.1
ELSE salary*1.05
END "SALARIU REVIZUIT"
FROM employees;

CERERI MULTITABEL, SUBCERERI

Tipuri de join:
- equijoin (se mai numeste inner join sau simple join) - compunerea a două tabele diferite după o conditie ce
contine operatorul de egalitate.
SELECT last_name, department_name, location_id, e.department_id
FROM employees e, departments d
WHERE e.department_id = d.department_id;
Obs: Numele sau alias-urile tabelelor sunt obligatorii în dreptul coloanelor care au acelasi nume
în mai multe tabele.
19
- nonequijoin - compunerea a două relatii tabele după o conditie oarecare, ce NU contine operatorul de egalitate.
SELECT last_name, salary, grade_level
FROM employees, job_grades
WHERE salary BETWEEN lowest_sal AND highest_sal;
- outerjoin - compunerea externă a două tabele diferite completând una dintre relatii cu valori NULL acolo unde
nu există în aceasta nici un tuplu ce îndeplineste conditia de corelare. Relatia completată cu valori NULL este cea
în dreptul căreia apare “(+)”. Operatorul (+) poate fi plasat în orice parte a conditiei de join, dar nu în ambele
părti. Full outer join = Left outer join UNION Right outer join.
SELECT last_name, department_name,location_id
FROM employees e, departments d
WHERE e.department_id(+) = d.department_id;
- selfjoin - compunerea externă a unui tabel cu el însusi după o conditie dată.
SELECT sef.last_name, angajat.last_name
FROM employees sef, employees angajat
WHERE sef.employee_id = angajat.manager_id
ORDER BY sef.last_name;

1. Pentru fiecare angajat să se afiseze numele, codul si numele departamentului.

SELECT last_name, e.department_id, department_name


FROM employees e, departments d
WHERE e.department_id = d.department_id;
2. Să se afiseze numele angajatului, numele departamentului pentru toti angajatii care câstigă comision.
SELECT last_name, department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND commission_pct IS NOT NULL;
2. Să se listeze numele job-urile care există în departamentul 30.
3. SELECT DISTINCT job_title
FROM employees e, jobs j
WHERE e.job_id = j.job_id
AND department_id = 30;
4. Sa se afiseze numele, job-ul si numele departamentului pentru tot angajati care lucrează în Seattle.
SELECT last_name, job_id, department_name
FROM employees e, departments d, locations s
WHERE e.department_id = d.department_id
AND d.location_id = s.location_id
AND city = ‘Seattle’;
Sau
SELECT last_name, e.job_id, department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND location_id = (SELECT location_id FROM locations WHERE city = 'Seattle');
5. Să se afiseze numele, salariul, data angajării si numele departamentului pentru toti programatorii care
lucrează în America.
region_name = ‘Americas’
job_title = ‘Programmer’
SELECT last_name, salary, hire_date, department_name
FROM employees e, departments d, locations s, countries c, regions r, jobs j
WHERE e.department_id = d.department_id
AND d.location_id = s.location_id

20
AND s.country_id = c.country_id
AND c.region_id = r.region_id
AND e.job_id = j.job_id
AND region_name = ‘Americas’
AND job_title = ‘Programmer’;
6. Să se afiseze numele salariatilor si numele departamentelor în care lucrează. Se vor afisa si salariatii
care nu lucrează într-un departament (right outher join).
SELECT last_name, department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+);
7. Să se afiseze numele departamentelor si numele salariatilor care lucrează în ele. Se vor afisa si
departamentele care nu au salariati (left outher join).
SELECT department_name, last_name
FROM employees e, departments d
WHERE e.department_id(+) = d.department_id;
8. Să se afiseze numele, job-ul, numele departamentului, salariul si grila de salarizare pentru toti angajatii.
SELECT last_name, job_id, salary, department_name, grade_level
FROM employees e, departments d, job_grades
WHERE e.department_id = d.department_id
AND salary BETWEEN lowest_sal AND highest_sal;
9. Să se afiseze codul angajatului si numele acestuia, împreună cu numele si codul sefului său direct. Se vor
eticheta coloanele Ang#, Angajat, Mgr#, Manager. Să se salveze instrucsiunea într-un fisier numit p3_9.sql.
SELECT a.employee_id “Ang#”, a.last_name “Angajat”,
b.employee_id “Mgr#”, b.last_name“Manager”
FROM employees a, employees b
WHERE a.manager_id = b. employee_id;
SAVE p3_9;
10. Să se modifice p3_9.sql pentru a afisa toti salariatii, inclusiv pe cei care nu au sef.
SELECT e.employee_id Ang#, e.last_name Angajat,
e.manager_id Mgr#, m.last_name Manager
FROM employees e, employees m
WHERE e.manager_id = m.employee_id(+);
11. Să se afiseze numele salariatului si data angajării împreună cu numele si data angajării sefului direct
pentru salariatii care au fost angajati înaintea sefilor lor. Se vor eticheta coloanele Angajat, Data_ang,
Manager si Data_mgr.
SELECT e.last_name Angajat, e.hire_date Data_ang, m.last_name Manager, m.hire_date Data_mgr
FROM employees e, employees m
WHERE e.manager_id = m.employee_id AND e.hire_date<m.hire_date;
12. Pentru fiecare angajat din departamentele 20 si 30 să afiseze numele, codul departamentului si toti
colegii săi (salariatii care lucrează în acelasi departament cu el). Se vor eticheta coloanele corespunzător.
SELECT a.last_name “Angajat”, a.department_id ”Departament”, b.last_name “Coleg”
FROM employees a, employees b
WHERE a.department_id = b.department_id
AND a.employee_id <> b.employee_id
AND a.department_id IN (20,30)
ORDER BY a.last_name;
13. Să se afiseze numele si data angajării pentru salariatii care au fost angajati după Fay.
SELECT last_name, hire_date
FROM employees
WHERE hire_date > (SELECT hire_date
FROM employees
WHERE last_name = ‘Fay’);
21
Sau
SELECT a.last_name, a.hire_date
FROM employees a, employees b
WHERE UPPER(b.last_name)=’FAY’ AND a.hire_date>b.hire_date;
14. Scrieti o cerere pentru a afisa numele si salariul pentru toti colegii (din acelasi departament) lui Fay. Se
va exclude Fay.
SELECT last_name, salary
FROM employees
WHERE last_name <> ‘Fay’
AND department_id = (SELECT department_id
FROM employees
WHERE last_name = ‘Fay’);
Sau
SELECT last_name, salary
FROM employees
WHERE department_id = (SELECT department_id
FROM employees WHERE last_name = 'Fay')
AND last_name != 'Fay';
15. Să se afiseze codul departamentului, codul si numele angajatilor care lucrează în acelasi departament
cu cel putin un angajat al cărui nume contine litera “T”. Să se ordoneze după codul departamentului.
SELECT employee_id, last_name, department_id
FROM employees
WHERE department_id IN (SELECT DISTINCT department_id
FROM employees
WHERE UPPER(last_name) LIKE ‘%T%’)
ORDER BY department_id;
16. Să se afiseze numele si salariul angajatilor condusi direct de Steven King.
SELECT last_name, salary
FROM employees
WHERE manager_id = (SELECT employee_id
FROM employees
WHERE UPPER(last_name) ='KING'
AND UPPER(first_name) ='STEVEN' );
17. Să se afiseze numele si job-ul tuturor angajatilor din departamentul ‘Sales’.
SELECT last_name, job_id
FROM employees
WHERE department_id = (SELECT department_id
FROM departments
WHERE department_name ='Sales');
18. Să se afiseze numele angajatilor, numărul departamentului si job-ul tuturor salariatilor al căror
departament este localizat în Seattle.
SELECT last_name, job_id, department_id
FROM employees
WHERE department_id IN (SELECT department_id
FROM departments
WHERE location_id = (SELECT location_id
FROM locations
WHERE city = ‘Seattle’));
Rezolvati această problemă utilizând join-uri.
19. Să se afle dacă există angajati care nu lucrează în departamentul ‘Sales’ si al căror salariu si comision
coincid cu salariul si comisionul unui angajat din departamentul ‘Sales’.
SELECT last_name, salary, commission_pct, department_id
FROM employees
22
WHERE (salary, commission_pct) IN (SELECT salary, commission_pct
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND department_name = ‘Sales’)
AND department_id <> (SELECT department_id
FROM departments
WHERE department_name = ‘Sales’);
20. Scrieti o cerere pentru a afisa numele, numele departamentului si salariul angajatilor care nu câstigă
comision, dar al căror manager coincide cu managerul unui angajat care câstigă comision.
SELECT last_name, department_name, salary
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND e.manager_id IN (SELECT DISTINCT manager_id
FROM employees
WHERE commission_pct IS NOT NULL)
AND commission_pct IS NULL;
21. Scrieti o cerere pentru a afisa angajatii care câstigă mai mult decât oricare functionar. Sortati
rezultatele după salariu, în ordine descrescătoare.
SELECT last_name, salary, job_id
FROM employees
WHERE salary > (SELECT MAX(salary)
FROM employees
WHERE job_id LIKE '%CLERK')
ORDER BY salary DESC;
22. Să se afiseze codul, numele si salariul tuturor angajatilor care câstigă mai mult decât salariul mediu.
SELECT employee_id, last_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary)
FROM employees);
23. Să se afiseze pentru fiecare salariat angajat în luna martie numele său, data angajării si numele jobului.
SELECT last_name, hire_date, job_title
FROM employees e, jobs j
WHERE TO_CHAR(hire_date,'MON') = 'MAR'
AND e.job_id = j.job_id;
24. Să se afiseze pentru fiecare salariat al cărui câstig total lunar este mai mare decât 12000, numele său,
câstigul total lunar si numele departamentului în care lucrează.
SELECT last_name, salary+commission_pct "castig total lunar" , department_name
FROM employees e, departments d
WHERE salary+commission_pct > 12000
AND e.department_id = d.department_id;
25. Să se afiseze pentru fiecare angajat codul său si numele joburilor sale anterioare, precum si intervalul
de timp în care a lucrat pe jobul respectiv.??
SELECT employee_id, job_id, start_date "data angaj job anterior",end_date"data final job anterior",
ROUND(MONTHS_BETWEEN(end_date, start_date)) "interval angajare"
FROM Job_history;
/* Nu stiu daca este bine
EMPLOYEE_ID JOB_ID data angaj data final interval angajare
----------- ---------- ---------- ---------- -----------------
102 IT_PROG 13-01-1993 24-07-1998 66
101 AC_ACCOUNT 21-09-1989 27-10-1993 49
101 AC_MGR 28-10-1993 15-03-1997 41
201 MK_REP 17-02-1996 19-12-1999 46
114 ST_CLERK 24-03-1998 31-12-1999 21
122 ST_CLERK 01-01-1999 31-12-1999 12
23
176 SA_REP 24-03-1998 31-12-1998 9
176 SA_MAN 01-01-1999 31-12-1999 12
200 AC_ACCOUNT 01-07-1994 31-12-1998 54
200 AD_ASST 17-09-1987 17-06-1993 69
26. Să se modifice cererea de la punctul 25 astfel încât să se afiseze si numele angajatului, respectiv codul
jobului său curent.
SELECT last_name, job_id, hire_date "data angajarii", SYSDATE "data curenta",
ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) "Vechime in firma"
FROM employees;
27. Să se modifice cererea de la punctul 26 astfel încât să se afiseze si numele jobului său curent.
SELECT last_name, e.job_id, job_title, hire_date "data angajarii", SYSDATE "data curenta",
ROUND(MONTHS_BETWEEN(SYSDATE, hire_date))||' ' ||'luni' "Vechime in firma"
FROM employees e, jobs j
WHERE e.job_id = j.job_id;
28. Să se afiseze salariatii care au acelasi manager ca si angajatul având codul 140.
SELECT first_name||' '||last_name
FROM employees
WHERE manager_id = ( SELECT manager_id FROM employees WHERE employee_id = 140);
29. Să se afiseze numele departamentelor care functionează în America.

Functii multiple-row (grup). Gruparea datelor.

Aceste tipuri de functii pot fi utilizate pentru a returna informatia corespunzătoare fiecăruia dintre
grupurile obtinute în urma divizării liniilor tabelului cu ajutorul clauzei GROUP BY.
Pot apărea în clauzele SELECT, ORDER BY si HAVING.
Server-ul Oracle aplică aceste functii fiecărui grup de linii si returnează un singur rezultat pentru fiecare
multime.
Exemple de functii grup: AVG, SUM, MAX, MIN, COUNT etc.
Tipurile de date ale argumentelor functiilor grup pot fi CHAR, VARCHAR2, NUMBER sau DATE.
Functiile AVG si SUM, operează numai asupra valorilor numerice. Functiile MAX si MIN pot opera
asupra valorilor numerice, caracter sau dată calendaristică.
Toate functiile grup, cu exceptia lui COUNT(*), ignoră valorile null. COUNT(expresie)
returnează numărul de linii pentru care expresia dată nu are valoarea null. FuncŃia COUNT returnează un
număr mai mare sau egal cu zero si nu întoarce niciodată valoarea null.
Când este utilizată clauza GROUP BY, server-ul sortează implicit multimea rezultată în
ordinea crescătoare a valorilor coloanelor după care se realizează gruparea.
Absenta clauzei GROUP BY conduce la aplicarea funcŃiei grup pe mulŃimea tuturor liniilor
tabelului.
În clauza GROUP BY se trec obligatoriu toate coloanele prezente în clauza SELECT, care nu sunt
argument al functiilor grup.
1. Să se afiseze cel mai mare salariu, cel mai mic salariu, suma si media salariilor tuturor angajatilor.
Etichetati coloanele Maxim, Minim, Suma, respectiv Media. Să se rotunjească rezultatele.
SELECT MIN(salary) min, MAX(salary) max, SUM(salary) suma,
ROUND(AVG(salary)) media
FROM employees;
2. Utilizând functia grup COUNT să se determine:
a. numărul total de angajati;
SELECT COUNT(*) "Total - angajati" FROM employees;
b. numărul de angajati care au manager;
SELECT COUNT(*) "angajari cu manager" FROM employees WHERE manager_id IS NOT NULL;
c. numărul de manageri.
SELECT COUNT(*) "Numar manageri" FROM employees WHERE manager_id IS NULL;
3. Să se afiseze diferenta dintre cel mai mare si cel mai mic salariu. Etichetati coloana “Diferenta”.
SELECT MAX(salary) - MIN(salary) "Diferenta" FROM employees;

24
4. Să se listeze numărul de angajati din departamentul având codul 50.
SELECT COUNT(*) "ANGAJATI - DEP_50" FROM employees WHERE department_id = 50;
5. Cati angajati din departamentul 80 câstigă comision?
SELECT COUNT(*) "ANGAJATI CU COMISION" FROM employees WHERE commission_pct IS
NOTNULL;
6. Să se selecteze valoarea medie si suma salariilor pentru toti angajatii care sunt reprezentanti de vânzări
(SA_MAN, SA_REP).
SELECT AVG(salary) media, SUM(salary)
FROM employees
GROUP BY job_id IN ( SA_MAN, SA_REP);
7. Să se selecteze data angajării primei persoane care a fost angajată de companie.
SELECT MIN(hire_date) FROM employees;
8. Să se afiseze numărul de angajati pentru fiecare job.
SELECT job_id, COUNT(employee_id) nr_angajati
FROM employees
GROUP BY job_id;
9. Să se afiseze minimul, maximul, suma si media salariilor pentru fiecare departament.
SELECT department_id, MIN(salary), MAX(salary), SUM(salary), AVG(salary)
FROM employees
GROUP BY department_id;
10. Să se afiseze codul departamentului si media salariilor pentru fiecare job din cadrul acestuia.
SELECT department_id, job_id, AVG(salary)
FROM employees
GROUP BY department_id, job_id;
11. a. Să se afiseze codul departamentelor pentru care salariul minim depăseste 5000$.
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary)>5000;
11.b. Să se modifice cererea anterioară astfel încât să se afiseze si orasul în care functionează aceste
departamente.
SELECT department_id, MIN(salary), city
FROM employees, locations
GROUP BY department_id, city
HAVING MIN(salary) > 5000;
12. Să se obtină codul departamentelor si numărul de angajati al acestora pentru departamentele care au
cel putin 10 angajati.
SELECT department_id, COUNT(employee_id)
FROM employees
GROUP BY department_id
HAVING COUNT(employee_id) >= 10;
13. Să se obtină codul departamentelor si suma salariilor angajatilor care lucrează în acestea, în ordine
descrescătoare după sumă. Se consideră angajatii care au comision si departamentele care au mai mult de
5 angajati.
SELECT department_id, SUM(salary)
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY department_id
HAVING COUNT(employee_id) > 5
ORDER BY SUM(salary) DESC;
14. Să se obtină job-ul pentru care salariul mediu este minim.
SELECT job_id
FROM employees
GROUP BY job_id
HAVING AVG(salary) = (SELECT MIN(AVG(salary))
FROM employees
25
GROUP BY job_id);
15. Să se afiseze cel mai mare dintre salariile medii pe departamente.
SELECT AVG(salary)
FROM employees
GROUP BY department_id
HAVING AVG(salary) = (SELECT MAX(AVG(salary)) FROM employees GROUP BY department_id);
16. a. Să se afiseze codul, numele departamentului si suma salariilor pe departamente.
SELECT d.department_id, department_name,a.suma
FROM departments d, (SELECT department_id ,SUM(salary) suma
FROM employees
GROUP BY department_id) a
WHERE d.department_id =a.department_id;
b. Dati o altă metodă de rezolvare a acestei probleme.
SELECT d.department_id, department_name, SUM(salary)
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY d.department_id, department_name;
17. a. Scrieti o cerere pentru a afisa numele departamentului, numărul de angajati si salariul mediu pentru
angajatii din acel departament. Coloanele vor fi etichetate Departament, Nr. angajati, Salariu Mediu.
SELECT department_name “Departament”,
(SELECT COUNT(employee_id)
FROM employees
WHERE department_id = d.department_id ) ” Nr. angajati”,
(SELECT AVG(salary)
FROM employees
WHERE department_id = d.department_id) ”Salariu mediu”
FROM departments d;
b. Dati o altă metodă de rezolvare pentru problema anterioară.
SELECT department_name "Departament", COUNT(employee_id) "Nr. angajati", AVG(salary) "Salariu mediu"
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY department_name;
/* nu returneaza departmanetele care nu au angajati*/
18. Să se creeze o cerere prin care să se afiseze numărul total de angajati si, din acest total, numărul celor
care au fost angajati în 1997, 1998, 1999 si 2000. Datele vor fi afisate în forma următoare:
Total 1997 1998 1999 2000
--------------------------------------------------------------
50 10 5 25 1

SUM(DECODE(TO_CHAR(hire_date,'yyyy'),1997,1,0))
SELECT COUNT(employee_id) "Total",
SUM(DECODE(TO_CHAR(hire_date,'yyyy'),1997,1,0)) "1997",
SUM(DECODE(TO_CHAR(hire_date,'yyyy'),1998,1,0)) "1998",
SUM(DECODE(TO_CHAR(hire_date,'yyyy'),1999,1,0)) "1999",
SUM(DECODE(TO_CHAR(hire_date,'yyyy'),2000,1,0)) "2000"
FROM employees;
/*afiseaza
Total 1997 1998 1999 2000
---------- ---------- ---------- ---------- ----------
106 28 23 18 11

Operatorii ROLLUP si CUBE


Clauza GROUP BY permite gruparea liniilor selectate după valorile expresiilor precizate în aceasta.
Pentru fiecare grup, va fi returnată o singură linie de informatie. Clauza GROUP BY poate produce grupări
superagregat utilizând extensiile CUBE sau ROLLUP.
26
ROLLUP
- grupează liniile selectate pe baza valorilor primelor n, n - 1, …, 0 expresii din specificatia
GROUP BY si returnează o singură linie pentru fiecare grup.
- creează grupări prin deplasarea într-o singură direcŃie, de la dreapta la stânga, de-a
lungul listei de coloane specificate în clauza GROUP BY
Apoi, se aplică functia agregat acestor grupări. Dacă sunt specificate n expresii în operatorul ROLLUP,
numărul de grupări generate va fi n + 1. Liniile care se bazează pe valoarea primelor n expresii se numesc linii
obisnuite, iar celelalte se numesc linii superagregat.
GROUP BY ROLLUP (expr_1, expr_2, …, expr_n) generează n+1 tipuri de linii, corespunzătoare
următoarelor grupări:
· GROUP BY (expr_1, expr_2, …, expr_n-1, expr_n)
· GROUP BY (expr_1, expr_2, …, expr_n-1)
·…
· GROUP BY (expr_1, expr_2)
· GROUP BY (expr_1)
· GROUP BY () – corespunzător absentei clauzei GROUP BY si deci, calculului funcŃiilor
grup din cerere pentru întreg tabelul.

CUBE grupează liniile selectate pe baza valorilor tuturor combinatiilor posibile ale expresiilor specificate si
returnează câte o linie totalizatoare pentru fiecare grup. Acest operator este folosit pentru a produce multimi de
rezultate care sunt utilizate în rapoarte. În vreme ce ROLLUP produce subtotalurile doar pentru o parte dintre
combinatiile posibile, operatorul CUBE produce subtotaluri pentru toate combinatiile posibile de grupări
specificate în clauza GROUP BY, precum si un total general.
Dacă există n coloane sau expresii în clauza GROUP BY, vor exista 2n combinatii posibile superagregat.
19. Să se afiseze codurile departamentelor în care lucrează cel putin un angajat, iar pentru fiecare dintre
acestea si pentru fiecare manager care lucrează în departamentul respectiv să se afiseze numărul de
salariati. De asemenea, să se afiseze numărul de salariati pentru fiecare departament indiferent de
manager si numărul total de angajati din companie.
SELECT department_id, manager_id, COUNT(employee_id)
FROM employees
WHERE manager_id IS NOT NULL AND department_id IS NOT NULL
GROUP BY ROLLUP (department_id, manager_id);
20. Să se afiseze codurile departamentelor în care lucrează cel putin un angajat, iar pentru fiecare dintre
acestea si pentru fiecare manager care lucrează în departamentul respectiv să se afiseze numărul de
salariati. De asemenea, să se afiseze numărul de salariati pentru fiecare departament indiferent de
manager, numărul de angajati subordonati unui manager indiferent de departament si numărul total de
angajati din companie.
SELECT department_id, manager_id, COUNT(employee_id)
FROM employees
WHERE manager_id IS NOT NULL AND department_id IS NOT NULL
GROUP BY CUBE (department_id, manager_id);
21. Pentru fiecare departament, job, respectiv an al angajării să se afiseze numărul de salariati. De
asemenea se va afisa numărul de angajati:
- pentru fiecare departament si job, indiferent de anul angajării;
- pentru fiecare departament, indiferent de job si de anul angajării;
- la nivel de companie.
Exemplu:
Să se afiseze valoarea totală a operelor de artă ale unui autor, expuse în cadrul fiecărei galerii având codul mai
mic decât 50. De asemenea, să se afiseze valoarea totală a operelor din fiecare galerie având codul mai mic decât
50, valoarea totală a operelor fiecărui autor indiferent de galerie si valoarea totală a operelor din galeriile având
codul mai mic decât 50.
SELECT cod_galerie, cod_artist, SUM(valoare)
FROM opera
WHERE cod_galerie < 50
GROUP BY CUBE(cod_galerie, cod_artist);
27
22. Să se afiseze suma alocată pentru plata salariilor pe joburi (codul jobului), în cadrul departamentului
(codul departamentului). De asemenea, să se afiseze valoarea totală necesară pentru plata salariilor la nivel
de departament, valoarea totală necesară pentru plata salariilor la nivel de job, indiferent de departament
si valoarea totală necesară pentru plata salariilor la nivel de companie.
23. Functia GROUPING(expresie) întoarce:
- valoarea 0, dacă expresia a fost utilizată pentru calculul valorii agregat
- valoarea 1, dacă expresia nu a fost utilizată.
24. Să se afiseze numele departamentelor, titlurile job-urilor si valoarea medie a salariilor, pentru:
- fiecare departament si, în cadrul său pentru fiecare job;
- fiecare departament (indiferent de job);
- întreg tabelul.
De asemenea, să se afiseze si o coloană care indică intervenŃia coloanelor department_name si job_title în
obtinerea rezultatului.
SET LINESIZE 100
COLUMN job FORMAT ‘99’
COLUMN dept FORMAT ‘99’
SELECT department_name, job_title, AVG(salary) medie,
GROUPING(department_name) dept, GROUPING(job_title) job
FROM employees e, departments d, jobs j
WHERE e.department_id = d.department_id
AND e.job_id = j.job_id
GROUP BY ROLLUP(department_name, job_title);
25. Modificati cererea anterioară astfel încât să se afiseze numele departamentelor, titlurile job-urilor si
valoarea medie a salariilor, pentru:
- fiecare departament si, în cadrul său pentru fiecare job;
- fiecare departament (indiferent de job);
- fiecare job(indiferent de departament);
- întreg tabelul.
Cum intervin coloanele în obtinerea rezultatului? Să se afiseze ’Dept’, dacă departamentul a intervenit în
agregare si ‘Job’, dacă job-ul a intervenit în agregare.
DECODE(GROUPING(department_name), 0, ‘Dept’)

SELECT department_name, job_title, AVG(salary) medie,


DECODE(GROUPING(department_name), 0, ‘Dept’) dept,
DECODE(GROUPING(job_title), 0, ‘Job’) job
FROM employees e, departments d, jobs j
WHERE e.department_id = d.department_id
AND e.job_id = j.job_id
GROUP BY CUBE(department_name, job_title);
26. Utilizati cererea de la punctul 20.
a. Eliminati clauza WHERE din această cerere. Analizati rezultatul obtinut.
b. Modificati cererea obtinută astfel încât să se identifice dacă o valoare null din rezultat este stocată pe
una dintre coloanele manager_id sau department_id sau este produsă de operatorul CUBE.
/*Cererea de la pct.20*/
SELECT department_id, manager_id, COUNT(employee_id)
FROM employees
WHERE manager_id IS NOT NULL AND department_id IS NOT NULL
GROUP BY CUBE (department_id, manager_id);
/* 54 de inregistrari selectate*/
SELECT department_id, manager_id, COUNT(employee_id)
FROM employees
GROUP BY CUBE (department_id, manager_id);
/*58 înregistrãri selectate.*/
/* se afiseaza departamentele care nu au angajati si angajatii care nu fac parte din nici un departament

28
27. Clauza GROUPING SETS. Permite obtinerea numai a anumitor grupări superagregat. Acestea pot fi
precizate prin intermediul clauzei:
GROUP BY GROUPING SETS ((expr_11, expr_12, …, expr_1n), (expr_21, expr_22, …expr_2m),
…)
28. Să se afiseze numele departamentelor, numele job-urilor, codurile managerilor angajatilor, maximul si
suma salariilor pentru:
- fiecare departament si, în cadrul său, fiecare job;
- fiecare job si, în cadrul său, pentru fiecare manager;
- întreg tabelul.
GROUPING SETS ((department_name, job_title), (job_title, e.manager_id), ());

SELECT department_name, job_title, e.manager_id, MAX(salary) “Maxim”, SUM(salary) “Suma”


FROM employees e, departments d, jobs j
WHERE e.department_id = d.department_id
AND e.job_id = j.job_id
GROUP BY GROUPING SETS ((department_name, job_title), (job_title, e.manager_id), ());

Limbajul de control al datelor (DCL). COMMIT, SAVEPOINT, ROLLBACK.

· Comanda COMMIT permanentizează modificările care au fost realizate de tranzactia curentă (o tranzactie este
un set de comenzi LMD); comanda suprimă toate punctele intermediare definite în tranzactie si eliberează
blocările tranzactiei.
Observatie:
Sistemul realizează COMMIT implicit:
- la închiderea normală a unui client Oracle (de exemplu SQL*Plus),
- după fiecare comandă LDD (CREATE, ALTER, DROP).
· Comanda SAVEPOINT marchează un punct intermediar în procesarea tranzactiei. În acest mod este posibilă
împărtirea tranzactiei în subtranzactii.
Comanda SAVEPOINT are sintaxa:
SAVEPOINT nume_pct_intermediar;
· Comanda ROLLBACK permite renuntarea la modificările efectuate; aceasta determină încheierea tranzactiei,
anularea modificărilor asupra datelor si restaurarea stării lor precedente.
Comanda ROLLBACK are sintaxa:
ROLLBACK [TO SAVEPOINT nume_punct_salvare];
Observatii:
- sistemul realizează ROLLBACK implicit dacă se închide anormal (defectiune hardware sau software, pană de
curent etc.);
- nici o comanda LDD (CREATE, ALTER; DROP) nu poate fi anulată.
1. Ce efect are următoarea secventă de instructiuni?
CREATE TABLE dept1
AS SELECT * FROM departments;
SELECT * FROM dept1;
SAVEPOINT a;
/* punct de salvare creat*/
DELETE FROM dept1;
INSERT INTO dept1
VALUES (300,’Economic’,100,1000);
/*EROARE la linia 1:ORA-00913: prea multe valori*/
INSERT INTO dept1
VALUES (350,’Cercetare’,200,2000);
/*EROARE la linia 1:ORA-00913: prea multe valori*/
SAVEPOINT b;
/* punct de salvare creat*/
INSERT INTO dept1
VALUES (400,’Juritic’,150,3000);
29
SELECT COUNT(*)
FROM dept1;
*/ COUNT(*)
----------
0*/
ROLLBACK TO b;
/* revenire incheiata
SELECT COUNT(*)
FROM dept1;
*/COUNT(*)
----------
0*/
ROLLBACK TO a;
*/ punct de salvare creat
INSERT INTO dept1
VALUES (500,’Contabilitate’,175,1500);
*/EROARE la linia 1: ORA-00913: prea multe valori*/
COMMIT;
*/Confirmare finalizatã.*/
SELECT *
FROM dept1; */nici o înregistrare selectatã*/
Limbajul de prelucrare a datelor (DML). INSERT, UPDATE, DELETE.
1. Să se creeze tabele emp_*** si dept_***, având aceeasi structură si date ca si tabelele employees,
respectiv departments.
CREATE TABLE emp AS SELECT * FROM employees;
CREATE TABLE dept AS SELECT * FROM departments;
2. Să se selecteze toate înregistrările din cele două tabele create anterior.
SELECT * FROM emp;
SELECT * from dept;
3.Stergeti toate înregistrările din cele 2 tabele create anterior. Salvati modificările.
DELETE FROM emp;
DELETE FROM dept;
COMMIT;
4. Să se listeze structura tabelului employees si să se compare cu structura tabelului emp_***. Ce observati?
DESCRIBE employees;
DESCRIBE emp;
/*Au aceeasi structura.*/
5. Sintaxa simplificată a comenzii INSERT
- pentru inserarea unei singure linii:
INSERT INTO nume_tabel [(col1,col2,...)]
VALUES (expresie1, expresie2, ...);
- pentru inserarea liniilor rezultat ale unei comenzi SELECT:
INSERT INTO nume_tabel [(col1,col2,...)]
comanda_SELECT;
6. Să se exemplifice câteva dintre erorile care pot să apară la inserare si să se observe mesajul returnat de
sistem.
- lipsa de valori pentru coloane NOT NULL (coloana department_name este definită NOT NULL)
INSERT INTO dept (department_id, location_id)
VALUES (200, 2000);
*/EROARE la linia 1: ORA-01400: nu poate fi inserat NULL în ("SCOTT"."DEPT3"."DEPARTMENT_NAME")*/
- nepotrivirea listei de coloane cu cea de expresii
INSERT INTO dept
VALUES (200, 2000);
INSERT INTO dept(department_id, department_name,location_id)
VALUES (200, 2000);
*/EROARE la linia 2: ORA-00947: valori prea putine*/
30
- nepotrivirea tipului de date
INSERT INTO dept (department_id, location_id)
VALUES (‘D23’, 2000);
*/EROARE la linia 2: ORA-01722: numãr eronat*/
- valoare prea mare pentru coloană
INSERT INTO dept_*** (department_id, location_id)
VALUES (15000, 2000);
7. Inserati în tabelul emp_*** salariatii (din tabelul employees) al căror comision depăseste 25% din
salariu.
INSERT INTO emp
SELECT * FROM employees WHERE salary*0.25 < commission_pct ;
8. Creati tabele emp1_***, emp2_*** si emp3_*** cu aceeasi structură ca tabelul employees.
Inserati, utilizând o singură comandă INSERT, informatii din tabelul employees:
- în tabelul emp1_*** salariatii care au salariul mai mic decât 6000;
- în tabelul emp2_*** salariatii care au salariul cuprins între 6000 si 10000;
- în tabelul emp3_*** salariatii care au salariul mai mare decât 10000.
Verificati rezultatele, apoi stergeti toate înregistrările din aceste tabele.
Obs. Clauza ALL a comenzii INSERT determină evaluarea tuturor conditiilor din clauzele WHEN. Pentru
cele a căror valoare este TRUE, se inserează înregistrarea specificată în optiunea INTO corespunzătoare.
CREATE TABLE emp1_1
AS SELECT * FROM employees WHERE 1=0;
CREATE TABLE emp2_1
AS SELECT * FROM employees WHERE 1=0;
CREATE TABLE emp3_1
AS SELECT * FROM employees WHERE 1=0;
INSERT ALL
WHEN salary < =6000 THEN
INTO emp1_1
WHEN salary > = 6000 AND salary <= 10000 THEN
INTO emp2_1
ELSE
INTO emp3_1
SELECT * FROM employees;
DELETE FROM emp1_1;
DELETE FROM emp2_1;
DELETE FROM emp3_1;
COMMIT;
9. Să se creeze tabelul emp0_*** cu aceeasi structură ca tabelul employees. Inserati, utilizând o singură
comandă INSERT, informatii din tabelul employees:
- în tabelul emp0_*** salariatii care lucrează în departamentul 80;
- în tabelul emp1_*** salariatii care au salariul mai mic decât 6000 (care nu se regăsesc în tabelul
emp0_***);
- în tabelul emp2_*** salariatii care au salariul cuprins între 6000 si 10000 (care nu se regăsesc în
tabelele emp0_*** si emp1_***);
- în tabelul emp3_*** salariatii care au salariul mai mare decât 10000 (care nu se regăsesc în tabelele
emp0_***, emp1_*** si emp2_***).
Obs.
Clauza FIRST a comenzii INSERT determină inserarea corespunzătoare primei clauze WHEN a cărei
conditie este evaluată TRUE. Toate celelalte clauze WHEN sunt ignorate.
CREATE TABLE emp0_1
AS SELECT * FROM employees WHERE 1=0;
INSERT FIRST
WHEN department_id = 80 THEN
INTO emp0_1
WHEN salary <= 6000 THEN
31
INTO emp1_1
WHEN salary > = 6000 AND salary <= 10000 THEN
INTO emp2_1
ELSE
INTO emp3_1
SELECT * FROM employees;
10. Sintaxa simplificată a comenzii DELETE
DELETE FROM nume_tabel
[WHERE conditie];
11. Stergeti toate înregistrările din tabelele emp_*** si dept_***. Inserati în aceste tabele toate
înregistrările corespunzătoare din employees, respectiv departments. Permanentizati tranzactia.
DELETE FROM dept;
DELETE FROM emp;
INSERT INTO emp
SELECT * FROM employees;
INSERT INTO dept
SELECT * FROM departments;
COMMIT;
12. Stergeti angajatii care nu au comision. Anulati modificările.
DELETE FROM emp_***
WHERE commission_pct IS NULL;
ROLLBACK;
DELETE FROM emp
WHERE commission IS NULL;
ROLLBACK;
13. Eliminati departamentele care nu au nici un angajat. Anulati modificările.
DELETE FROM dept
WHERE department_id NOT IN (SELECT DISTINCT department_id
FROM emp
WHERE department_id IS NOT NULL);
ROLLBACK;
14. Eliminati angajatii care nu apartin unui departament valid. Anulati modificările.
DELETE FROM emp
WHERE department_id NOT IN (SELECT department_id
FROM dept)
OR department_id IS NULL;
ROLLBACK;
15. Sintaxa simplificată a comenzii UPDATE:
UPDATE nume_tabel [alias]
SET col1 = expr1[, col2=expr2]
[WHERE conditie];
sau
UPDATE nume_tabel [alias]
SET (col1,col2,...) = (subcerere)
[WHERE conditie];
16. Măriti salariul tuturor angajatilor din tabelul emp_*** cu 5%. Anulati modificările.
UPDATE emp
SET salary = salary * 1.05;
ROLLBACK;
17. Schimbati jobul tuturor salariatilor din departamentul 80 care au comision în 'SA_REP'. Anulati
modificările.
UPDATE emp
SET job_id = 'SA_REP'
WHERE department_id=80 AND commission_pct IS NOT NULL;
ROLLBACK;

32
UPDATE emp
SET job_id = 99
WHERE department_id=80 AND commission IS NOT NULL;
ROLLBACK;
18. Să se modifice jobul si departamentul angajatului având codul 114, astfel încât să fie la fel cu cele ale
angajatului având codul 205.
UPDATE emp
SET (job_id, department_id) = (SELECT job_id, department_id
FROM emp
WHERE employee_id = 205)
WHERE employee_id = 114;
ROLLBACK;
19. Schimbati salariul si comisionul celui mai prost plătit salariat din firmă, astfel încât să fie egale cu
salariul si comisionul directorului.
DELETE FROM emp WHERE employee_id = 123;
UPDATE emp
SET (salary, commission) = (SELECT salary, commission
FROM emp
WHERE manager_id IS NULL)
WHERE salary = (SELECT MIN(salary)
FROM emp);
ROLLBACK;
20. Pentru fiecare departament să se mărească salariul celor care au fost angajaŃi primii astfel încât să
devină media salariilor din companie.
UPDATE emp e
SET salary = (SELECT AVG(salary)
FROM emp)
WHERE hire_date = (SELECT MIN(hire_date)
FROM emp
WHERE department_id=e.department_id);
ROLLBACK;
21. Să se modifice valoarea emailului pentru angajatii care câstigă cel mai mult în departamentul în care
lucrează astfel încât acesta să devină initiala numelui concatenată cu prenumele. Dacă nu are prenume
atunci în loc de acesta apare caracterul ‘.’. Anulati modificările.
UPDATE emp
SET email = LOWER(SUBSTR(first_name,1,1)) || LOWER(NVL(last_name, '. '))
WHERE (department_id, salary) IN (SELECT department_id, MAX(salary)
FROM emp
GROUP BY department_id);
ROLLBACK;

33
SUBIECTE BISTRITA (rezolvate de Cata, asa ca watch-out)

1. Care este forma corecta pentru a adauga constrangeri la nivel de coloana si /sau la nivel de tabel?

CREATE TABLE [schema.]nume_tabel (


nume_coloana tip_de_date, [DEFAULT expr] [constrangere_de_coloana], ...
..[constrangere la nivel de tabel])

CREATE TABLE [schema.]nume_tabel (


nume_coloana tip_de_date [DEFAULT expr], [constrangere_de_coloana] ...
..[constrangere la nivel de tabel])

CREATE TABLE [schema.]nume_tabel (


nume_coloana tip_de_date, [DEFAULT expr], [constrangere_de_coloana], ...
..[constrangere la nivel de tabel])

CREATE TABLE [schema.]nume_tabel (


nume_coloana tip_de_date [DEFAULT expr] [constrangere_de_coloana], ...
..[constrangere la nivel de tabel])

2. Care este comanda corecta care determina marirea salariul tuturor angajatilor din tabelul salariat
cu 5%?

UPDATE salariu
SET salariu = salariu * 1.05;

UPDATE salariat
SET salariu = salariu * 1.05;

UPDATE salariat
SET salariu = 1.05;

UPDATE salariat
SET salariu = salariu + salariu* 1.05;

3. Care este comanda corecta care insereaza in tabelul TOTALURI(cod_departament,


numar_angajati, suma_salarii)?

INSERT INTO totaluri


SELECT cod_departament, COUNT(*),SUM(salariu)
FROM salariat
GROUP BY cod_departament;

INSERT INTO totaluri


SELECT cod_departament, SUM(cod_angajat),SUM(salariu)
FROM salariat
GROUP BY cod_departament;

INSERT INTO totaluri


SELECT cod_departament, COUNT(*),SUM(salariu)
FROM salariat;

INSERT INTO totaluri


SELECT cod_departament, COUNT(),SUM(salariu)
FROM salariat
ORDER BY cod_departament;

4. Care comanda afiseaza numele angajatilor, fara duplicate, care au manager?

SELECT DISTINCT nume


FROM salariat
WHERE manager IS NOT NULL;

SELECT DISTINCT nume


FROM salariat
WHERE manager IS NULL;

SELECT nume
FROM salariat
WHERE manager IS NOT NULL;

SELECT DISTINCT nume


FROM salariat
WHERE manager != NULL;

5. Care este comanda corecta care pentru fiecare facultate, se insereaza in tabelul
SALARII(cod_fac, nr_prof, total_sal_fac) numarul de profesori si suma salariilor pe care facultatea
o plateste profesorilor sai?

INSERT TO TOTALURI
SELECT COD_FAC, COUNT(*) , SUM(SALARIU)
FROM PROF ORDER BY COD_FAC;

INSERT INTO TOTALURI


SELECT COD_FAC, COUNT(*) , SUM(SALARIU)
FROM PROF ;

INSERT INTO TOTALURI


SELECT COD_FAC, COUNT(*) , SUM(SALARIU)
FROM PROF GROUP BY COD_FAC;

INSERT INTO totaluri


SELECT COD_FAC, SUM(COD_PROF),SUM(SALARIU)
FROM PROF
GROUP BY COD_FAC;

6. Care secventa este corecta pentru a afisa citi angajati nu au o valoare introdusa pe coloana
salariu?

SELECT COUNT()
FROM salariati
WHERE SALARIU =0;

SELECT COUNT(*)
FROM salariati
WHERE SALARIU =NULL;
SELECT COUNT(*)
FROM salariati
WHERE SALARIU IS NOT NULL;
SELECT COUNT(*)
FROM salariati
WHERE SALARIU IS NULL;

7. Care este comanda corecta care determina dublarea salariilor cu rotunjire la 2 zecimale a
angajatilor care sunt titulari?

UPDATE salariat
SET salariu=ROUND(salariu*2,2);

UPDATE salariat
SET salariu=ROUND(salariu*2)
WHERE titular =’y’;

UPDATE salariat
SET salariu=ROUND(salariu*2,2)
WHERE titular =’y’;

UPDATE salariat
SET salariu=ROUND(salariu*0.5,2)
WHERE titular =’y’;

8. Care este comanda corecta care afiseaza numele salariatilor care castiga mai mult decat salariul
mediu pe companie, in ordine crescatoare a salariului?

SELECT nume
FROM salariati
WHERE salariu >AVG(salariu);

SELECT nume
FROM salariati
WHERE salariu > (SELECT AVG(salariu) FROM salariati)
ORDER BY salariu;

SELECT nume
FROM salariati
WHERE salariu > (SELECT AVG(salariu) FROM salariati
ORDER BY salariu);

SELECT nume
FROM salariati
WHERE salariu > (SELECT AVG(salariu) FROM salariati)
ORDER BY 1;

9. Ce comanda modifica in tabelul SALARIAT

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU

not null sir de sir caractere date, valoare numeric de sir de valoare
numeric de caractere de de maxim 20 implicita 2 caractere de implicita 0
5 maxim 20 data curentã dimensiune numar de 10
fixa, de 30 cu 2
zecimale

dimensiunea coloanei nume la 30 si pe cea a coloanei salariu la 12 cu 3 zecimale?

ALTER TABLE salariat


MODIFY nume VARCHAR2(30), salariu NUMBER(12,3);

ALTER TABLE salariat


MODIFY nume VARCHAR2(30), salariu NUMBER(12,3);

ALTER TABLE salariat


MODIFY nume VARCHAR2(30), MODIFY salariu NUMBER(12,3);

ALTER TABLE salariat


MODIFY (nume VARCHAR2(30), salariu NUMBER(12,3));

10. Care este comanda corecta care sterge valoarea coloanei salariu pentru angajatii care sunt
angajati cu contract de colaborare?

DELETE salariu
FROM salariati
WHERE contract=’colaborare’;

UPDATE salariati
SET salariu IS null
WHERE contract=’colaborare’;

DROP salariu
FROM salariati
WHERE contract=’colaborare’;

UPDATE salariati
SET salariu=null
WHERE contract=’colaborare’;

11. Care este comanda incorecta care afiseaza numele, salariul si varsta pentru toti salariatii care
castiga mai mult de 1000, rezultatul fiind sortat descendent dupa salariu, iar pentru cei care au
acelasi salariu in ordine crescatoare dupa nume?

SELECT nume, salariu, varsta


FROM salariat
WHERE salariu>1000
ORDER BY salariu DESC nume ASC;

SELECT nume, salariu, varsta


FROM salariat
WHERE salariu>1000
ORDER BY salariu DESC, nume ASC;

SELECT nume, salariu, varsta


FROM salariat
WHERE salariu>1000
ORDER BY salariu DESC, nume;

SELECT nume, salariu, varsta


FROM salariat
WHERE salariu>1000
ORDER BY 2 DESC, 1 ASC;

12. Actualizarile realizate asupra tabelelor de baza ale unei vizualizari se reflecta totdeauna in
vizualizare

Adevărat
Fals

13. Care este comanda corecta pentru a afisa numele, prenumele si varsta salariatilor, iar
pentru cei care au varsta necunoscuta sa apara textul “varsta necunoscuta”?

SELECT nume, prenume, NVL(varsta, ‘varsta necunoscuta’)


FROM salariat;

SELECT nume, prenume, NVL(TO_CHAR(varsta), ‘varsta necunoscuta’)


FROM salariat;

SELECT nume, prenume, NVL(CHAR(varsta), ‘varsta necunoscuta’)


FROM salariat;

SELECT nume, prenume, NVL2(TO_CHAR(varsta), ‘varsta necunoscuta’)


FROM salariat;

14. Care comanda afiseaza numarul de angajati din fiecare departament?

SELECT cod_departament, COUNT(*)


FROM salariat;

SELECT cod_departament, SUM(cod_angajat)


FROM salariat
GROUP BY cod_departament;

SELECT cod_departament, COUNT(*)


FROM salariat
GROUP BY cod_departament;

SELECT cod_departament, COUNT()


FROM salariat
GROUP BY cod_departament;

15. Pentru a introduce in tabelul SALARIAT

COD _ANG NUME PRENUME DATA_ANG VARSTA SALARIU

not null sircaractere sir caractere date, valoare numeric de 2 valoare


numeric de 5 de maxim 20 de maxim 20 implicita data implicita 0
curentã numar de 10
cu 2 zecimale

doua coloane: Cod_Funct si Email ce varianta folosim?

ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER COLUMN ADD Email char(25);

ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ADD Email CHAR(25);

ALTER TABLE SALARIAT ADD (Cod_Funct NUMBER(2) , Email CHAR(25));

ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER ADD Email char(25);

16. Ce comanda creeaza tabelul SALARIAT_1 care sã aiba aceeiasi structura cu


tabelul SALARIAT

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU

not null sir de sir caractere date, valoare numeric de sir de valoare
numeric de caractere de de maxim 20 implicita 2 caractere de implicita 0
5 maxim 20 data curentã dimensiune numar de 10
fixa, de 30 cu 2
zecimale

si sa contina salariatii care au salariu >100?

CREATE TABLE SALARIAT_1


SELECT * FROM SALARIAT WHERE SALARIU>100;

CREATE TABLE SALARIAT_1 AS


SELECT * FROM SALARIAT WHERE SALARIU>100;

CREATE TABLE SALARIAT_1 AS


SELECT FROM SALARIAT WHERE SALARIU>100;

CREATE TABLE SALARIAT_1 AS


SELECT COD_ANG, SALARIU FROM SALARIAT WHERE SALARIU>100;

17. Pentru a modifica dimensiunea coloanei prenume la 30 si pe cea a salariului la 12 cu 3


zecimale, din tabelul SALARIAT

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU

not null sir de sir caractere date, valoare numeric de sir de valoare
numeric de caractere de de maxim 20 implicita 2 caractere de implicita 0
5 maxim 20 data curentã dimensiune numar de 10
fixa, de 30 cu 2
zecimale

care varienta este corecta?

ALTER TABLE SALARIAT


MODIFY (prenume VARCHAR2(30) salariu NUMBER(12,3));
ALTER TABLE SALARIAT
MODIFY (prenume VARCHAR2(30)), MODIFY(salariu NUMBER(12,3));
ALTER TABLE SALARIAT
MODIFY (prenume VARCHAR2(30) , salariu NUMBER(12,3));

ALTER TABLE SALARIAT


ADD (prenume VARCHAR2(30), salariu NUMBER(12,3));

18. Care este varianta corecta pentru a crea tabelul Salariat, cu caracteristicile de mai jos?

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU

not null sir de sir caractere date, valoare numeric de sir de valoare
numeric de caractere de de maxim 20 implicita 2 caractere de implicita 0
5 maxim 20 data curentã dimensiune numar de 10
fixa, de 30 cu 2
zecimale

CREATE TABLE SALARIAT (


cod_ang NUMBER(5) NOT NULL,
nume VARCHAR2(20),
prenume VARCHAR2(20),
data_angajarii DATE DEFAULT SYSDATE,
varsta NUMBER(2),
email CHAR(50),
salariu NUMBER(10,2) DEFAULT 0);

CREATE TABLE SALARIAT (


cod_ang NUMBER(5)
nume VARCHAR2(20),
prenume VARCHAR2(20),
data_angajarii DATE ,
varsta NUMBER(2),
email CHAR(50),
salariu NUMBER(10,2) DEFAULT 0);

CREATE TABLE SALARIAT (


cod_ang NUMBER(5) NOT NULL,
nume VARCHAR2(20),
prenume VARCHAR2(20),
data_angajarii DATE, DEFAULT SYSDATE,
varsta NUMBER(2),
email CHAR(50),
salariu NUMBER(10,2), DEFAULT 0);

19. Care varianta este corecta pentru a redenumi tabelul SALARIAT cu numele
SALARIATI?

RENAME SALARIAT TO SALARIATI;


RENAME SALARIAT WITH SALARIATI;
RENAME TABLE SALARIAT TO TABLE SALARIATI;
RENAME TABLE SALARIAT WITH TABLE SALARIATI;
20. Care ste comanda corecta care afiseaza codul departamentelor pentru care salariul
minim depaseste 5000$?

SELECT cod_departament
FROM salariat
WHERE MIN(salariu)>5000
GROUP BY cod_departament;

SELECT cod_departament
FROM salariat
GROUP BY cod_departament
HAVING MIN(salariu)>5000;

SELECT cod_departament
FROM salariat
GROUP BY cod_departament
MIN(salariu)>5000;
sgbd
sgbd

MULTIPLE CHOICE

1. Informatia este :
a. Un mesaj
b. O stire
c. Un zvon
d. O opinie
e. Un mesaj, cu precizarea ca nu orice mesaj poate fi o informatie
ANS: E

2. „Un ansamblu de elemente intercorelate functional ce actioneaza intr-un anumit scop”,


defineste:
a. Un sistem
b. Un sistem informatic
c. Un sistem informational
d. Sistemele de la punctele a,b,c;
e. Nici unul din sistemele enumerate la punctele a,b,c;
ANS: D

3. Sarcina sistemului informatitional se concretizeaza in:


a. culegerea si consemnarea datelor
b. verificarea datelor;
c. transmiterea datelor
d. stocarea datelor
e. toate raspunsurile de la a,b,c,d;
ANS: E

4. Sistemul informatic se diferentiaza de sistemul informational prin:


a. nu se diferentiaza
b. obiectivul informational;
c. echipamentele de culegere, transmitere, prelucrare si stocare a datelor;
d. functiile sistemului;
e. reducerea costului informatiei;
ANS: C

5. Elementele caracteristice oricarui sistem sunt:


a. o multime de elemente intercorelate functional
b. intrarile sistemului;
c. iesirile sistemului;
d. starea sistemului;
e. toate raspunsurile de la a,b,c,d;
ANS: E
6. Un sistem informatic este compus, in principal din urmatoarele elemente:
a. baza tehnica sau HARDWARE-ul sistemului;
b. sistemul de programe sau SOFTWARE-ul sistemului;
c. baza stiintifico-metodologica;
d. baza informationala si resursele umane
e. toate raspunsurile de la a,b,c,d;
ANS: E

7. Un ansamblu de elemnte intercorelate functional in scopul automatizarii obtinerii inform-


atiilor necesare conducerii in procesul de elaborare a deciziilor, defineste:
a. un sistem
b. un sistem informatic
c. un sistem informational;
d. toate sistemele
e. nu defineste un sistem;
ANS: B

8. Referitor la raportul dintre sistemul informatic si sistemul informational, se poate aprecia ca:
a. nu exista un raport intre cele doua sisteme;
b. sistemul informatic il cuprinde pe cel informational;
c. sistemul informatic este inclus in sistemul informational;
d. cele doua sisteme sunt identice;
e. nici un raspuns nu este corect;
ANS: C

9. Cresterea volumului productiei, reprezinta:


a. Un obiectiv al sistemului informatic
b. un obiectiv al sistemului informational
c. nu reprezinta un obiectiv
d. functia oricarui sistem
e. toate raspunsurile sunt corecte;
ANS: A

10. Reducerea personalului administrativ-functionar, reprezinta:


a. Un obiectiv al sistemului informatic
b. un obiectiv al sistemului informational;
c. nu reprezinta un obiectiv;
d. functia oricarui sistem;
e. toate raspunsurile sunt corecte
ANS: A

11. Reducerea costului informatiei, reprezinta:


a. nu reprezinta un obiectiv;
b. un obiectiv al sistemului informatic
c. un obiectiv al sistemului informational;
d. functia oricarui sistem;
e. toate raspunsurile sunt corecte;
ANS: B

12. Componentele de baza ale unui sistem de baze de date sunt:


a. Componenta software;
b. Componenta de date;
c. Componentele de la a si b;
d. Componenta sistem de operare
e. Nici una din componentele enumerate mai sus;
ANS: C

13. Un SGBD este:


a. Interfata intre o baza de date si utilizatorii acesteia;
b. Un ansamblu complex de elemente de programe;
c. O componenta software a unui sistem de baze de date;
d. O componenta care interactioneaza cu toate componentele sistemului;
e. toate raspunsurile de la a,b,c,d sunt corecte;
ANS: E

14. Un produs software este un SGBD daca (concomitent):


a. Este un sistem, adica un ansamblu de elemnte (programe) intercorelate intre ele
care concura la atingerea unui scop comun;
b. Gestioneaza date organizate in memoria externa conform unui model de date pen-
tru baze de date;
c. Indeplineste obiectivele si functiile unui SGBD;
d. Indeplineste concomitent toate conditiile de la punctele a,b,c;
e. Nici un raspuns nu este corect;
ANS: D

15. Un SGBD, in mod minimal (obligatoriu), trebuie sa:


a. Implementeze un model de date pentru baze de date;
b. Contina cel putin un limbaj de programare;
c. Contina interfete/instrumente pentru gestionarea optima a datelor
d. Contina concomitent toate elementele de la punctele a,b,c;
e. Nu trebuie sa contina nici un element din cele de mai sus;
ANS: D

16. Rolul unui SGBD este de a:


a. Defini si descrie structura bazei de date;
b. Incarca/valida datele in baza de date;
c. Realiza accesul la date
d. Intretine baza de date
e. toate raspunsurile de la a,b,c,d, sunt corecte;
ANS: E

17. Asigurarea protectiei bazei de date reprezinta:


a. Unul din rolurile unui SGBD;
b. Rolul oricarui sistem informational;
c. Rolul unui sistem de gestiune a fisierelor;
d. Toate raspunsurile de la a,b,c sunt corecte
e. Toate raspunsurile de la a,b,c, sunt incorecte;
ANS: A

18. Definirea/descrierea structurii bazei de date, reprezinta:


a. Rolul oricarui sistem informational;
b. Unul din rolurile unui SGBD;
c. Rolul unui sistem de gestiune a fisierelor;
d. Toate raspunsurile de la a,b,c sunt corecte;
e. Toate raspunsurile de la a,b,c, sunt incorecte;
ANS: B

19. Intretinerea bazei de date, reprezinta:


a. Rolul oricarui sistem informational;
b. Rolul unui sistem de gestiune a fisierelor;
c. Unul din rolurile unui SGBD;
d. Toate raspunsurile de la a,b,c sunt corecte;
e. Toate raspunsurile de la a,b,c, sunt incorecte;
ANS: C

20. Realizarea accesului la date, reprezinta:


a. Rolul oricarui sistem informational;
b. Rolul unui sistem de gestiune a fisierelor;
c. Unul din rolurile unui SGBD;
d. Toate raspunsurile de la a,b,c sunt corecte;
e. Toate raspunsurile de la a,b,c, sunt incorecte;
ANS: C

21. Incarcare/validare de date, reprezinta:


a. Unul din rolurile unui SGBD
b. Rolul oricarui sistem informational;
c. Rolul unui sistem de gestiune a fisierelor;
d. Toate raspunsurile de la a,b,c sunt corecte;
e. Toate raspunsurile de la a,b,c, sunt incorecte;
ANS: A

22. In evolutia SGBD-urilor se costata pâna acum:


a. Doua generatii;
b. O singura generatie;
c. Patru generatii;
d. Trei generatii;
e. Nici un raspuns nu este corect;
ANS: D

23. La trecerea de la o generatie la alta de SGBD s-au vizat urmatoarele aspecte:


a. Pastrarea aspectelor fundamentale care dau conceptul de SGBD(obiective, functii
si componente);
b. Modelul de date implementat;
c. Imbunatatirea organizarii datelor;
d. Imbunatatirea accesului la date;
e. Toate raspunsurile de la a,b,c, d sunt corecte;
ANS: E

24. Utilizarea unor SGBD –uri din generatiile precedente, reprezinta:


a. Unul din rolurile unui SGBD;
b. Un element de trecere a unui SGBD de la o generatie la alta;
c. Rolul unui sistem de gestiune a fisierelor;
d. Toate raspunsurile de la a,b,c sunt corecte;
e. Toate raspunsurile de la a,b,c, sunt incorecte;
ANS: B

25. Diversificarea tipurilor de date, reprezinta:


a. Unul din rolurile unui SGBD;
b. Rolul unui sistem de gestiune a fisierelor
c. Un element de trecere a unui SGBD de la o generatie la alta;
d. Toate raspunsurile de la a,b,c sunt corecte;
e. Toate raspunsurile de la a,b,c, sunt incorecte;
ANS: C

26. Imbunatatirea accesului la date, reprezinta:


a. Unul din rolurile unui SGBD;
b. Rolul unui sistem de gestiune a fisierelor
c. Un element de trecere a unui SGBD de la o generatie la alta;
d. Toate raspunsurile de la a,b,c sunt corecte;
e. Toate raspunsurile de la a,b,c, sunt incorecte;
ANS: C

27. Modelul de date implementat, reprezinta:


a. Un element de trecere a unui SGBD de la o generatie la alta;
b. Unul din rolurile unui SGBD;
c. Rolul unui sistem de gestiune a fisierelor;
d. Toate raspunsurile de la a,b,c sunt corecte;
e. Toate raspunsurile de la a,b,c, sunt incorecte;
ANS: A

28. Pastrarea aspectelor fundamentale care dau conceptul de SGBD(obiectivele, functiile si com-
ponentele) , reprezinta:
a. Rolul unui sistem de gestiune a fisierelor;
b. Un element de trecere a unui SGBD de la o generatie la alta;
c. Unul din rolurile unui SGBD;
d. Toate raspunsurile de la a,b,c sunt corecte;
e. Toate raspunsurile de la a,b,c, sunt incorecte;
ANS: B

29. Obiective ale unui SGBD sunt:


a. Asigurarea independentei datelor;
b. Redundanta minima si controlata;
c. Facilitati de utilizare a datelor;
d. Protectia datelor;
e. Toate raspunsurile de la a,b,c,d sunt corecte;
ANS: E

30. Asigurarea independentei datelor, reprezinta:


a. Unul din obiectivele SGBD-ului;
b. Rolul unui sistem de gestiune a fisierelor;
c. Un element de trecere a unui SGBD de la o generatie la alta;
d. Toate raspunsurile de la a,b,c sunt corecte;
e. Toate raspunsurile de la a,b,c, sunt incorecte;
ANS: A

31. Redundanta minima si controlata a datelor, reprezinta:


a. Unul din rolurile unui SGBD
b. Unul din obiectivele SGBD-ului;
c. Un element de trecere a unui SGBD de la o generatie la alta
d. Toate raspunsurile de la a,b,c sunt corecte
e. Toate raspunsurile de la a,b,c, sunt incorecte;
ANS: B

32. Facilitati de utilizare a datelor, reprezinta:


a. Un element de trecere a unui SGBD de la o generatie la alta;
b. Rolul unui sistem de gestiune a fisierelor;
c. Unul din obiectivele SGBD-ului;
d. Toate raspunsurile de la a,b,c sunt corecte
e. Toate raspunsurile de la a,b,c, sunt incorecte;
ANS: C

33. Protectia datelor, reprezinta:


a. Un element de trecere a unui SGBD de la o generatie la alta;
b. Rolul unui sistem de gestiune a fisierelor;
c. Unul din rolurile unui SGBD;
d. Unul din obiectivele SGBD-ului;
e. Toate raspunsurile de la a,b,c sunt corecte;
ANS: D

34. Securitatea (confidentialitatea) datelor, presupune:


a. Autorizarea si controlul accesului la date;
b. Corectitudinea (coerenta) datelor;
c. Afirmatiile de la punctele a si b;
d. Nici una din afirmatiile de mai sus;
e. Afirmatiile de la a,b,c,d sunt incorecte;
ANS: A

35. Integritatea datelor,se refera la:


a. Autorizarea si controlul accesului la date;
b. Corectitudinea (coerenta) datelor;
c. Afirmatiile de la punctele a si b;
d. Nici una din afirmatiile de mai sus;
e. Afirmatiile de la a,b,c,d sunt incorecte;
ANS: B

36. Salvarea datelor, este un proces de:


a. Autorizarea si controlul accesului la date;
b. Corectitudinea (coerenta) datelor;
c. Stocare prin realizarea de copii de siguranta;
d. Nici una din afirmatiile de mai sus;
e. Afirmatiile de la a,b,c, sunt incorecte;
ANS: C

37. Jurnalul tranzactiilor este:


a. Autorizarea si controlul accesului la date;
b. Un fisier creat si intretinut de SGBD;
c. Un fisier creat si intretinut de sistemul de operare;
d. Nu este un fisier;
e. Nici una din afirmatiile de mai sus
ANS: B

38. Functiile unui SGBD sunt:


a. Descrierea datelor;
b. Functia de manipulare a datelor
c. Utilizarea bazei de date;
d. Functia de administrare;
e. toate afirmatiile de mai sus sunt reprezinta functiile unui SGBD;
ANS: E

39. Descrierea datelor, reprezinta:


a. Una din functiile SGBD -ului;
b. Rolul unui sistem de gestiune a fisierelor;
c. Unul din rolurile unui SGBD;
d. Unul din obiectivele SGBD-ului;
e. Toate raspunsurile de la a,b,c sunt corecte
ANS: A

40. Utilizarea bazei de date, reprezinta:


a. Un element de trecere a unui SGBD de la o generatie la alta;
b. Rolul unui sistem de gestiune a fisierelor;
c. Unul din rolurile unui SGBD;
d. Unul din obiectivele SGBD-ului;
e. Una din functiile SGBD -ului;
ANS: E

41. Manipularea datelor, reprezinta:


a. Un element de trecere a unui SGBD de la o generatie la alta;
b. Una din functiile SGBD -ului;
c. Rolul unui sistem de gestiune a fisierelor;
d. Unul din rolurile unui SGBD;
e. Unul din obiectivele SGBD-ului;
ANS: B

42. Functia de administrare a datelor este de competenta:


a. Oricarui operator;
b. Managerului general
c. Administratorului bazei de date;
d. Proiectantului bazei de date;
e. Afirmatiile de la punctele a,b,c,d sunt toate corecte;
ANS: C

43. Clasificarea SGBD-urilor se face dupa criteriul:


a. Limbajul de programare utilizat;
b. Modelul logic de date implementat;
c. Localizarea bazei de date;
d. Toate afirmatiile de la punctele a,b,c sunt adevarate;
e. Afirmatiile de la punctele a,b,c,d sunt incorecte
ANS: D

44. Limbajul de programare utilizat, poate reprezenta:


a. Un criteriu de clasificare a SGBD-ului;
b. Modelul logic de date implementat;
c. Localizarea bazei de date;
d. Toate afirmatiile de la punctele a,b,c sunt adevarate;
e. Afirmatiile de la punctele a,b,c,d sunt incorecte;
ANS: A

45. Modelul logic de date implementat, poate reprezenta:


a. Limbajul de programare utilizat;
b. Un criteriu de clasificare a SGBD-ului
c. Localizarea bazei de date;
d. Toate afirmatiile de la punctele a,b,c sunt adevarate;
e. Afirmatiile de la punctele a,b,c,d sunt incorecte;
ANS: B

46. Localizarea bazei de date, poate reprezenta:


a. Limbajul de programare utilizat;
b. Modelul logic de date implementat;
c. Un criteriu de clasificare a SGBD-ului ;
d. Toate afirmatiile de la punctele a,b,c sunt adevarate;
e. Afirmatiile de la punctele a,b,c,d sunt incorecte;
ANS: C

47. Functia de baza a unui SGBD este:


a. ordonare
b. generare;
c. modelare;
d. manipulare;
e. conversie
ANS: D

48. Un SGBD
a. Este un limbaj de regasire;
b. Asigura legatura intre componentele unui sistem de baza de date;
c. Este componenta software a unui sistem de baza de date;
d. Este o baza de date
e. Numai afirmatiile de la punctele b si c sunt adevarate;
ANS: E

49. In evolutia SGBD-urilor se constata pâna acum:


a. Timp de acces tot mai ridicat;
b. Imbunatatirea organizarii datelor in memoria externa;
c. Facilitati de utilizare sporite;
d. Numai afirmatiile de la punctele b si c sunt adevarate;
e. Nici o afirmatie nu este corecta;
ANS: D

50. Arhitecturi de referinta pentru SGBD sunt:


a. LAN;
b. CODASYL;
c. WAN;
d. Numai afirmatiile de la punctele b si c sunt adevarate;
e. Nici o afirmatie nu este corecta
ANS: B

51. Arhitecturi pe componente a unui SGBD contine:


a. Interfete
b. Nucleu ;
c. Instrumente ;
d. Baza de date;
e. Toate afirmatiile de mai sus sunt adevarate
ANS: E

52. Nucleul unui SGBD:


a. Contine limbajul de descriere a datelor (LDD) ;
b. Contine limbajul de manipulare a datelor (LMD)
c. Este motorul unui SGBD ;
d. Este componenta destinata analistilor, programatorilor si administratorilor BD;
e. Toate afirmatiile de mai sus sunt adevarate;
ANS: E

53. Interfetele unui SGBD sunt formate din:


a. Generatoare de diferite tipuri ;
b. Elemente CASE ;
c. Interfete cu limbaje de programare universale
d. Interfete cu alte sisteme;
e. Toate afirmatiile de mai sus sunt adevarate;
ANS: E

54. Instrumentele unui SGBD sunt formate din:


a. Editoare
b. Navigatoare ;
c. Utilitare de diferite tipuri ;
d. Toate afirmatiile de mai sus sunt adevarate;
e. Nici una din afirmatiile de la a,b,c nu sunt corecte;
ANS: D

55. Prin organizarea datelor intelegem totalitatea operatiilor de:


a. Definire a datelor;
b. Structurare a datelor;
c. Ordonare a datelor
d. Grupare a datelor in colectii de date;
e. Toate afirmatiile de mai sus sunt adevarate;
ANS: E

56. Organizarea datelor in fisiere, prezinta o serie de avantaje:


a.Dependenta programelor de aplicatie de structura datelor;
b.Caracterul izolat al datelor memorate
c.Posibilitatea existentei unei redundante mari in colectiile de date ;
d.Toate afirmatiile de mai sus sunt adevarate;
e.Toate afirmatiile de mai sus sunt neadevarate;
ANS: E

57. Organizarea datelor in baze de date, prezinta o serie de limite:


a. Dependenta programelor de aplicatie de structura datelor;
b. Caracterul izolat al datelor memorate;
c. Posibilitatea existentei unei redundante mari in colectiile de date ;
d. Toate afirmatiile de mai sus sunt adevarate;
e. Toate afirmatiile de mai sus sunt neadevarate;
ANS: E

58. Baza de date poate fi definita ca:


a. Un sistem de colectii de date;
b. Un sistem de relatii stabilite intre entitati;
c. Una sau mai multe colectii de date
d. Toate afirmatiile de mai sus sunt adevarate;
e. Toate afirmatiile de mai sus sunt neadevarate;
ANS: D

59. Care din afirmatiile de mai jos reprezinta avantajele organizarii datelor in baze de date:
a. Asigura o redundanta minima si controlata;
b. Asigura independenta programelor de aplicatie fata de structura datelor;
c. Asigura securitatea datelor la un nivel superior fata de accesul neautorizat;
d. Toate afirmatiile de mai sus sunt adevarate;
e. Toate afirmatiile de mai sus sunt neadevarate;
ANS: D

60. Criteriile de clasificare a bazelor de date sunt:


a. Dupa rolul pe care il au;
b. Dupa modul de accesare;
c. Dupa modul de localizare ;
d. Dupa modelele de reprezentare a datelor;
e. Toate afirmatiile de mai sus sunt adevarate;
ANS: E

61. Criteriile de clasificare a bazelor de date sunt:


a. Dupa tipul datelor gestionate;
b. Dupa modul de accesare;
c. Dupa modul de localizare ;
d. Dupa modelele de reprezentare a datelor;
e. Toate afirmatiile de mai sus sunt adevarate;
ANS: E

62. Etapele de realizare a bazelor de date sunt:


a. Analiza sistemului (domeniului)economic;
b. Proiectarea structurii bazei de date;
c. Incarcarea datelor in baza de date ;
d. Exploatarea si intretinerea bazei de date;
e. Toate afirmatiile de mai sus sunt adevarate;
ANS: E

63. Primul model de reprezentare a datelor in baze de date a fost:


a. Modelul relational;
b. Modelul obiectual;
c. Modelul ierarhic
d. Modelul retea;
e. Nici unul din modelele de mai sus;
ANS: C
64. Una din deficientele modelului relational este:
a. Permite modelarea dinamica a datelor;
b. Nu permite modelarea dinamica a datelor;
c. Ofera unele facilitati multiple de definire si manipulare a datelor ;
d. Toate afirmatiile de mai sus;
e. Toate afirmatiile de mai sus sunt neadevarate;
ANS: B

65. Componente ale modelului relational sunt:;


a. Structura relationala a datelor;
b. Operatorii modelului relational;
c. Restrictiile de integritate ale modelului relational ;
d. Toate elementele enumerate mai sus;
e. Toate afirmatiile de mai sus sunt neadevarate;
ANS: D

66. SGBDR este un sistem software care implementeaza::


a. Modelul de date relational;
b. Modelul de date obiectual
c. Toate modelele de organizare a datelor
d. Numai modelele de la punctele a si b;
e. Toate afirmatiile de mai sus sunt adevarate;
ANS: A

67. Regulile lui Codd :


a. Exprima cerintele pe care trebuie sa le indeplineasca un SGBDR;
b. Sunt utile pentru evaluarea performantelor unui SGBDR;
c. Exprima cerintele pe care trebuie sa le indeplineasca un SGBOO;
d. Toate afirmatiile de mai sus sunt adevarate;
e. Numai afirmatiile de la punctele a si b sunt adevarate
ANS: B

68. Un SGBDR este minimal relational daca:


a. Toate datele din baza de date sunt reprezentate prin valori in tabele;
b. Operatiile cu relatii nu fac apel la pointeri, fisiere inverse, etc.;
c. Sistemul suporta toate operatiile de baza ale algebrei relationale ;
d. Numai conditiile de la punctele a si b;
e. Numai conditiile de la punctele b si c ;
ANS: C

69. Un SGBDR este complet relational daca:


a. Este minimal relational;
b. Sistemul suporta doua dintre restrictiile de integritate de baza ale modelului rela-
tional.;
c. Sistemul suporta toate operatiile de baza ale algebrei relationale ;
d. Numai conditiile de la punctele a si b
e. Numai conditiile de la punctele a, b si c ;
ANS: E

70. Caracteristici globale ale SGBDR:


a. Limbaje relationale;
b. Protectia datelor.;
c. Optimizarea cererilor de regasire ;
d. Utilitare specializate;
e. Toate afirmatiile de mai sus sunt adevarate ;
ANS: E

71.
Caracteristicile particulare ale SGBDR se grupeza dupa criteriile:
a. Facilitati de descriere a datelor;
b. Facilitati de manipulare a datelor.
c. Facilitati de utilizare si administrare a datelor ;
d. Toate afirmatiile de mai sus sunt adevarate
e. Nici una din afirmatiile de mai sus nu este adevarata;
ANS: D

72. Notiuni similare intre SGBDR si fisiere sunt:


a. Tabela-fisier;
b. Tabela - inregistrare.;
c. Linie-inregistrare ;
d. Coloana - câmp;
e. Numai afirmatiile de la punctele a, c, d sunt adevarate ;
ANS: E

73. Notiuni similare intre fisiere si teiria relationala sunt:


a. Fisier-tuplu;
b. Inregistrare-relatie.;
c. Inregistrare-atribut ;
d. Câmp-tuplu;
e. Nici una din afirmatiile de mai sus nu este adevarata;
ANS: E

74. Avantajele sistemelor relationale sunt:


a. Simplitatea conceptelor si a schemei;
b. Un mare grad de independenta a datelor fata de programe
c. Limbaje relationale declarative cu o mare putere de regasire ;
d. Punctele a, b, si c sunt adevarate;
e. Nici una din afirmatiile de mai sus nu este adevarata;
ANS: D

75. Avantajele sistemelor relationale sunt:


a. Ameliorarea semnificativa a protectiei datelor sub toate aspectele;
b. Un mare grad de independenta a datelor fata de programe
c. Limbaje relationale declarative cu o mare putere de regasire
d. Nici una din afirmatiile de mai sus nu este adevarata
ANS: D

76.
Avantajele sistemelor relationale sunt:
a. Simplitatea conceptelor si a schemei;
b. Optimizarea semnificativa a accesului la date, precum si a alocarii datelor;
c. Limbaje relationale declarative cu o mare putere de regasire ;
d. Punctele a, b, si c sunt adevarate
e. Nici una din afirmatiile de mai sus nu este adevarata;
ANS: D

77. Avantajele sistemelor relationale sunt:


a. Simplitatea conceptelor si a schemei;
b. Un mare grad de independenta a datelor fata de programe
c. Manipularea de ansambluri de date prin operatorii din calculul sau algebra rela-
tionala ;
d. Punctele a, b, si c sunt adevarate;
e. Nici una din afirmatiile de mai sus nu este adevarata;
ANS: D

78. Limitele sistemelor relationale sunt:


a. Simplitatea conceptelor si a schemei;
b. Un mare grad de independenta a datelor fata de programe
c. Limbaje relationale declarative cu o mare putere de regasire ;
d. Punctele a, b, si c sunt adevarate;
e. Nici una din afirmatiile de mai sus nu este adevarata;
ANS: E

79. Limitele sistemelor relationale sunt:


a. Ameliorarea semnificativa a protectiei datelor sub toate aspectele;
b. Un mare grad de independenta a datelor fata de programe
c. Limbaje relationale declarative cu o mare putere de regasire ;
d. Punctele a, b, si c sunt adevarate;
e. Nici una din afirmatiile de mai sus nu este adevarata;
ANS: E

80. Limitele sistemelor relationale sunt:;


a. Simplitatea conceptelor si a schemei;
b. Optimizarea semnificativa a accesului la date, precum si a alocarii datelor;
c. Limbaje relationale declarative cu o mare putere de regasire ;
d. Punctele a, b, si c sunt adevarate;
e. Nici una din afirmatiile de mai sus nu este adevarata;
ANS: E

81. Limitele sistemelor relationale sunt:


a. Prea mare simplitatea a modelului care poate conduce la disfunctionalitati;
b. LMD relationale sunt prea limitate ceea ce genereaza disfunctionalitati;
c. Limbaje relationale declarative cu o mare putere de regasire ;
d. Punctele a, b, sunt adevarate
e. Nici una din afirmatiile de mai sus nu este adevarata;
ANS: D

82. Urmatoarele sisteme de gestiune a bazelor de date sunt relationale:


a. INGRES, DB2;
b. PARADOX, C++;
c. JAVA, SQLServer ;
d. ACCESS, INFORMIX;
e. Numai afirmatiile de la a si d sunt adevarate
ANS: E

83. Caracteristici ale unui SGBDOO sunt:


a. Manipularea obiectelor complexe;
b. Identitatea obiectelor;
c. Incapsularea obiectelor ;
d. Punctele a, b, c sunt adevarate;
e. Nici una din afirmatiile de mai sus nu este adevarata;
ANS: D

84. Caracteristici ale unui SGBDOO sunt:


a. Ierarhiile de clase;
b. Identitatea obiectelor;
c. Incapsularea obiectelor ;
d. Punctele a, b, c sunt adevarate;
e. Nici una din afirmatiile de mai sus nu este adevarata;
ANS: D

85. Caracteristici ale unui SGBDOO sunt:


a. Manipularea obiectelor complexe;
b. Suprapunerea ;
c. Incapsularea obiectelor
d. Punctele a, b, c sunt adevarate;
e. Nici una din afirmatiile de mai sus nu este adevarata;
ANS: D

86. Caracteristici ale unui SGBDOO sunt:


a. Manipularea obiectelor complexe;
b. Identitatea obiectelor;
c. Extensibilitatea ;
d. Completitudinea ;
e. Toate afirmatiile de mai sus sunt adevarate
ANS: E

87. Caracteristici ale unui SGBDOO sunt:


a. Persistenta ;
b. Identitatea obiectelor;
c. Extensibilitatea ;
d. Completitudinea ;
e. Toate afirmatiile de mai sus sunt adevarate
ANS: E

88. Caracteristici ale unui SGBDOO sunt:


a. Persistenta ;
b. Gestiunea memoriei;
c. Extensibilitatea ;
d. Completitudinea ;
e. Toate afirmatiile de mai sus sunt adevarate
ANS: E

89. Caracteristici ale unui SGBDOO sunt:


a. Persistenta ;
b. Identitatea obiectelor;
c. Concurenta in exploatare ;
d. Completitudinea ;
e. Toate afirmatiile de mai sus sunt adevarate
ANS: E

90. Caracteristici ale unui SGBDOO sunt:


a. Tranzactiile lungi ;
b. Identitatea obiectelor;
c. Extensibilitatea ;
d. Completitudinea ;
e. Toate afirmatiile de mai sus sunt adevarate
ANS: E

91. Caracteristici ale unui SGBDOO sunt:


a. Persistenta ;
b. Gestiunea versurilor;
c. Extensibilitatea ;
d. Completitudinea
e. Toate afirmatiile de mai sus sunt adevarate
ANS: E

92. Caracteristici ale unui SGBDOO sunt:


a. Persistenta
b. Identitatea obiectelor;
c. Extensibilitatea ;
d. Modele diferite ;
e. Toate afirmatiile de mai sus sunt adevarate
ANS: E
93. Arhitectura functionala a unui SGBDOO contine:
a. Instrumentele utilizator ;
b. Gestionarul de obiecte;
c. Serverul de obiecte ;
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Toate afirmatiile de mai sus sunt neadevarate;
ANS: D

94. Componentele unui SGBDOO :


a. Destinate utilizatorilor ;
b. Ale gestionarului de obiecte
c. Ale serverului de obiecte ;
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Toate afirmatiile de mai sus sunt neadevarate
ANS: D

95. Componentele destinate utilizatorilor unui SGBDOO :


a. Limbajele de programare ;
b. Interfetele ;
c. Prelucrarea mesajelor ;
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si b sunt adevarate;
ANS: D

96. Componentele gestionarului de obiecte ale unui SGBDOO :


a. Limbajele de programare
b. Interfetele ;
c. Prelucrarea mesajelor ;
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si b sunt adevarate;
ANS: C

97. Componentele gestionarului de obiecte ale unui SGBDOO :


a. Prelucrarea schemei BD ;
b. Interfetele ;
c. Prelucrarea mesajelor
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si c sunt adevarate;
ANS: E

98. Componentele serverului de obiecte ale unui SGBDOO :


a. Prelucrarea schemei BD ;
b. Gestiunea tranzactiilor ;
c. Prelucrarea mesajelor ;
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si c sunt adevarate;
ANS: B

99. Componentele serverului de obiecte ale unui SGBDOO :


a. Gestiunea stocului ;
b. Gestiunea tranzactiilor ;
c. Prelucrarea mesajelor
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si b sunt adevarate;
ANS: E

100. Exemple de SGBDOO :


a. O2 ;
b. JASMINE
c. JAVA ;
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si c sunt adevarate;
ANS: D

101. Avantajele unui SGBDOO :


a. Se preteaza pentru aplicatii mari, complexe ;
b. Implementeaza modelul OO care permite reprezentarea obiectelor complexe, din-
amice
c. Pot stoca si prelucra volume mari de date (clasic, multimedia, etc)
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si b sunt adevarate;
ANS: D

102. Avantajele unui SGBDOO :


a. Produc aplicatii cu BD deschise
b. Implementeaza modelul OO care permite reprezentarea obiectelor complexe, din-
amice
c. Pot stoca si prelucra volume mari de date (clasic, multimedia, etc)
d. Toate afirmatiile de mai sus sunt adevarate
e. Numai afirmatiile de la punctele a si c sunt adevarate;
ANS: D

103. Avantajele unui SGBDOO :


a. Se preteaza pentru aplicatii mari, complexe ;
b. Cresterea productivitatii in programare prin reutilizare
c. Pot stoca si prelucra volume mari de date (clasic, multimedia, etc)
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si b sunt adevarate;
ANS: D

104. Avantajele unui SGBDOO :


a. Se asigura independenta totala a datelor ;
b. Cresterea productivitatii in programare prin reutilizare ;
c. Pot stoca si prelucra volume mari de date (clasic, multimedia, etc)
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si b sunt adevarate;
ANS: D

105. Avantajele unui SGBDOO :


a. Se preteaza pentru aplicatii mari, complexe ;
b. Trateaza tranzactii foarte lungi si realizeaza cooperarea intre tranzactii ;
c. Pot stoca si prelucra volume mari de date (clasic, multimedia, etc)
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si b sunt adevarate;
ANS: D

106. Avantajele unui SGBDOO :


a. Distribuirea si reutilizarea se aplica atât la nivel de date cât si la nivel de programe
;
b. Cresterea productivitatii in programare prin reutilizare
c. Pot stoca si prelucra volume mari de date (clasic, multimedia, etc)
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si c sunt adevarate;
ANS: D

107. Limitele unui SGBDOO :


a. Distribuirea si reutilizarea se aplica atât la nivel de date cât si la nivel de programe
b. Nu au fundamentare teoretica „solida”
c. Pot stoca si prelucra volume mari de date (clasic, multimedia, etc)
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si c sunt adevarate;
ANS: B

108. Limitele unui SGBDOO :


a. Piata de utilizare scazuta
b. Nu au fundamentare teoretica „solida” ;
c. Pot stoca si prelucra volume mari de date (clasic, multimedia, etc
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si b sunt adevarate;
ANS: E

109. Limitele unui SGBDOO :


a. Piata de utilizare scazuta ;
b. Nu au fundamentare teoretica „solida” ;
c. Nu au interfete performante pentru proiectarea asistata a BD;
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si b sunt adevarate;
ANS: D

110. Limitele unui SGBDOO :


a. Piata de utilizare scazuta
b. Nu au fundamentare teoretica „solida” ;
c. Nu au un limbaj de programare standard propriu, unanim acceptat
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si c sunt adevarate;
ANS: D

111. Limitele unui SGBDOO :


a. Piata de utilizare scazuta ;
b. Nu au fundamentare teoretica „solida” ;
c. Interogarea se face cu un mare consum de resurse de calcul;
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele b si c sunt adevarate
ANS: D

112. Limitele unui SGBDOO :


a. Piata de utilizare scazuta ;
b. Nu au fundamentare teoretica „solida” ;
c. Nu exista reguli (criterii) clare care sa permita evaluarea ;
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si b sunt adevarate;
ANS: D

113. Limitele unui SGBDOO :


a. Distribuirea si reutilizarea se aplica atât la nivel de date cât si la nivel de programe
;
b. Cresterea productivitatii in programare prin reutilizare ;
c. Pot stoca si prelucra volume mari de date (clasic, multimedia, etc)
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Toate afirmatiile de mai sus sunt avantaje nu limite ale SGBDOO
ANS: E

114. Caracteristici ale SGBD ACCESS :


a. Este un program performant de baze de date ;
b. Este un sistem de gestiune a BD care poate tine evidente multiple: clienti, invent-
are, angajati, etc ;
c. Ruleaza sub mediul Windows;
d. Poseda un numar mare de instrumente utilizator, prietenoase si cu cei mai putin
initiati operatori ;
e. Toate afirmatiile de mai sus sunt adevarate;
ANS: E

115. Tipuri de aplicatii ACCESS :


a. personale ;
b. pentru firmele mici;
c. pentru departamente;
d. toate afirmatiile de mai sus sunt adevarate ;
e. Toate afirmatiile de mai sus sunt neadevarate;
ANS: D

116. Tipuri de aplicatii ACCESS :


a. La nivel de corporatie ;
b. pentru firmele mici;
c. pentru departamente;
d. toate afirmatiile de mai sus sunt adevarate
e. Toate afirmatiile de mai sus sunt neadevarate;
ANS: D

117. Tipuri de aplicatii ACCESS :


a. personale ;
b. internet/intranet;
c. pentru departamente
d. toate afirmatiile de mai sus sunt adevarate ;
e. Toate afirmatiile de mai sus sunt neadevarate;
ANS: D

118. Tipuri de aplicatii ACCESS :


a. Interfete pentru BD tip client/server la nivel de intreprindere;
b. pentru firmele mic
c. pentru departamente;
d. toate afirmatiile de mai sus sunt adevarate ;
e. Toate afirmatiile de mai sus sunt neadevarate;
ANS: D

119. Componente ale SGBD ACCESS


a. Interfata
b. Caracteristica multitasting
c. variante noi sau imbunatatiri ale vrajitorilor
d. Operatiile de import/export de date;
e. toate afirmatiile de mai sus sunt adevarate ;
ANS: E

120. Componente ale SGBD ACCESS :


a. Realizarea copiilor ;
b. Caracteristica multitasting
c. variante noi sau imbunatatiri ale vrajitorilor;
d. Operatiile de import/export de date;
e. toate afirmatiile de mai sus sunt adevarate
ANS: E

121. Componente ale SGBD ACCESS :


a. Macrocomenzile
b. Caracteristicile de dezvoltare;
c. variante noi sau imbunatatiri ale vrajitorilor;
d. modulele
e. toate afirmatiile de mai sus sunt adevarate ;
ANS: E

122. Componente ale SGBD ACCESS :


a. Securitatea ;
b. Tiparirea ;
c. variante noi sau imbunatatiri ale vrajitorilor;
d. modulele ;
e. toate afirmatiile de mai sus sunt adevarate ;
ANS: E

123. Moduri de operare ale SGBD ACCESS


a. Modul de lucru STARTUP ;
b. Modul de lucru DESIGN;
c. Modul de lucru RUN;
d. Toate afirmatiile de mai sus sunt adevarate ;
e. Numai afirmatiile de la punctele a si c sunt adevarate;
ANS: D

124. Tipurile de obiecte ale unei BD ACCESS :


a. Tabela;
b. formularul;
c. interogarea ;
d. raportul ;
e. toate afirmatiile de mai sus sunt adevarate ;
ANS: E

125. Tipurile de obiecte ale unei BD ACCESS :


a. Pagina web de accesare a datelor ;
b. formularul;
c. interogarea ;
d. toate afirmatiile de mai sus sunt adevarate ;
e. afirmatiile de mai sus sunt neadevarate;
ANS: D

126. Tipurile de obiecte ale unei BD ACCESS :


a. Tabela; ;
b. formularul;
c. interogarea ;
d. comanda macro (macro-ul) ;
e. toate afirmatiile de mai sus sunt adevarate ;
ANS: E

127. Tipurile de obiecte ale unei BD ACCESS :


a. Tabela; ;
b. formularul;
c. interogarea ;
d. modulul ;
e. toate afirmatiile de mai sus sunt adevarate ;
ANS: E

128. Lansarea in executie a SGBD ACCESS :


a. Se deschide automat odata cu sistemul de operare;
b. Trebuie mai intâi sa-l implementez;
c. Accesez START/PROGRAMS/MICROSOFT OFFICE/ACCESS
d. Toate afirmatiile de mai sus sunt corecte;
e. toate afirmatiile de mai sus sunt neadevarate ;
ANS: C

129. Interfata SGBD ACCESS cuprinde :


a. Bara de titlu;
b. Bara de meniuri;
c. Una sau mai multe bare de unelte;
d. Suprafata de lucru
e. Toate afirmatiile de mai sus sunt corecte;
ANS: E

130. Activând butonul design din fereastra Database a SGBD ACCESS :


a. Deschidem un obiect selectat;
b. Modificam forma obiectului selectat;
c. Afisam o interogare din baza de date;
d. Deschidem un tabel creat;
e. Afisam macrocomenzile create;
ANS: B

131. Activând butonul new din fereastra Database a SGBD ACCESS :


a. Deschidem un nou obiect pe baza tipului de obiect selectat;
b. Modificam forma obiectului selectat;
c. Afisam o interogare din baza de date;
d. Deschidem un tabel creat;
e. Afisam macrocomenzile create
ANS: A

132. Activând butonul open din fereastra Database a SGBD ACCESS :


a. Deschidem un obiect selectat;
b. Modificam forma obiectului selectat;
c. Afisam o interogare din baza de date;
d. Deschidem un tabel creat;
e. Afisam macrocomenzile create;
ANS: A

133.
Activând butonul tables din fereastra Database a SGBD ACCESS :
a. Deschidem un obiect selectat;
b. Modificam forma obiectului selectat;
c. Afisam o interogare din baza de date;
d. afisam tabelele create in baza de date;
e. Afisam macrocomenzile create;
ANS: D

134. Activând butonul queries din fereastra Database a SGBD ACCESS :


a. Deschidem un obiect selectat;
b. Modificam forma obiectului selectat;
c. Afisam interogarile din baza de date;
d. Deschidem un tabel creat;
e. Afisam macrocomenzile create;
ANS: C

135. Activând butonul forms din fereastra Database a SGBD ACCESS :


a. Deschidem un obiect selectat
b. Modificam forma obiectului selectat;
c. Afisam o interogare din baza de date;
d. Afisam formularele create in baza de date;
e. Afisam macrocomenzile create;
ANS: D

136. Activând butonul pages din fereastra Database a SGBD ACCESS :


a. Deschidem un obiect selectat;
b. Afisam paginile pentru acces la date;
c. Afisam o interogare din baza de date;
d. Deschidem un tabel creat;
e. Afisam macrocomenzile create;
ANS: B

137. Activând butonul macros din fereastra Database a SGBD ACCESS :


a. Afisam macrocomenzile create ;
b. Modificam forma obiectului selectat;
c. Afisam o interogare din baza de date;
d. Deschidem un tabel creat;
e. Afisam modulele de programe create pentru baza de date;
ANS: A

138. ctivând butonul modules din fereastra Database a SGBD ACCESS :


a. Deschidem un obiect selectat;
b. Modificam forma obiectului selectat;
c. Afisam o interogare din baza de date;
d. Afisam modulele de programe create pentru baza de date;
e. Afisam macrocomenzile create;
ANS: D
139. Pentru a deschide o baza de date in SGBD ACCESS :
a. Din ferestra Getting Started (incepeti);
b. Din meniul File/open/fisier/deschidere;
c. Din bara de unelte;
d. Toate variantele de la a,b,c, pot fi utilizate;
e. Nici una din variantele de mai sus nu ne ajuta sa deschidem o baza de date;
ANS: D

140. Pentru a inchide o baza de date in SGBD ACCESS :


a. Din ferestra Getting Started (incepeti);
b. Din meniul File/open/fisier/deschidere;
c. Din meniulFile/Close
d. Prin deschiderea altei baze de date, cea anterioara se inchide;
e. Afirmatiile de la punctele c si d sunt adevarate;
ANS: E

141. Crearea unui tabel presupune: :


a. Crearea structurii (definirea câmpurilor);
b. Crearea indexilor;
c. Incarcarea datelor (actualizarea);
d. Toate afirmatiile de la a,b,c, sunt adevarate
e. Toate afirmatiile de la a,b,c, sunt neadevarate;
ANS: D

142. Crearea unui tabel in SGBD ACCESS se poate realiza:


a. Prin utilizarea ferestrei de proiectare(create table in design view);
b. Prin introducerea datelor (create table by entering data);
c. Prin utilizarea instrumentului Wizard (create table by using wizard);
d. Toate afirmatiile de la a,b,c, sunt adevarate;
e. Toate afirmatiile de la a,b,c, sunt neadevarate;
ANS: D

143. Crearea unei interogari in SGBD ACCESS se poate realiza:


a. Prin utilizarea ferestrei de proiectare(create query in design view);
b. Prin introducerea datelor (create table by entering data);
c. Prin utilizarea instrumentului Wizard (create query by using wizard);
d. Afirmatiile de la a, si ,c, sunt adevarate;
e. Toate afirmatiile de la a,b,c,d sunt neadevarate;
ANS: D

144. Crearea fomularului in SGBD ACCESS se poate realiza:


a. Prin utilizarea ferestrei de proiectare(create form in design view);
b. Prin introducerea datelor (create table by entering data);
c. Prin utilizarea instrumentului Wizard (create form by using wizard);
d. Toate afirmatiile de la a, si ,c, sunt adevarate;
e. Toate afirmatiile de la a,b,c,d sunt neadevarate;
ANS: D

145. Utilizarea comenzilor macro pentru rularea automata a aplicatiilor unei baze de date in SGBD
ACCESS presupune:
a. Programarea prin configurarea proprietatilor obiectelor;
b. Programarea in Query Design;
c. Programarea cu utilitarele vrajitor;
d. Toate afirmatiile de la a,b,c, sunt adevarate;
e. Toate afirmatiile de la a,b,c,si d sunt neadevarate;
ANS: D

146. Crearea comenzilor macro in SGBD ACCESS se poate realiza:


a. Prin utilizarea ferestrei de proiectare(create table in design view);
b. Prin introducerea datelor (create table by entering data);
c. Prin utilizarea ferestrei speciale: New macro;
d. Toate afirmatiile de la a,b,c, sunt adevarate;
e. Toate afirmatiile de la a,b,c, sunt neadevarate;
ANS: C

147. Crearea unui raport in SGBD ACCESS se poate realiza:


a. Prin utilizarea ferestrei de proiectare(create table in design view);
b. Prin introducerea datelor (create table by entering data);
c. Folosirea utilitarului AutoReport;
d. Folosirea optiunii Report Wizard;
e. Numai afirmatiile de la c si d sunt adevarate;
ANS: E

148. Caracteristicile limbajului VBA(visual basic for application) :


a. Ofera un limbaj solid de dezvoltare a aplicatiilor pentru pachetul Microsoft Office;
b. Ofera posibilitatea de a indeplini cerinte care nu pot fi rezolvate prin macrocomen-
zi;
c. Se identifica intocmai cu Visula Basic 6.0;
d. Afirmatiile de la punctele a si b sunt adevarate;
e. Toate afirmatiile de la a,b,c, sunt neadevarate;
ANS: D

149. Functiile VBA:


a. Reprezinta o clasa de proceduri care returneaza o valoare;
b. Modulele de formular si de raport folosesc subproceduri care sa raspunda la eveni-
mente;
c. Functiile sunt create in interiorul unei structuri similare cu cea a procedurilor;
d. Procedurile macro din ACCESS necesita scrierea de functii Access VBA care sa
inlocuiasca actiunile macro atunci când este folosita actiunea macro RunCode;
e. Toate afirmatiile de la a,b,c, d sunt adevarate;
ANS: E
150. Care din afirmatiile de mai jos sunt caracteristice limbajului structurat de interogare SQL
(Structured Qery Language):
a. Este un limbaj standard de descriere a datelor si acces la informatiile din bazele de
date;
b. Prima implementare in SQL/DS (IBM, 1981);
c. Cele mai multe SGBDR implementeaza facilitatile de baza ale standardului, ofer-
ind uneori si extensii ale standardului;
d. Include LMD si LDD;
e. Toate afirmatiile de la a,b,c si d sunt adevarate;
ANS: E
Subiecte SGBD

1.Ce comanda sterge din tabelul Salariat


Cod_ang Nume Prenume Data_ang Virsta Email Salariu
Not null Sir de Sir de Date,valoare Numeric 2 Sir de Valoare
Numeric caractere caractere implicita caractere implicita 0,
de 5 max.20 max.20 data curenta dimensiune numeric de
fixa 30 10 cu 2
zecimale
Coloana nume si salariu?

a. ALTER TABLE SALARIAT


DROP nume,salariu;
b. ALTER TABLE SALARIAT
DROP COLUMN (nume,salariu);
c. ALTER TABLE SALARIAT
DROP (nume,salariu);
d. ALTER TABLE SALARIAT
DROP COLUMN nume, COLUMN salariu;

2.Efectele unei comenzi DDL pot fi anulate cu o comanda ROLLBACK?


Adevarat sau Fals

3.Pentru a introduce in tabelul SALARIAT, 2 coloane : Cod_funct si Email ce varianta folosim?


Cod_ang Nume Prenume Data_ang Virsta Salariu
Not null Sir de Sir de Date,valoare Numeric 2 Valoare
Numeric caractere caractere implicita implicita
de 5 max.20 max.20 data curenta 0, numeric
de 10 cu 2
zecimale

a. ALTER TABLE SALARIAT ADD Cod_funct Number(2), Alter Column Add Email Char(25);
b. ALTER TABLE SALARIAT ADD Cod_funct Number(2), ADD Email Char(25);
c. ALTER TABLE SALARIAT ADD (Cod_funct Number(2), Email Char(25));
d. ALTER TABLE SALARIAT ADD Cod_funct Number(2), Alter ADD Email Char(25);

4. Care este comanda corecta pentru a afisa nume,prenume si virsta salariatilor , iar pentru cei care
au virsta necunoscuta sa apara ” virsta necunoscuta”?

a.SELECT nume,prenume, NVL(virsta,”virsta necunoscuta”) FROM SALARIAT;


b.SELECT nume,prenume, NVL(TO_CHAR(virsta),”virsta necunoscuta”) FROM
SALARIAT;
c. SELECT nume,prenume, NVL(CHAR(virsta),”virsta necunoscuta”) FROM SALARIAT;

d. SELECT nume,prenume, NVL2(TO_CHAR(virsta),”virsta necunoscuta”) FROM SALARIAT;

5. Constringerea NOT NULL poate fi adaugata utilizind o comanda ALTER TABLE…. ADD
CONSTRAINT?
Adevat sau Fals

6.Care este comanda care determina stergerea tuturor salariatilor din departamentul 10?
a. DELETE SALARIAT
WHERE Cod_dep=10;
b. DELETE TO SALARIAT
WHERE Cod_dep=10;
c. DROP FROM SALARIAT
WHERE Cod_dep=10;
d. . DELETE FROM SALARIAT
WHERE Cod_dep=10;

7.Care este varianta corecta pentru a crea tabelul SALARIAT cu caracetristicile de mai jos:
Cod_ang Nume Prenume Data_ang Virsta Email Salariu
Not null Sir de Sir de Date,valoare Numeric 2 Sir de Valoare
Numeric caractere caractere implicita caractere implicita 0,
de 5 max.20 max.20 data curenta dimensiune numeric de
50 10 cu 2
zecimale

a.CREATE TABEL SALARIAT( cod_ang Number (5) NOT NULL, nume VARCHAR
(20),prenume VARCHAR2(20),data_ang DATE DEFAULT SYSDATE, virsta Number
(2),email CHAR(50), salariu Number(10,2) DEFAULT 0);
b. CREATE TABEL SALARIAT( cod_ang Number (5) , nume VARCHAR
(20),prenume VARCHAR2(20),data_ang DATE , virsta Number (2),email CHAR(50), salariu
Number(10,2) DEFAULT 0);
c. CREATE TABEL SALARIAT( cod_ang Number (5) NOT NULL, nume VARCHAR
(20),prenume VARCHAR2(20),data_ang DATE , DEFAULT SYSDATE, virsta Number
(2),email CHAR(50), salariu Number(10,2) DEFAULT 0):

8. Actualizarile realizate pe o vizualizare, se propaga intotdeauna asupra tabelelor de date ?


Adevarat sau Fals

9. Care este comanda INCORECTA care afiseaza numele, salariul si virsta pentru toti salariatii
care cistiga mai mult de 1000, rezultatul fiind sortat descendent dupa salariu, iar pentru cei care au
acelasi salariu in ordine crescatoare dupa nume ?
a. SELECT nume,salariu,virsta
FROM SALARIAT
WHERE salariu>1000
ORDER by salariu DESC nume ASC;
b. SELECT nume,salariu,virsta
FROM SALARIAT
WHERE salariu>1000
ORDER by salariu DESC, nume ASC;
c. SELECT nume,salariu,virsta
FROM SALARIAT
WHERE salariu>1000
ORDER by salariu DESC , nume ;
d. SELECT nume,salariu,virsta
FROM SALARIAT
WHERE salariu>1000
ORDER by 2 DESC , 1 ASC;

10. Care comanda NU defineste corect un tabel ?


a. CREATE TABLE [schema]nume_tabel(nume_col tip_de_date[Default expresie]…);
b. CREATE TABLE nume_tabel [(col1,col2..)] AS subcerere;
c. CREATE TABLE [schema]nume_tabel(nume_col tip_de_date[Default
expresie][constringere_de_coloana]…);
d. CREATE TABLE [schema]nume_tabel(nume_col tip_de_date[Default
expresie][constringere_de_coloana] ][constringere la nivel de tabel);
11. Care este comanda corecta care sterge valoarea coloanei salariu pentru angajatii care sunt
angajati cu contract de colaborare ?
a. DELETE SALARIU
FROM SALARIATI
WHERE contract=’colaborare’;
b. UPDATE SALARIATI
SET SALARIU IS NULL
WHERE contract=’colaborare’;
c. DROP SALARIU
FROM SALARIATI
WHERE contract=’colaborare’;
d. UPDATE SALARIATI
SET SALARIU = NULL
WHERE contract=’colaborare’;

12. Cu ce comanda se creeaza tabelul SALARIAT_1 care sa aiba aceeasi structura cu tabelul
SALARIAT si contine salariati cu salariu mai mare cu 100?
Tabelul cel de mai sus nu l-am mai copiat o data……

a.CREATE TABLE SALARIAT_1 SELECT *FROM SALARIAT WHERE salariu>100;


b. CREATE TABLE SALARIAT_1 AS SELECT *FROM SALARIAT WHERE
salariu>100;
c. CREATE TABLE SALARIAT_1 SELECT FROM SALARIAT WHERE salariu>100;
d. CREATE TABLE SALARIAT_1 AS SELECT Cod_ang, Salariu FROM SALARIAT WHERE
salariu>100;

13. Pentru tabelul care este comanda corecta ptr. a modifica salariu la 3000 ,pentru angajatii care
lucreaza in departamentul 10 si au salariu mai mic de 3000?
a.UPDATE SALARIAT SET SALARIU=3000
WHERE cod_dep=10 AND salariu<3000;
b.MODIFY SALARIAT SET SALARIU=3000
WHERE cod_dep=10 , salariu<3000;
c. UPDATE SALARIAT SET cod_dep=10 AND Salariu<3000
WHERE salariu=3000;
d. MODIFY SALARIAT SET SALARIU=3000
WHERE cod_dep=10 AND salariu<3000;
Am raspuns: d

14. Efectele unei comenzi DML pot fi anulate cu o comanda ROLLBACK?


Adevat sau Fals ??

1. Care este forma corecta pentru a adauga constrangeri la nivel de coloana si /sau la nivel de tabel?

CREATE TABLE [schema.]nume_tabel (


nume_coloana tip_de_date, [DEFAULT expr] [constrangere_de_coloana], ...
..[constrangere la nivel de tabel])

CREATE TABLE [schema.]nume_tabel (


nume_coloana tip_de_date [DEFAULT expr], [constrangere_de_coloana] ...
..[constrangere la nivel de tabel])

CREATE TABLE [schema.]nume_tabel (


nume_coloana tip_de_date, [DEFAULT expr], [constrangere_de_coloana], ...
..[constrangere la nivel de tabel])
CREATE TABLE [schema.]nume_tabel (
nume_coloana tip_de_date [DEFAULT expr] [constrangere_de_coloana], ...
..[constrangere la nivel de tabel])

2. Care este comanda corecta care determina marirea salariul tuturor angajatilor din tabelul salariat cu 5%?

UPDATE salariu
SET salariu = salariu * 1.05;

UPDATE salariat
SET salariu = salariu * 1.05;

UPDATE salariat
SET salariu = 1.05;

UPDATE salariat
SET salariu = salariu + salariu* 1.05;

3. Care este comanda corecta care insereaza in tabelul TOTALURI(cod_departament, numar_angajati,


suma_salarii)?

INSERT INTO totaluri


SELECT cod_departament, COUNT(*),SUM(salariu)
FROM salariat
GROUP BY cod_departament;

INSERT INTO totaluri


SELECT cod_departament, SUM(cod_angajat),SUM(salariu)
FROM salariat
GROUP BY cod_departament;

INSERT INTO totaluri


SELECT cod_departament, COUNT(*),SUM(salariu)
FROM salariat;

INSERT INTO totaluri


SELECT cod_departament, COUNT(),SUM(salariu)
FROM salariat
ORDER BY cod_departament;

4. Care comanda afiseaza numele angajatilor, fara duplicate, care au manager?

SELECT DISTINCT nume


FROM salariat
WHERE manager IS NOT NULL;

SELECT DISTINCT nume


FROM salariat
WHERE manager IS NULL;

SELECT nume
FROM salariat
WHERE manager IS NOT NULL;

SELECT DISTINCT nume


FROM salariat
WHERE manager != NULL;

5. Care este comanda corecta care pentru fiecare facultate, se insereaza in tabelul SALARII(cod_fac, nr_prof,
total_sal_fac) numarul de profesori si suma salariilor pe care facultatea o plateste profesorilor sai?

INSERT TO TOTALURI
SELECT COD_FAC, COUNT(*) , SUM(SALARIU)
FROM PROF ORDER BY COD_FAC;

INSERT INTO TOTALURI


SELECT COD_FAC, COUNT(*) , SUM(SALARIU)
FROM PROF ;

INSERT INTO TOTALURI


SELECT COD_FAC, COUNT(*) , SUM(SALARIU)
FROM PROF GROUP BY COD_FAC;

INSERT INTO totaluri


SELECT COD_FAC, SUM(COD_PROF),SUM(SALARIU)
FROM PROF
GROUP BY COD_FAC;

6. Care secventa este corecta pentru a afisa citi angajati nu au o valoare introdusa pe coloana salariu?

SELECT COUNT()
FROM salariati
WHERE SALARIU =0;

SELECT COUNT(*)
FROM salariati
WHERE SALARIU =NULL;

SELECT COUNT(*)
FROM salariati
WHERE SALARIU IS NOT NULL;
SELECT COUNT(*)
FROM salariati
WHERE SALARIU IS NULL;

7. Care este comanda corecta care determina dublarea salariilor cu rotunjire la 2 zecimale a angajatilor care sunt
titulari?

UPDATE salariat
SET salariu=ROUND(salariu*2,2);

UPDATE salariat
SET salariu=ROUND(salariu*2)
WHERE titular =’y’;

UPDATE salariat
SET salariu=ROUND(salariu*2,2)
WHERE titular =’y’;

UPDATE salariat
SET salariu=ROUND(salariu*0.5,2)
WHERE titular =’y’;

8. Care este comanda corecta care afiseaza numele salariatilor care castiga mai mult decat salariul mediu pe
companie, in ordine crescatoare a salariului?

SELECT nume
FROM salariati
WHERE salariu >AVG(salariu);

SELECT nume
FROM salariati
WHERE salariu > (SELECT AVG(salariu) FROM salariati)
ORDER BY salariu;

SELECT nume
FROM salariati
WHERE salariu > (SELECT AVG(salariu) FROM salariati
ORDER BY salariu);

SELECT nume
FROM salariati
WHERE salariu > (SELECT AVG(salariu) FROM salariati)
ORDER BY 1;

9. Ce comanda modifica in tabelul SALARIAT

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU

not null sir de sir caractere date, valoare numeric de 2 sir de valoare
numeric de 5 caractere de de maxim 20 implicita caractere de implicita 0
maxim 20 data curentã dimensiune numar de 10
fixa, de 30 cu 2
zecimale

dimensiunea coloanei nume la 30 si pe cea a coloanei salariu la 12 cu 3 zecimale?

ALTER TABLE salariat


MODIFY nume VARCHAR2(30), salariu NUMBER(12,3);

ALTER TABLE salariat


MODIFY nume VARCHAR2(30), salariu NUMBER(12,3);

ALTER TABLE salariat


MODIFY nume VARCHAR2(30), MODIFY salariu NUMBER(12,3);

ALTER TABLE salariat


MODIFY (nume VARCHAR2(30), salariu NUMBER(12,3));

10. Care este comanda corecta care sterge valoarea coloanei salariu pentru angajatii care sunt angajati cu contract
de colaborare?

DELETE salariu
FROM salariati
WHERE contract=’colaborare’;

UPDATE salariati
SET salariu IS null
WHERE contract=’colaborare’;

DROP salariu
FROM salariati
WHERE contract=’colaborare’;

UPDATE salariati
SET salariu=null
WHERE contract=’colaborare’;

11. Care este comanda incorecta care afiseaza numele, salariul si varsta pentru toti salariatii care castiga mai mult
de 1000, rezultatul fiind sortat descendent dupa salariu, iar pentru cei care au acelasi salariu in ordine crescatoare
dupa nume?

SELECT nume, salariu, varsta


FROM salariat
WHERE salariu>1000
ORDER BY salariu DESC nume ASC;

SELECT nume, salariu, varsta


FROM salariat
WHERE salariu>1000
ORDER BY salariu DESC, nume ASC;
SELECT nume, salariu, varsta
FROM salariat
WHERE salariu>1000
ORDER BY salariu DESC, nume;

SELECT nume, salariu, varsta


FROM salariat
WHERE salariu>1000
ORDER BY 2 DESC, 1 ASC;

12. Actualizarile realizate asupra tabelelor de baza ale unei vizualizari se reflecta totdeauna in vizualizare

Adevărat
Fals

13. Care este comanda corecta pentru a afisa numele, prenumele si varsta salariatilor, iar pentru cei
care au varsta necunoscuta sa apara textul “varsta necunoscuta”?

SELECT nume, prenume, NVL(varsta, ‘varsta necunoscuta’)


FROM salariat;

SELECT nume, prenume, NVL(TO_CHAR(varsta), ‘varsta necunoscuta’)


FROM salariat;

SELECT nume, prenume, NVL(CHAR(varsta), ‘varsta necunoscuta’)


FROM salariat;

SELECT nume, prenume, NVL2(TO_CHAR(varsta), ‘varsta necunoscuta’)


FROM salariat;

14. Care comanda afiseaza numarul de angajati din fiecare departament?

SELECT cod_departament, COUNT(*)


FROM salariat;

SELECT cod_departament, SUM(cod_angajat)


FROM salariat
GROUP BY cod_departament;

SELECT cod_departament, COUNT(*)


FROM salariat
GROUP BY cod_departament;

SELECT cod_departament, COUNT()


FROM salariat
GROUP BY cod_departament;

15. Pentru a introduce in tabelul SALARIAT

COD _ANG NUME PRENUME DATA_ANG VARSTA SALARIU

not null sircaractere sir caractere date, valoare numeric de 2 valoare


numeric de 5 de maxim 20 de maxim 20 implicita data implicita 0
curentã numar de 10
cu 2 zecimale

doua coloane: Cod_Funct si Email ce varianta folosim?

ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER COLUMN ADD Email char(25);

ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ADD Email CHAR(25);

ALTER TABLE SALARIAT ADD (Cod_Funct NUMBER(2) , Email CHAR(25));


ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER ADD Email char(25);

16. Ce comanda creeaza tabelul SALARIAT_1 care sã aiba aceeiasi structura cu


tabelul SALARIAT

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU

not null sir de sir caractere date, valoare numeric de 2 sir de valoare
numeric de 5 caractere de de maxim 20 implicita caractere de implicita 0
maxim 20 data curentã dimensiune numar de 10
fixa, de 30 cu 2
zecimale

si sa contina salariatii care au salariu >100?

CREATE TABLE SALARIAT_1


SELECT * FROM SALARIAT WHERE SALARIU>100;

CREATE TABLE SALARIAT_1 AS


SELECT * FROM SALARIAT WHERE SALARIU>100;

CREATE TABLE SALARIAT_1 AS


SELECT FROM SALARIAT WHERE SALARIU>100;

CREATE TABLE SALARIAT_1 AS


SELECT COD_ANG, SALARIU FROM SALARIAT WHERE SALARIU>100;

17. Pentru a modifica dimensiunea coloanei prenume la 30 si pe cea a salariului la 12 cu 3 zecimale, din
tabelul SALARIAT

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU

not null sir de sir caractere date, valoare numeric de 2 sir de valoare
numeric de 5 caractere de de maxim 20 implicita caractere de implicita 0
maxim 20 data curentã dimensiune numar de 10
fixa, de 30 cu 2
zecimale

care varienta este corecta?

ALTER TABLE SALARIAT


MODIFY (prenume VARCHAR2(30) salariu NUMBER(12,3));

ALTER TABLE SALARIAT


MODIFY (prenume VARCHAR2(30)), MODIFY(salariu NUMBER(12,3));
ALTER TABLE SALARIAT
MODIFY (prenume VARCHAR2(30) , salariu NUMBER(12,3));

ALTER TABLE SALARIAT


ADD (prenume VARCHAR2(30), salariu NUMBER(12,3));

18. Care este varianta corecta pentru a crea tabelul Salariat, cu caracteristicile de mai jos?

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU

not null sir de sir caractere date, valoare numeric de 2 sir de valoare
numeric de 5 caractere de de maxim 20 implicita caractere de implicita 0
maxim 20 data curentã dimensiune numar de 10
fixa, de 30 cu 2
zecimale

CREATE TABLE SALARIAT (


cod_ang NUMBER(5) NOT NULL,
nume VARCHAR2(20),
prenume VARCHAR2(20),
data_angajarii DATE DEFAULT SYSDATE,
varsta NUMBER(2),
email CHAR(50),
salariu NUMBER(10,2) DEFAULT 0);

CREATE TABLE SALARIAT (


cod_ang NUMBER(5)
nume VARCHAR2(20),
prenume VARCHAR2(20),
data_angajarii DATE ,
varsta NUMBER(2),
email CHAR(50),
salariu NUMBER(10,2) DEFAULT 0);

CREATE TABLE SALARIAT (


cod_ang NUMBER(5) NOT NULL,
nume VARCHAR2(20),
prenume VARCHAR2(20),
data_angajarii DATE, DEFAULT SYSDATE,
varsta NUMBER(2),
email CHAR(50),
salariu NUMBER(10,2), DEFAULT 0);

19. Care varianta este corecta pentru a redenumi tabelul SALARIAT cu numele SALARIATI?

RENAME SALARIAT TO SALARIATI;


RENAME SALARIAT WITH SALARIATI;
RENAME TABLE SALARIAT TO TABLE SALARIATI;
RENAME TABLE SALARIAT WITH TABLE SALARIATI;

20. Care ste comanda corecta care afiseaza codul departamentelor pentru care salariul minim depaseste
5000$?

SELECT cod_departament
FROM salariat
WHERE MIN(salariu)>5000
GROUP BY cod_departament;

SELECT cod_departament
FROM salariat
GROUP BY cod_departament
HAVING MIN(salariu)>5000;

SELECT cod_departament
FROM salariat
GROUP BY cod_departament
MIN(salariu)>5000;

ALTE SUBIECTE TIMISOARA

Care este comanda corecta care afiseaza numele si salariul angajatilor condusi direct de Ionescu Mihai?
SELECT nume, salariu
FROM salariati
WHERE cod_sef = (SELECT cod_angajat FROM salariati
WHERE nume ='Ionescu' AND prenume ='Mihai' );
SELECT nume, salariu
FROM salariati
WHERE cod_sef = (SELECT cod_angajat FROM salariati
WHERE nume ='Ionescu', prenume ='Mihai' );
SELECT nume, salariu
FROM salariati
WHERE cod_sef = ‘Ionescu Mihai';
SELECT nume, salariu
FROM salariati
WHERE cod_sef != (SELECT cod_angajat FROM salariati
WHERE nume ='Ionescu' AND prenume ='Mihai' );

Ce comanda sterge din tabelul SALARIAT

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU


not null numeric de 5 sir de
caractere de
maxim 20 sir caractere de maxim 20 date, valoare implicita data curentã numeric de 2 sir de caractere de
dimensiune fixa, de 30 valoare implicita 0
numar de 10 cu 2 zecimale

coloana nume si coloana salariu?

ALTER TABLE SALARIAT


DROP nume, salariu;
ALTER TABLE SALARIAT
DROP COLUMN (nume, salariu);
ALTER TABLE SALARIAT
DROP (nume, salariu);
ALTER TABLE SALARIAT
DROP COLUMN nume, COLUMN salariu;

Care este comanda corecta care afiseaza numele salariatilor care lucreaza in departamentul 3 si au salariul >100 sau
care sunt din departamentul 5 si au salariul <200?
SELECT nume
FROM salariat
WHERE (cod_deptartament=3 OR salariu>100) AND (cod_deptartament=5 OR salariu<200);
SELECT nume
FROM salariat
WHERE (cod_deptartament=3 AND salariu>100) OR (cod_deptartament=5 AND salariu<200);
SELECT nume
FROM salariat
WHERE (cod_deptartament=3 AND salariu>100) AND (cod_deptartament=5 AND salariu<200);
SELECT nume
FROM salariat
WHERE (cod_deptartament=3 AND salariu>100) OR (cod_deptartament=5 OR salariu<200);

Care dintre urmatoarele comenzi intoarce numarul zilei din luna carespunzator datei curente?
SELECT TO_CHAR(SYSDATE,’DDD’)
FROM dual;
SELECT TO_CHAR(SYSDATE,’DAY’)
FROM dual;
SELECT TO_CHAR(SYSDATE,’D’)
FROM dual;
SELECT TO_CHAR(SYSDATE,’DD’)
FROM dual;

Care este comanda corecta care afiseaza numele salariatilor si numele departamentelor in care lucreaza, inclusiv
departamentele in care nu lucreaza salariati?

SELECT nume_salariat, nume_departament


FROM salariati s, departamente d
WHERE s.cod_departament = d.cod_departament;
SELECT nume_salariat, nume_departament
FROM salariati s, departamente d
WHERE s.cod_departament(+) = d.cod_departament;
SELECT nume_salariat, nume_departament
FROM salariati s, departamente d
WHERE s.cod_departament = d.cod_departament(+);
SELECT nume_salariat, nume_departament
FROM salariati s, departamente d
WHERE s.cod_departament(+) = d.cod_departament(+);
Pentru a insera in tabelul SALARIAT inregistrari,

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU


not null numeric de 5 sir caractere de maxim 20 sir caractere de maxim 20 date, valoare implicita data curentã
numeric de 2 sir de
caractere de dimensiune fixa, de 30 valoare implicita 0
numar de 10 cu 2 zecimale

care varianta este incorecta?


INSERT INTO SALARIAT(COD _ANG, NUME,PRENUME,DATA_ANG,VARSTA,EMAIL, SALARIU) VALUES(5,
‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘INTERZIS PE FORUM CU ADRESE DE EMAIL.com’, 2500.50)
INSERT INTO SALARIAT(COD _ANG, NUME,PRENUME, VARSTA, EMAIL) VALUES(5, ‘Ene’, ‘Ana’, 20,
‘INTERZIS PE FORUM CU ADRESE DE EMAIL.com’)
INSERT INTO SALARIAT(COD _ANG, NUME,PRENUME,VARSTA,EMAIL, SALARIU) VALUES(5, ‘Ene’,
‘Ana’, ‘1/06/2009’, 20, ‘INTERZIS PE FORUM CU ADRESE DE EMAIL.com’)
INSERT INTO SALARIAT
VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘INTERZIS PE FORUM CU ADRESE DE EMAIL.com’, 2500.50)

Ce comanda creeaza tabelul SALARIAT_1 care sã aiba aceeiasi structura cu


tabelul SALARIAT

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU


not null numeric de 5 sir de
caractere de
maxim 20 sir caractere de maxim 20 date, valoare implicita data curentã numeric de 2 sir de caractere de
dimensiune fixa, de 30 valoare implicita 0
numar de 10 cu 2 zecimale

si sa contina salariatii care au salariu >100?

CREATE TABLE SALARIAT_1


SELECT * FROM SALARIAT WHERE SALARIU>100;
CREATE TABLE SALARIAT_1 AS
SELECT * FROM SALARIAT WHERE SALARIU>100;
CREATE TABLE SALARIAT_1 AS
SELECT FROM SALARIAT WHERE SALARIU>100;
CREATE TABLE SALARIAT_1 AS
SELECT COD_ANG, SALARIU FROM SALARIAT WHERE SALARIU>100;

Care este comanda nu elimina simultan spatiile de la inceputul si sfarsitul coloanei nume?
SELECT TRIM(nume)
FROM salariat;
SELECT RTRIM(LTRIM(nume))
FROM salariat;
SELECT LTRIM(RTRIM(nume))
FROM salariat;
SELECT LTRIM(nume)
FROM salariat;

2. Care este comanda corecta care afiseaza toate functiile pe care nu lucreaza angazatii?

A SELECT cod_functie
FROM functii
WHERE cod_functie IN
(select cod_functie FROM salariati WHERE cod_functie IS NOT NULL)

B SELECT cod_functie
FROM functii
WHERE cod_functie NOT IN
(select cod_functie FROM salariati WHERE cod_functie IS NULL)
C SELECT cod_functie
FROM functii
WHERE cod_functie NOT IN
(select cod_functie FROM salariati)

D SELECT cod_functie
FROM functii
WHERE cod_functie NOT IN
(select cod_functie FROM salariati WHERE cod_functie IS NOT NULL)

Raspuns D.

ALTE TESTE

3-Care este comanda corecta care afiseaza numele cititorilor care au carti nerestituite?
SELECT nume_cititor
FROM imprumuta
WHERE data_restituirii = NULL;

SELECT nume_cititor
FROM imprumuta
WHERE data_restituirii IS NOT NULL;

SELECT nume_cititor
FROM imprumuta
WHERE data_restituirii IS NULL;

SELECT nume_cititor
FROM imprumuta
WHERE data_restituirii > SYSDATE;

6-Care comanda nu defineste corect un tabel?

CREATE TABLE [schema.]nume_tabel (


nume_coloana tip_de_date [DEFAULT expr], ...);

CREATE TABLE nume_tabel [(col1, col2...)]


AS subcerere;

CREATE TABLE [schema.]nume_tabel (


nume_coloana tip_de_date, [DEFAULT expr], [constrangere_de_coloana], ...);

CREATE TABLE [schema.]nume_tabel (


nume_coloana tip_de_date [DEFAULT expr] [constrangere_de_coloana], ...
..[constrangere la nivel de tabel])

8-Ce comanda creeaza corect tabelul SALARIAT, specificand constrangerile

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU


cheie primara numeric de 5 not null
sir decaractere demaxim 20 sir caractere de maxim 20 date, valoare
implicita data curentã numeric de 2 unic sir de caractere de dimensiune fixa, de 30 > 0
numar de 10 cu 2 zecimale
coloana nume si coloana salariu?

CREATE TABLE salariat(


cod_ang NUMBER(5) PRIMARY KEY,
nume VARCHAR2(20) NOT NULL,
prenume VARCHAR2(20),
data_ang DATE DEFAULT SYSDATE,
varsta NUMBER(2),
email CHAR(30) UNIQUE,
salariu NUMBER(10,2) CHECK (salariu > 0));
CREATE TABLE salariat(
cod_ang NUMBER(5) PRIMARY KEY,
nume VARCHAR2(20) NOT NULL,
prenume VARCHAR2(20),
data_ang DATE DEFAULT SYSDATE,
varsta NUMBER(2),
email CHAR(30) UNIQUE,
salariu NUMBER(10,2) > 0));

CREATE TABLE salariat(


cod_ang NUMBER(5) PRIMARY KEY,
nume VARCHAR2(20) NOT NULL,
prenume VARCHAR2(20),
data_ang DATE DEFAULT SYSDATE,
varsta NUMBER(2),
email CHAR(30),
salariu NUMBER(10,2) CHECK (salariu > 0));

9-Care este comanda corecta care afiseaza numele si salariul angajatilor condusi direct de ‘ENE DAN’?

SELECT nume, salariu


FROM salariati
WHERE cod_manager = (SELECT cod_manager FROM salariati
WHERE UPPER(nume) ='ENE' , UPPER(pren) ='DAN' );

SELECT nume, salariu


FROM salariati
WHERE cod_manager = (SELECT cod_ang FROM salariati
WHERE nume ='ENE' , pren ='DAN' );

SELECT nume, salariu


FROM salariati
(SELECT cod_ang FROM salariati
WHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN' );

SELECT nume, salariu


FROM salariati
WHERE cod_manager = (SELECT cod_ang FROM salariati
WHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN' );

10. Care este comanda corecta care afiseaza numarul total al cartilor imprumutate in anul 2008?

SELECT COUNT()
FROM imprumuta
WHERE TO_CHAR(data_imprumutului,’yyyy’)=2008;

SELECT COUNT(*)
FROM imprumuta
WHERE TO_CHAR(data_imprumutului,’yyyy’)=2008;

SELECT COUNT(*)
FROM imprumuta
WHERE data_imprumutului=2008;

SELECT COUNT(*)
FROM imprumuta
WHERE TO_CHAR(data_imprumutului,’yy’)=2008;

14-Care comanda listeaza numele tuturor angajatilor care au a treia litera din nume 'a'?

SELECT nume
FROM salariat
WHERE nume LIKE '__a$';

SELECT nume
FROM salariat
WHERE nume LIKE '%a%';
SELECT nume
FROM salariat
WHERE nume LIKE '__a%';

15-Care este comanda corecta care afiseaza toate departamentele care platesc salariatilor sai o suma mai
mare ca 20000?

SELECT nume_departament
FROM departament
WHERE 20000<
(SELECT sum(salariu) FROM salariat);

SELECT nume_departament
FROM departament A
WHERE 20000<
(SELECT sum(salariu) FROM salariat B
where cod_departament=cod_departament);

SELECT nume_departament
FROM departament
WHERE 20000<
(SELECT sum(salariu) FROM salariat
where A.cod_departament=B.cod_departament);

SELECT nume_departament
FROM departament A
WHERE 20000<
(SELECT sum(salariu) FROM salariat B
where A.cod_departament=B.cod_departament);

18-Care este comanda corecta care afiseaza codul departamentelor, numele departamentelor si suma salariilor
pentru fiecare departament?

SELECT cod_departament, nume_departament, SUM(salariu)


FROM salariati s, departamente d
GROUP BY cod_departament, nume_departament;

SELECT cod_departament, nume_departament, SUM(salariu)


FROM salariati s, departamente d
WHERE s.cod_departament=d.cod_departament
GROUP BY cod_departament;

SELECT cod_departament, nume_departament, SUM(salariu)


FROM salariati s, departamente d
WHERE s.cod_departament=d.cod_departament
GROUP BY cod_departament, nume_departament;

SELECT cod_departament, nume_departament, SUM(salariu)


FROM salariati, departamente
WHERE s.cod_departament=d.cod_departament
GROUP BY cod_departament, nume_departament;

19-Care este comanda corecta care sa afiseze daca exista angajati care nu lucreaza in departamentul
‘Contractari’ si al caror salariu coincide cu salariul unui angajat din departamentul ‘Contractari’?

SELECT nume, salariu, cod_depart


FROM salariati
WHERE salariu IN (SELECT salariu FROM salariati s, department d
WHERE s.cod_depart = d.cod_depart AND nume_depart <> ‘Contractari’)
AND cod_depart= (SELECT cod_depart FROM department
WHERE nume_depart = ‘Contractari’);

SELECT nume, salariu, cod_depart


FROM salariati
WHERE salariu IS IN (SELECT salariu FROM salariati s, department d
WHERE s.cod_depart = d.cod_depart , nume_depart = ‘Contractari’)
AND cod_depart<> (SELECT cod_depart FROM department
WHERE nume_depart = ‘Contractari’);

SELECT nume, salariu, cod_depart


FROM salariati
WHERE (salariu) IN (SELECT salariu FROM salariati s, department d
WHERE s.cod_depart = d.cod_depart AND nume_depart = ‘Contractari’)
AND cod_depart<> (SELECT cod_depart FROM department
WHERE nume_depart = ‘Contractari’);

70%

1. Care este comanda corecta care determina marirea salariul tuturor angajatilor din tabelul salariat cu
5%?

UPDATE salariu
SET salariu = salariu * 1.05;

UPDATE salariat
SET salariu = salariu * 1.05;
(varianta aleasa de mine)

UPDATE salariat
SET salariu = 1.05;

UPDATE salariat
SET salariu = salariu + salariu* 1.05;

2. Care este comanda corecta care afiseaza numele salariatilor care castiga mai mult decat salariul
mediu pe companie, in ordine crescatoare a salariului?

SELECT nume
FROM salariati
WHERE salariu >AVG(salariu);

SELECT nume
FROM salariati
WHERE salariu > (SELECT AVG(salariu) FROM salariati)
ORDER BY salariu;
(varianta aleasa de mine)

SELECT nume
FROM salariati
WHERE salariu > (SELECT AVG(salariu) FROM salariati
ORDER BY salariu);

SELECT nume
FROM salariati
WHERE salariu > (SELECT AVG(salariu) FROM salariati)
ORDER BY 1;

3. Ce comanda modifica in tabelul SALARIAT

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU

not null sir de sir caractere date, valoare numeric de 2 sir de valoare
numeric de 5 caractere de de maxim 20 implicita data caractere de implicita 0
maxim 20 curentã dimensiune numar de 10
fixa, de 30 cu 2 zecimale

dimensiunea coloanei nume la 30 si pe cea a coloanei salariu la 12 cu 3 zecimale?


ALTER TABLE salariat
MODIFY nume VARCHAR2(30), salariu NUMBER(12,3);

ALTER TABLE salariat


MODIFY nume VARCHAR2(30), salariu NUMBER(12,3);

ALTER TABLE salariat


MODIFY nume VARCHAR2(30), MODIFY salariu NUMBER(12,3);

ALTER TABLE salariat


MODIFY (nume VARCHAR2(30), salariu NUMBER(12,3));
(varianta aleasa de mine)

4. Actualizarile realizate asupra tabelelor de baza ale unei vizualizari se reflecta totdeauna in vizualizare

Adevărat
(varianta aleasa de mine)

5. Pentru a modifica dimensiunea coloanei prenume la 30 si pe cea a salariului la 12 cu 3 zecimale, din


tabelul SALARIAT

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU

not null sir de sir caractere date, valoare numeric de sir de valoare
numeric de caractere de de maxim 20 implicita data 2 caractere de implicita 0
5 maxim 20 curentã dimensiune numar de 10 cu 2
fixa, de 30 zecimale

care varienta este corecta?

ALTER TABLE SALARIAT


MODIFY (prenume VARCHAR2(30) salariu NUMBER(12,3));

ALTER TABLE SALARIAT


MODIFY (prenume VARCHAR2(30)), MODIFY(salariu NUMBER(12,3));

ALTER TABLE SALARIAT


MODIFY (prenume VARCHAR2(30) , salariu NUMBER(12,3));
(varianta aleasa de mine)

ALTER TABLE SALARIAT


ADD (prenume VARCHAR2(30), salariu NUMBER(12,3));

6. Care este varianta corecta pentru a crea tabelul Salariat, cu caracteristicile de mai jos?

COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU

not null sir de sir caractere date, valoare numeric de 2 sir de valoare
numeric de 5 caractere de de maxim 20 implicita data caractere de implicita 0
maxim 20 curentã dimensiune numar de 10
fixa, de 30 cu 2 zecimale

CREATE TABLE SALARIAT (


cod_ang NUMBER(5) NOT NULL,
nume VARCHAR2(20),
prenume VARCHAR2(20),
data_angajarii DATE DEFAULT SYSDATE,
varsta NUMBER(2),
email CHAR(50),
salariu NUMBER(10,2) DEFAULT 0);
(varianta aleasa de mine)

CREATE TABLE SALARIAT (


cod_ang NUMBER(5)
nume VARCHAR2(20),
prenume VARCHAR2(20),
data_angajarii DATE ,
varsta NUMBER(2),
email CHAR(50),
salariu NUMBER(10,2) DEFAULT 0);

CREATE TABLE SALARIAT (


cod_ang NUMBER(5) NOT NULL,
nume VARCHAR2(20),
prenume VARCHAR2(20),
data_angajarii DATE, DEFAULT SYSDATE,
varsta NUMBER(2),
email CHAR(50),
salariu NUMBER(10,2), DEFAULT 0);

7. Care varianta este corecta pentru a redenumi tabelul SALARIAT cu numele SALARIATI?

RENAME SALARIAT TO SALARIATI;


(varianta aleasa de mine)

RENAME SALARIAT WITH SALARIATI;

RENAME TABLE SALARIAT TO TABLE SALARIATI;

RENAME TABLE SALARIAT WITH TABLE SALARIATI;

8. Care este comanda corecta care afiseaza numele si salariul angajatilor condusi direct de Ionescu
Mihai?

SELECT nume, salariu


FROM salariati
WHERE cod_sef = (SELECT cod_angajat FROM salariati
WHERE nume ='Ionescu' AND prenume ='Mihai' );
(varianta aleasa de mine)

SELECT nume, salariu


FROM salariati
WHERE cod_sef = (SELECT cod_angajat FROM salariati
WHERE nume ='Ionescu', prenume ='Mihai' );

SELECT nume, salariu


FROM salariati
WHERE cod_sef = ‘Ionescu Mihai';

SELECT nume, salariu


FROM salariati
WHERE cod_sef != (SELECT cod_angajat FROM salariati
WHERE nume ='Ionescu' AND prenume ='Mihai' );

9. Ce comanda sterge din tabelul SALARIAT COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL
SALARIU not null numeric de 5 sir de caractere de maxim 20 sir caractere de maxim 20 date, valoare
implicita data curentã numeric de 2 sir de caractere de dimensiune fixa, de 30 valoare implicita 0 numar
de 10 cu 2 zecimale coloana nume si coloana salariu?

ALTER TABLE SALARIAT


DROP nume, salariu;

ALTER TABLE SALARIAT


DROP COLUMN (nume, salariu);

ALTER TABLE SALARIAT


DROP (nume, salariu);
(varianta aleasa de mine)
ALTER TABLE SALARIAT
DROP COLUMN nume, COLUMN salariu;

10.Care este comanda corecta care afiseaza numele cititorilor care au carti nerestituite?

SELECT nume_cititor
FROM imprumuta
WHERE data_restituirii = NULL;

SELECT nume_cititor
FROM imprumuta
WHERE data_restituirii IS NOT NULL;

SELECT nume_cititor
FROM imprumuta
WHERE data_restituirii IS NULL;
(varianta aleasa de mine)

SELECT nume_cititor
FROM imprumuta
WHERE data_restituirii > SYSDATE;

11. Care comanda nu defineste corect un tabel?

CREATE TABLE [schema.]nume_tabel (


nume_coloana tip_de_date [DEFAULT expr], ...);

CREATE TABLE nume_tabel [(col1, col2...)]


AS subcerere;
(varianta aleasa de mine)

CREATE TABLE [schema.]nume_tabel (


nume_coloana tip_de_date, [DEFAULT expr], [constrangere_de_coloana], ...);

CREATE TABLE [schema.]nume_tabel (


nume_coloana tip_de_date [DEFAULT expr] [constrangere_de_coloana], ...
..[constrangere la nivel de tabel])

12. Care este comanda corecta care afiseaza numele si salariul angajatilor condusi direct de ‘ENE DAN’?

SELECT nume, salariu


FROM salariati
WHERE cod_manager = (SELECT cod_manager FROM salariati
WHERE UPPER(nume) ='ENE' , UPPER(pren) ='DAN' );

SELECT nume, salariu


FROM salariati
WHERE cod_manager = (SELECT cod_ang FROM salariati
WHERE nume ='ENE' , pren ='DAN' );

SELECT nume, salariu


FROM salariati
(SELECT cod_ang FROM salariati
WHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN' );

SELECT nume, salariu


FROM salariati
WHERE cod_manager = (SELECT cod_ang FROM salariati
WHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN' );
(varianta aleasa de mine)
13. Care comanda listeaza numele tuturor angajatilor care au a treia litera din nume 'a'?

SELECT nume
FROM salariat
WHERE nume LIKE '__a$';

SELECT nume
FROM salariat
WHERE nume LIKE '%a%';

SELECT nume
FROM salariat
WHERE nume LIKE '__a%';
(varianta aleasa de mine)

14.Care este comanda corecta care afiseaza codul departamentelor, numele departamentelor si suma
salariilor pentru fiecare departament?

SELECT cod_departament, nume_departament, SUM(salariu)


FROM salariati s, departamente d
GROUP BY cod_departament, nume_departament;

SELECT cod_departament, nume_departament, SUM(salariu)


FROM salariati s, departamente d
WHERE s.cod_departament=d.cod_departament
GROUP BY cod_departament;
(varianta aleasa de mine)

SELECT cod_departament, nume_departament, SUM(salariu)


FROM salariati s, departamente d
WHERE s.cod_departament=d.cod_departament
GROUP BY cod_departament, nume_departament;

SELECT cod_departament, nume_departament, SUM(salariu)


FROM salariati, departamente
WHERE s.cod_departament=d.cod_departament
GROUP BY cod_departament, nume_departament;

15. Care este comanda corecta care sa afiseze daca exista angajati care nu lucreaza in departamentul
‘Contractari’ si al caror salariu coincide cu salariul unui angajat din departamentul ‘Contractari’?

SELECT nume, salariu, cod_depart


FROM salariati
WHERE salariu IN (SELECT salariu FROM salariati s, department d
WHERE s.cod_depart = d.cod_depart AND nume_depart <> ‘Contractari’)
AND cod_depart= (SELECT cod_depart FROM department
WHERE nume_depart = ‘Contractari’);
(varianta aleasa de mine)

SELECT nume, salariu, cod_depart


FROM salariati
WHERE salariu IS IN (SELECT salariu FROM salariati s, department d
WHERE s.cod_depart = d.cod_depart , nume_depart = ‘Contractari’)
AND cod_depart<> (SELECT cod_depart FROM department
WHERE nume_depart = ‘Contractari’);

SELECT nume, salariu, cod_depart


FROM salariati
WHERE (salariu) IN (SELECT salariu FROM salariati s, department d
WHERE s.cod_depart = d.cod_depart AND nume_depart = ‘Contractari’)
AND cod_depart<> (SELECT cod_depart FROM department
WHERE nume_depart = ‘Contractari’);
16. Constringerea NOT NULL poate fi adaugata utilizind o comanda ALTER
TABLE…. ADD CONSTRAINT?
A - (varianta aleasa de mine)

17.O constrangere de tip PRIMARY KEY poate fi declarata numai la nivel de coloana
A - (varianta aleasa de mine)

18.Efectele unei comenzi DDL pot fi anulate cu o comanda ROLLBACK


F - (varianta aleasa de mine)

19.Care este comanda corecta care se afiseaza numele si prenumele pentru toti angajatii cu varsta
necunoscuta?

SELECT nume, prenume


FROM salariat
WHERE varsta=NULL;

SELECT nume, prenume


FROM salariat
WHERE varsta IS NULL;
(varianta aleasa de mine)

SELECT nume, prenume


FROM salariat
WHERE varsta=0;

SELECT nume, prenume


FROM salariat
WHERE varsta IS NOT NULL;

20.Care este comanda corecta care afiseaza numele si data angajarii pentru salariatii care au fost
angajati dupa angajatul avand codul 10, in ordine descrescatoare a numelui?

SELECT nume, data_angajarii


FROM salariat
WHERE data_angajarii >
(SELECT data_angajarii FROM salariat WHERE cod_angajat = 10);

SELECT nume, data_angajarii


FROM salariat
WHERE data_angajarii >
(SELECT data_angajarii FROM salariat WHERE cod_angajat = 10)
ORDER BY nume;

SELECT nume, data_angajarii


FROM salariat
WHERE data_angajarii >
(SELECT data_angajarii FROM salariat WHERE cod_angajat = 10)
ORDER BY nume DESC;
(varianta aleasa de mine)

SELECT nume, data_angajarii


FROM salariat
WHERE data_angajarii >
(SELECT * FROM salariat WHERE cod_angajat = 10)
ORDER BY nume DESC;
SGBD 2010
1. Care este varianta corecta pentru declararea urmatoarelor variabile?

a. v_valoare NUMBER(15) NOT NULL := 0; %TYPE trebuie aplicata pe


v_data_achizitie DATE DEFAULT SYSDATE; variabila, coloana, camp sau
c_valoare CONSTANT NUMBER:=1000; atribut nu pe opere
v_cod_oper opere%TYPE;
b. v_valoare NUMBER(15) NOT NULL;
v_data_achizitie DATE DEFAULT SYSDATE; A fost intalnit simbolul opere
c_valoare CONSTANT NUMBER; cand era asteptata una din
v_cod opera opere.cod_opera%TYPE; urmatoarele
c v_valoare NUMBER(15) NOT NULL := 0;
v_data_achizitie DATE DEFAULT SYSDATE;
c_valoare CONSTANT NUMBER:= 1000;
v_ cod_opera opere.cod_opera%TYPE;

2. Care din urmatoarele declaratii de valabilitate este corecta?

a. v_id_student NUMBER(5);
v_nume_student VARCHAR2(35) NOT NUL:=Ionescu; Identificatorul Ionescu
v_prenume_student CHAR(20); trebuia declarat
v_data DATE DEFAULT SYSDATE;
b. v_id_student NUMBER(5);
v_nume_student VARCHAR2(35) NOT NUL:=’Ionescu’;
v_prenume_student studenti.prenume%TYPE;
v_data DATE:=SYSDATE+1;
c. v_id_student NUMBER(2):=150;
v_nume_student studenti.nume%ROWTYPE:=’Ionescu’; Cu indicatorul %ROWTYPE
v_prenume_student CHAR(20); numiti tabela, cursor sau un
v_data DATE:=SYSDATE+1; indicativ cursor

3. Se da urmatorul bloc PL/SQL:

DECLARE
carte VARCHAR2(20);
autor VARCHAR(15) DEFAULT 'Eminescu' ;
BEGIN
DBMS_OUTPUT.PUT_LINE(carte||' '||autor);
END;

Care din urmatoarele afirmatii este corecta?

a. Se va returna o eroare, deoarece variabila carte este utilizata nefiind initializata.


b. Se va returna o eroare, deoarece nu se poate utiliza clauza DEFAULT pentru a initializa o
variabila de tip VARCHAR2.
c. Blocul se executa fara erori si afiseaza 'null Eminescu'.
d. Blocul se executa fara erori si afiseaza 'Eminescu'
4. Se da urmatorul bloc PL/SQL:

DECLARE
nume VARCHAR2(15);
v_nr INTEGER;
BEGIN
SELECT LENGTH(nume) INTO v_nr
FROM dual;
DBMS_OUTPUT.PUT_LINE('Sirul are '||v_nr||'caractere');
END;

Care din urmatoarele afirmatii este adevarata?

a. Va fi generata o eroare deoarece variabila nume este utilizata nefiind initializata.


b. Blocul se executa fara erori si afisaza 'Sirul are caractere').
c. Blocul se executa fara erori si afisaza 'Sirul are 0 caractere').
d. Va fi generata o eroare deoarece variabila v_nr este utilizata nefiind initializata

5. Se da urmatorul bloc PL/SQL

DECLARE
v_salariu NUMBER(8):=&p_salariu;
v_bonus NUMBER(8);
v_salariu_anual NUMBER(8);
BEGIN
v_salariu_anual:=v_salariu*12;
IF v_salariu_anual>=20000
THEN v_bonus:=0.01 * v_salariu_anual;
ELSIF v_salariu_anual >10000 AND v_salariu_anual <20000
THEN v_bonus:=0.02* v_salariu_anual;
ELSE v_bonus:=100;
END IF;
DBMS_OUTPUT.PUT_LINE(Bonusul este'|| v_bonus);
END;

Care din urmatoarele afirmatii nu este corecta?

a. Blocul genereaza o eroare, deoarece variabila p_salariu nu este initializata.


b. Variabila p_salariu reprezinta o variabila de substitutie, a carei valoare poate fi data prin
utilizarea comenzii DEFINE din SQL*PLUS.
c. Blocul se executa fara erori, asteptandu-se introducerea de la tastatura a unei valori pentru
variabila p_salariu,daca nu a fost deja data o valoare pentru aceasta.
d. Daca valoarea variabilei v-salariu este 500, atunci blocul se executa fara erori si afiseaza
textul 'Bonusul este 100'.
6. Se da urmatorul bloc PL/SQL:

BEGIN
SELECT nume_job
INTO :rezultat
FROM angajat a, joburi b
WHERE a.id_job=b.id_job
AND id_angajat=100;
DBMS_OUTPUT_LINE('Numele jobului este'|| :rezultat);
END;

Care din urmatoarele afirmatii este adevarata?

a. Blocul se executa fara erori si afisaza numele jobului angajatului avand codul 100.
b. Executia blocului se incheie cu o eroare, deoarece variabila de legatura rezultat nu este
declarata in afara blocului PL/SQL.
c. Executia blocului se incheie cu o eroare, deoarece utilizarea clauzei INTO a comenzii
SELECT nu este corecta.
d. Valoarea variabilei de legatura rezultat nu poate fi afisata decat din interiorul blocului
PL/SQL.

7. Se da urmatorul bloc PL/SQL:

DECLARE
v_cod_sal angajati.id_angajat%TYPE:= 100;
v_cod_dept angajati.id_departament%TYPE:= 10;
v_procent NUMBER(8):=20;
BEGIN
UPDATE angajati
SET id_departament = v_cod_dept,
salariu=salariu + (salariu* v_procent/100)
WHERE id_angajat = v_cod_sal;
IF SQL%ROWCOUNT = 0 THEN
DBMS_OUTPUT.PUT_LINE (‘Nu exista un angajat cu acest cod’);
ELSE
COMMIT;
DBMS_OUTPUT.PUT_LINE (‘Actualizare realizata’);
END IF;
END;

Care dintre urmatoarele afirmatii este adevarata?

a. Executia blocului se incheie cu o eroare, deoarece comanda clauza SET a comenzii UPDATE
este utilizata gresit.
b. Executia blocului se incheie cu o eroare, deoarece comanda COMMIT nu poate fi utilizata
intr-un bloc PL/SQL.
c. Executia blocului se incheie cu o eroare, deoarece metoda ROWCOUNT este utilizata pentru
un cursor nedeclarat.
d. Blocul se va executa fara erori si afiseaza mesajul ‘Nu exista un angajat cu acest cod’ daca
angajatul avand codul 100 nu exista in tabelul angajati sau mesajul ‘Actualizare realizata’ in
caz contrar.
8. Variabila g_mesaj declarata ca mai jos este:

VARIABLE g_mesaj VARCHAR2 (50)


BEGIN
:g_mesaj := ‘Invat PL/SQL;
END;

a. Variabila de substitutie.
b. De tip record.
c. Variabila de legatura.
d. De tip varray.

9. Care este varianta corecta pentru afisarea variabilei v_mesaj ?

a. VARIABLE v_mesaj VARCHAR2 (50)


A fost intalnit simbolul v_mesaj cand era
BEGIN asteptat := etc
:v_mesaj := ‘Invat PL/SQL’;
PRINT v_mesaj;
END;
/
b. VARIABLE v_mesaj VARCHAR2 (30)
BEGIN
:v_mesaj := ‘Invat PL/SQL’;
END;
/
c. VARIABLE v_mesaj VARCHAR2 (50)
Identificatorul v_mesaj trebuia declarat
BEGIN
:v_mesaj := ‘Invat PL/SQL’;
DBMS_OUTPUT.PUT_LINE ( v_mesaj);
END;
/

10. Blocul urmator afiseaza:

DECLARE
v_x NUMBER(9,2):=10;
v_y NUMBER(9,2);
v_message VARCHAR2(20);
BEGIN
v_y:= NULL;
IF v_x !=v_y THEN
v_message := ‘ NOT EQUAL’;
ELSE v_message := ‘EQUAL’;
END IF;
DBMS_OUTPUT.PUT_LINE(v_message);
END;

a. NOT EQUAL
b. EROARE
c. EQUAL
d. NIMIC
11. Pentru ca urmatorul bloc PL/SQL sa fie corect trebuie adaugat la linia 8 urmatorul cod:

SQL > DECLARE


2 TYPE ang_record_type IS RECORD (
3 nume VARCHAR2(20),
4 departament NUMBER);
5 ang_record ang_record_type;
6 BEGIN
7 SELECT nume, id_departament
8
9 FROM angajati WHERE id_angajat = 100;
11 DBMS_OUTPUT.PUT_LINE (‘Nume’ || ang_record.nume ||’ Departament ‘ ||
13 ang_record.departament);
14 END;

a. INTO ang_record_type%type
b. INTO ang_record_type%rowtype
c. INTO ang_record_type
d. INTO ang_record

12. Pentru ca urmatorul bloc PL/SQL sa fie corect si sa afiseze codul, salariatul si jobul angajatului cu
codul 100, trebuie adaugat la linia 10 urmatorul cod:

SQL> DECLARE
2 TYPE type_ang IS RECORD (
3 ang_cod angajati.id_angajat%TYPE,
4 sal angajati.salariu%TYPE,
5 job angajati.id_job%TYPE);
6 v_ang type_ang;
7 BEGIN
8 DELETE FROM angajati
9 WHERE id_angajat=100
10
11 INTO v_ang;
12 DBMS_OUTPUT.PUT_LINE (‘ Angajatul cu codul :’|| v_ang.ang_cod ||
13 ‘ si jobul ‘ || v_ang.job || ‘ are salariul ‘ || v_ang.sal);
14 END;

a. RETURNING angajati%rowtype
b. RETURNING id_angajat, RETURNING salariu, RETURNING id_job
c. RETURNING id_angajat, salariu, id_job
d. RETURNING v_ang
13. Pentru ca urmatorul bloc PL/SQL sa fie corect trebuie adaugat la linia 6 urmatorul cod:

1 DECLARE
2 TYPE typetablou IS TABLE OF NUMBER;
3 tablou typetablou:= typetablou();
4 BEGIN
5 FOR i IN 1..10 LOOP
6
7 tablou(i) :=i;
8 END LOOP;
9 END;

a. tablou.EXTEND;
b. tablou:= typetablou();
c. tablou(i):= typetablou();
d. tablou(i).NEXT;

14. Care dintre urmatoarele blocuri se executa cu erori?

a. declare
alfa interval year to month;
begin
alfa :=interval ‘2 - 5’ year to month;
DBMS_OUTPUT.PUT_LINE(‘alfa = ‘|| alfa);
end;
b. declare
alfa interval year to month;
begin
alfa :=interval ‘8’ month;
DBMS_OUTPUT.PUT_LINE(‘alfa = ‘|| alfa);
end;
c. declare
alfa interval year to month;
begin
alfa := ‘20 - 10’;
DBMS_OUTPUT.PUT_LINE(‘alfa = ‘|| alfa);
end;
d. declare
alfa interval month; A fost intalnit simbolul month
begin cand era asteptat := etc
alfa :=interval ‘8’ month;
DBMS_OUTPUT.PUT_LINE(‘alfa = ‘|| alfa);
end;
15. Ce comanda SQL*Plus ar putea sa preceada blocul de mai jos pentru ca in acesta sa se utilizeze
valoarea data variabilei sem?

DECLARE
v_sem CHAR(2):=UPPER(‘&sem’);
BEGIN
CASE v_sem
WHEN ‘I’ THEN DBMS_OUTPUT.PUT_LINE(‘SEMESTRUL I’);
WHEN ‘II’ THEN DBMS_OUTPUT.PUT_LINE(‘SEMESTRUL II’);
ELSE DBMS_OUTPUT.PUT_LINE(‘este o eroare!’);
END CASE;
END;

a. ACCEPT sem PROMPT ‘sem=’


b. VARIABLE sem=li
c. DEFINE sem
d. TYPE SEM=i

16. Sa se introduca in tabelul testare(cod NUMBER(2)) 5 inregistrari, avand codurile egale cu 1, 2, 3, 4


respectiv 5. Care din urmatoarele variante nu executa acest deziderat?

a. DECLARE
v_contor NUMBER(2) := 1;
BEGIN
LOOP
INSERT INTO testare VALUES (v_contor);
v_contor :=v_contor + 1;
EXIT WHEN v_contor > 5;
END LOOP;
END;
b. DECLARE
v_contor NUMBER(2) := 1;
BEGIN
WHILE v_contor < 6 LOOP
INSERT INTO testare VALUES (v_contor);
v_contor :=v_contor + 1;
END LOOP;
END;
c. DECLARE
v_contor NUMBER(2) := 1; Introduce valorea 1 de 5 ori
BEGIN
FOR i IN 1…5 LOOP
INSERT INTO testare VALUES (v_contor);
END LOOP;
END;
d. BEGIN
FOR i IN 1…5 LOOP
INSERT INTO testare VALUES (i);
END LOOP;
END;
17. Se da urmatorul bloc PL/SQL
DECLARE
TYPE tabimb IS TABLE OF VARCHAR2(50);
tab1 tabimb;
tab2 tabimb:= tabimb ();
BEGIN
IF tab1 IS NULL THEN
DBMS_OUTPUT.PUT_LINE(‘tab1 este NULL’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘tab1 este NOT NULL’);
END IF;
IF tab2 IS NULL THEN
DBMS_OUTPUT.PUT_LINE(‘tab2 este NULL’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘tab2 este NOT NULL’);
END IF;
END;
In urma executiei acestui bloc se obtine urmatorul rezultat:

a. tab1 este NOT NULL


tab2 este NOT NULL
b. tab1 este NULL
tab2 este NOT NULL
c. EROARE
d. tab1 este NULL
tab2 este NULL

18. Se da urmatorul bloc PL/SQL

DECLARE
TYPE tablou_numar IS TABLE OF NUMBER
INDEX BY PLS_INTEGER;
v_tablou tablou_numar;
BEGIN
FOR i IN 1...10 LOOP
v_tablour(i) := i*i*i;
END LOOP;
FOR i IN v_tablou.FIRST..v_tablou.LAST LOOP
v_tablour(i) := NULL;
END LOOP;
DBMS_OUTPUT.PUT_LINE(‘tabloul are ‘ || v_tablou.COUNT || ‘elemente’);
v_tablou.delete;
DBMS_OUTPUT.PUT_LINE(‘tabloul are ‘ || v_tablou.COUNT || ‘elemente’);
END;
In urma executiei blocului se obtine urmatorul rezultat:

a. tabloul are 10 elemente


tabloul are 10 elemente
b. Eroare
c. tabloul are 10 elemente
tabloul are 0 elemente
d. tabloul are 0 elemente
tabloul are 0 elemente
19. Care este varianta corecta pentru a defini un tablou imbricat de numere care are ca elemente
primele 10 numere naturale?

a. DECLARE
TYPE tablou IS TABLE OF NUMBER;
tab tablou:= tablou();
BEGIN
FOR i IN 1…10 LOOP
tab.NEXT(i)
tab(i) := i;
END LOOP;
END;
b. DECLARE
TYPE tablou IS TABLE OF NUMBER;
tab tablou:= tablou();
BEGIN FOR i IN 1…10 LOOP
tab.EXTEND; tab(i) := i;
END LOOP;
END;
c. DECLARE
TYPE tablou IS TABLE OF NUMBER;
tab tablou:= tablou();
BEGIN
FOR i IN 1…10 LOOP
tab(i) := tab(i) + i;
END LOOP;
END;
d. DECLARE
TYPE tablou IS TABLE OF NUMBER;
tab tablou:= tablou();
BEGIN
FOR i IN 1…10 LOOP
tab(i) := i;
END LOOP;
END;

20. Care este varianta de bloc PL/SQL corecta pentru a mentine intr-un vector codurile angajatilor care
au salariul mai mic decat 20000 si lucreaza in departamentul 90?

a. DECLARE
TYPE t_id IS VARRAY(100) OF angajati.id_angajat%TYPE;
v_id t_id :=t_id();
BEGIN
SELECT id_angajat INTO v_id
FROM angajati
WHERE id_departement=90 AND salariu < 20000;
END;
b. DECLARE
TYPE t_id IS VARRAY(100) OF angajati.id_angajat%TYPE;
v_id t_id :=t_id();
BEGIN
SELECT id_angajat BULK COLLECT INTO v_id
FROM angajati
WHERE id_departament=90 AND salariu < 20000;
END;
c. DECLARE
TYPE t_id IS VARRAY(100) OF angajati.id_angajat%TYPE;
v_id t_id :=t_id;
BEGIN
SELECT id_angajat BULK COLLECT INTO t_id
FROM angajati
WHERE id_departement=90 AND salariu < 20000;
END;

21. Care este varianta corecta de cod PL/SQL care sterge din tabelul joburi, joburile pentru care
salariul minim este 4000 sau 8200, daca aceste valori sunt mentinute intr-un vector?

a. DECLARE
TYPE min_sal IS VARRAY(20) OF NUMBER;
v_min_sal min_sal:=min_sal(4000,8200);
BEGIN
FORALL i IN v_min_sal.FIRST..v_min_sal. LAST
DELETE FROM joburi
WHERE salariu_min=v_min_sal(i);
END;
b. DECLARE
TYPE min_sal IS VARRAY(20) OF NUMBER;
v_min_sal min_sal:=min_sal(4000,8200);
BEGIN
FOR i IN v_min_sal.FIRST..v_min_sal. LAST
DELETE FROM joburi
WHERE salariu_min=v_min_sal(i);
END;
c. DECLARE
TYPE min_sal IS VARRAY(20) OF NUMBER;
v_min_sal min_sal;
BEGIN
FORALL i IN v_min_sal.FIRST..v_min_sal. LAST
DELETE FROM joburi
WHERE salariu_min=v_min_sal(i);
END;

22. Care este varianta corecta prin care se adauga in tabelul angajati un nou camp numit telefon de
tip tablou imbricat, pt care se vor stoca pt fiecare salariat numerele sale de telefon, si apoi se insereaza o
linie noua in tabel?
a. CREATE TYPE lista AS TABLE OF VARCHAR2(20);
ALTER TABLE angajati
ADD (telefon lista) NESTED TABLE telefon STORE AS tabel_tel;
INSERT INTO angajati
VALUES(200,’xxx’,4000,40000,lista(0214567898,0214567899));
b. CREATE TYPE lista AS TABLE OF VARCHAR2(20);
ALTER TABLE angajati
ADD telefon lista;
INSERT INTO angajati
VALUES(200,’xxx’,4000,40000,lista(0214567898,0214567899));
c. CREATE TYPE lista AS TABLE OF VARCHAR2(20);
ALTER TABLE angajati
ADD (telefon lista) NESTED TABLE telefon STORE AS tabel_tel;
INSERT INTO angajati telefon
VALUES((lista(0214567897,0214567898,0214567899));
23. Care este varianta corecta prin care se incarca date dintr-un cursor intr-o colectie?
RASPUNSUL CORECT ESTE d. NU ESTE PRINS IN GRILA…

a. DECLARE
TYPE tip_job IS TABLE OF joburi.nume_job%TYPE;
v_nume tip_job;
CURSOR c_joburi IS SELECT nume_job FROM joburi;
BEGIN
OPEN c_joburi;
SELECT c_joburi INTO v_nume;
CLOSE c_joburi;
END;
b. DECLARE
TYPE tip_job IS TABLE OF joburi.nume_job%TYPE;
v_nume tip_job;
CURSOR c_joburi IS SELECT nume_job FROM joburi;
BEGIN
OPEN c_joburi;
FETCH c_joburi BULK COLLECT INTO v_nume;
CLOSE c_joburi;
END;
c. DECLARE
TYPE tip_job IS TABLE OF joburi.nume_job%TYPE;
v_nume tip_job;
CURSOR c_joburi IS SELECT nume_job FROM joburi;
BEGIN
OPEN c_joburi;
FETCH c_joburi INTO v_nume;
CLOSE c_joburi;
END;

24. Care este varianta incorecta prin care se obtin numele si salariul angajatilor care au salariul mai
mic decat 2500 si nu lucreaza in departamentul avand codul 80?

a. DECLARE
v_nume angajati.nume%TYPE;
v_sal angajati.salariu%TYPE;
CURSOR c(var_sal NUMBER, var_dept NUMBER) IS
SELECT nume, salariu
FROM angajati
WHERE salariu<var_sal AND id_departament<>var_dept;
BEGIN
OPEN c(2500,80);
LOOP
FETCH c INTO v_nume, v_sal;
EXIT WHEN c%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(‘Salariatul ’||v_nume||’ are salariul ‘|| v_sal);
END LOOP;
CLOSE c;
END;
b. DECLARE
v_sal :=2500;
v_dept := 80;
BEGIN
FOR ind IN (SELECT nume, salariu
FROM angajati
WHERE salariu<var_sal AND id_departament<>var_dept) LOOP
DBMS_OUTPUT.PUT_LINE(‘Salariatul ’||ind_nume||’ are salariul ‘|| ind_salariu);
END LOOP;
END;
c. DECLARE
CURSOR c(var_sal NUMBER, var_dept NUMBER) IS
SELECT nume, salariu
FROM angajati
WHERE salariu<var_sal AND id_departament<>var_dept;
BEGIN
FOR ind IN c(2500,80) LOOP
DBMS_OUTPUT.PUT_LINE(‘Salariatul ’||ind_nume||’ are salariul ‘|| ind_salariu);
END LOOP;
END;

25. Care este varianta corecta prin care se afiseaza numele si prenumele primelor 5 persoane angajate
in luna martie in anul 1997?

a. DECLARE
v_nume angajati.nume%TYPE; v_prenume angajati.prenume%TYPE;
CURSOR c IS
SELECT nume, prenume FROM angajati
WHERE TO_CHAR(data_angajarii, MM-YYYY)=03-1997
ORDER BY data_angajarii ASC; YYYY Indicator nevalid
BEGIN
OPEN c;
LOOP
FETCH c INTO v_nume, v_prenume;
EXIT WHEN c%ROWCOUNT>5;
DBMS_OUTPUT.PUT_LINE(v_nume||’ ‘|| v_prenume);
END LOOP;
CLOSE c;
END;
b. DECLARE
v_nume angajati.nume%TYPE; v_prenume angajati.prenume%TYPE;
CURSOR c IS
SELECT nume, prenume FROM angajati
WHERE TO_CHAR(data_angajarii, ‘MM-YYYY’)=’03-1997’
ORDER BY data_angajarii;
BEGIN
OPEN c;
LOOP
FETCH c INTO v_nume, v_prenume;
EXIT WHEN c%ROWCOUNT>5 OR c%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_nume||’ ‘|| v_prenume);
END LOOP;
CLOSE c;
END;
c. DECLARE
v_nume angajati.nume%TYPE; v_prenume angajati.prenume%TYPE;
CURSOR c IS
SELECT nume, prenume FROM angajati
WHERE TO_CHAR(data_angajarii, ‘MM-YYYY’)=’03-1997’
ORDER BY data_angajarii DESC;
BEGIN Aici sqlplus se inteapa
OPEN c;
LOOP
FETCH c INTO v_nume, v_prenume;
EXIT WHEN c%ROWCOUNT<5 AND c%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_nume||’ ‘|| v_prenume);
END LOOP;
END;

26. Se da urmatorul bloc PL/SQL:

DECLARE
v_nume angajati.nume%TYPE;
v_data angajati.data_angajarii%TYPE;
CURSOR c IS
SELECT nume, data_angajarii
FROM angajati;
BEGIN
OPEN c;
LOOP
INSERT INTO informatii (nume_angajat, data_angajarii)
VALUES (v_nume, v_data);
EXIT WHEN c%NOTFOUND;
END LOOP;
COMMIT;
END;

Care dintre urmatoarele afirmatii este adevarata?

a. Blocul se executa fara erori, introducandu-se in tabelul informatii o linie cu toate valorile
La mine
null , respectiv toate liniile din tabelul angajati
se
b. Executia blocului se incheie cu o eroare, deoarece cursorul c nu este inchis dupa ce este
inteapa si
utilizat
sqlplus si
c. Executia blocului se incheie cu o eroare, deoarece utilizarea comenzii COMMIT nu este
sql
permisa in interiorul unui bloc PL/SQL
developer
d. Blocul se executa fara erori, introducandu-se in tabelul informatii toate liniile din tabelul
angajati

27. Parametrii unei functii pot fi:

a. De intrare (IN), de intrare/iesire (IN/OUT) sau de iesire (OUT)


b. Numai de intrare (IN)
c. Numai de iesire (OUT)
d. De intrare (IN) sau de iesire (OUT)
28. Care dintre urmatoarele variante apeleaza corect functia F_TEST care are un singur parametru
numeric?

a. SELECT F_TEST (80)


FROM DUAL ;
b. DECLARE
nr NUMBER;
BEGIN
Nr:=F_TEST();
END;
c. VARIABLE nr NUMBER
CALL F_TEST () INTO:nr;
PRINT nr
d. VARIABLE nr NUMBER
CALL FUNCTION F_TEST (80) INTO:nr;
PRINT nr

29. Care dintre urmatoarele vizualizari poate fi folosita in urmatoarea comanda pentru a vizualiza
codul complet al subprogramului P1:

SELECT TEXT
FROM ….
WHERE NAME = UPPER(’P1’);

a. USER_OBJECTS
b. USER_ERRORS
c. USER_FUNCTIONS
d. USER_SOURCE

30. Ce trebuie adaugat la linia 9 pentru ca urmatoarea functie sa fie corect creata?

1. CREATE OR REPLACEFUNCTION nr_sal(v_dept NUMBER)


2. RETURN NUMBER IS
3. v_numar NUMBER(3);
4. BEGIN
5. SELECT COUNT(*)
6. INTO v_numar
7. FROM angajati
8. WHERE id_departament=v_dept;
9. ………………………………………………………..
10. END nr_sal;

a. DBMS_OUTPUT.PUT_LINE(v_numar);
b. COMMIT;
c. RETURN v_numar;
d. nu mai trebuie adaugat nimic.
31. Se da functia de mai jos ,care permite calcularea unui impozit pe salariu de 10%.

CREATE FUNCTION impozit(p_value IN NUMBER)


RETURN NUMBER IS
BEGIN
RETURN(p_value*0.1);
END impozit;
Care este sintaxa corecta pentru a apela aceasta functie?

a. SELECT id_angajat, nume, salariu, impozit tax Tipuri de argument sau numar
FROM angajati gresit in apelarea lui impozit
WHERE id_departament=50;
b. VARIABILE tax:=impozit(salariu)
SELECT id_angajat, nume, salariu, tax Inceput de comanda
necunoscut VARIABILE,
FROM angajati
Identificator tax nevalid
WHERE id_departament=50;
c. SELECT id_angajat, nume, salariu, impozit(salariu) tax
FROM angajati
WHERE id_departament=50;
d. DECLARE:tax NUMBER
A fost intalnit simbolul end of file
BEGIN cand se asteptau .....
:tax:= impozit(salariu);

32. Care tabel/vizualizare poate fi folosit/folosita in urmatoarea comanda pentru a obtine informatii
despre procedurile si functiile detinute de utilizatorul curent?
SELECT *
FROM …..
WHERE OBJECT_TYPE IN (‘PROCEDURE’ , ‘FUNCTION’);

a. USER_SOURCE Aici la a imi arata doar proceduri si functii (listeaza si codul)


b. DUAL La d include si tabelele mele (adica cam toate obiectele
c. USER_ERRORS utilizatorului meu)
d. USER_OBJECTS

33. Codul sursa de mai jos defineste un pachet cu ajutorul caruia, utilizand un subprogram functie si un
cursor, se poate obtine salariul minim inregistrat pentru angajati si lista angajatilor care au salariul mai
mare sau egal decat acel minim +1000.

CREATE OR REPLACE PACKAGE pachet_min_sal AS


CURSOR c_ang(nr NUMBER) RETURN angajati % ROWTYPE;
FUNCTION f_min RETURN NUMBER ;
END pachet_min_sal;
CREATE OR REPLACE PACKAGE BODY pachet_min_sal AS
CURSOR c_ang(nr NUMBER) RETURN angajati % ROWTYPE IS
SELECT * FROM angajati WHERE salariu >nr+1000;
FUNCTION f_min
RETURN NUMBER IS
minim NUMBER ;
BEGIN
SELECT Min(salariu) INTO minim FROM angajati;
RETURN minim;
END f_min;
END pachet_min_sal;
Care este varianta corecta de apelare pentru a obtine lista dorita?

a. DECLARE
val_min NUMBER ;
BEGIN
val_min:=pachet_min_sal.f_min;
DBMS_OUTPUT.PUT_LINE(‘Salariul minim ’ || ’ ‘ || val_min);
FORv_cursor IN pachet_min_sal .c_ang(val_min)LOOP
DBMS_OUTPUT.PUT_LINE(v_cursor.nume||’ ‘|| v_cursor.salariu);
END LOOP;
END;
b. DECLARE
val_min NUMBER ;
BEGIN
DBMS_OUTPUT.PUT_LINE(‘Salariul minim ’ || ’ ‘ || val_min);
FORv_cursor IN pachet_min_sal .c_ang(val_min)LOOP
DBMS_OUTPUT.PUT_LINE(v_cursor.nume||’ ‘|| v_cursor.salariu);
END LOOP;
END;
c. DECLARE
val_min NUMBER ;
BEGIN
val_min:=pachet_min_sal.f_min;
DBMS_OUTPUT.PUT_LINE(‘Salariul minim ’ || ’ ‘ || val_min);
FORv_cursor IN pachet_min_sal .c_ang(val_min)
DBMS_OUTPUT.PUT_LINE(v_cursor.nume||’ ‘|| v_cursor.salariu);
END;

34. Care este varianta corecta pentru a crea specificatia unui pachet, care defineste un cursor pentru
obtinerea datelor si o procedura ce actualizeaza campul id_job al unui angajat cu un anumit cod?

a. CREATE OR REPLACE PACKAGE manager_pkg IS


CURSOR joburi_curs IS
SELECT id_angajat, id_job FROM angajati;
PROCEDURE update_job(p_ang_id IN angajati.id_angajat%TYPE,
P_id_job OUT angajati.id_job%TYPE);
END update_job;
END manager_pkg;
b. CREATE OR REPLACE PACKAGE manager_pkg IS
CURSOR joburi_curs IS
SELECT id_angajat, id_job FROM angajati;
PROCEDURE update_job(p_ang_id IN angajati.id_angajat%TYPE,
P_id_job IN angajati.id_job%TYPE);
END manager_pkg;
c. CREATE OR REPLACE PACKAGE manager_pkg IS
CURSOR joburi_curs IS
SELECT id_angajat, id_job FROM angajati;
PROCEDURE update_job(p_ang_id IN angajati.id_angajat%TYPE,
P_id_job OUT angajati.id_job%TYPE);
END manager_pkg;
35. Ce trebuie adaugat la linia 11 pentru ca in urmatorul bloc PL/SQL sa se foloseasca corect cursorul?

1 DECLARE
2 CURSOR c_ang IS
3 SELECT *
4 FROM angajati
5 WHERE TO_CHAR(data_angajarii,’YYYY’)=2000
6 FOR UPDATE OF salariu NOWAIT;
7 BEGIN
8 FOR v_c_ang IN c_ang LOOP
9 UPDATE angajati
10 SET salariu=salariu+1000
11 ………………………..
12 END LOOP;
13 END;

a. END UPDATE;
b. WHERE CURRENT OF c_ang;
c. FOR EACH ROW
d. EXIT WHEN c_ang%NOTFOUND;

36. In blocul PL/SQL de mai jos

VARIABLE rows_deleted VARCHAR(20)


DECLARE
v_dep_id angajati.id_departament%TYPE:=80;
BEGIN
DELETE FROM angajati
WERE id_departament=v_dep_id;
:rows_deleted:=SQL%ROWCOUNT||’rows deleted’;
END;
/
PRINT rows_deleted

apare:

a. un cursor explicit
b. nu apare nici un cursor
c. un cursor implicit
d. un ciclu cursor cu subcereri

37. Care dintre urmatoarele afirmatii nu este corecta?

a. Un trigger poate fi redenumit utilizand o comanda ALTER TRIGGER.


b. Dupa ce este definit, triggerul devine activ si va fi executat ori de cate ori au loc operatiile
declansatoare asociate acestuia.
c. Un trigger poate fi recompilat utilizand o comanda ALTER TRIGGER.
d. Un trigger la nivel de linie este executat o singura data, indiferent de numarul de linii afectate
de comanda declansatoare.
38. Care dintre urmatoarele afirmatii este corecta?

a. Blocul PL/SQL care descrie actiunea unui trigger nu poate contine comanda COMIT.
b. Corpul unui trigger nu poate contine comenzi LMD.
c. Atunci cand un tabel este sters, triggeri asociati acestuia sunt dezactivati automat, nefiind
eliminati.
d. In clauza ON din definitia unui trigger pot fi specificate mai multe tabele sau vizualizari.

39. Se presupune ca asupra tabelului angajati au fost definiti urmatorii 4 triggeri LMD:

- trigger 1 de tip BEFORE INSERT la nivel de comanda;


- trigger 2 de tip BEFORE UPDATE la nivel de comanda;
- trigger 3 de tip AFTER UPDATE la nivel de linie;
- trigger 4 de tip AFTER DELETE la nivel de comanda.

O comanda UPDATE actualizeaza 3 inregistrari din tabelul angajati. In acest caz, de cate ori este
executat fiecare trigger (in dreptul numelui triggerului este trecut numar de executii al acestuia)?

a. Trigger1 - 1
Trigger2 - 1
Trigger3 - 3
Trigger4 - 1
b. Trigger1 - 0
Trigger2 - 3
Trigger3 - 3
Trigger4 - 0
c. Trigger1 - 0
Trigger2 - 1
Trigger3 - 3

40. Care este varianta corecta care defineste un trigger la nivel de comanda ce determina inserarea in
tabelul audit_angajati a unui mesaj corespunzator tipului de comanda LMD executata asupra tabelului
angajati?

a. CREATE TRIGGER trigger_audit_angajati


AFTER INSERT OR DELETE OR UPDATE ON audit_angajati
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO audit_angajati (actiune)
VALUES (:NEW.INSERT);
ELSIF DELETING THEN
INSERT INTO audit_angajati (actiune)
VALUES (:OLD.DELETE);
ELSE
INSERT INTO audit_angajati (actiune)
VALUES (:NEW.UPDATE’);
END IF;
END;
b. CREATE TRIGGER trigger_audit_angajati
AFTER INSERT OR AFTER DELETE OR AFTER UPDATE ON angajati
BEGIN
IF INSERTING THEN
INSERT INTO audit_angajati (actiune)
VALUES (‘Inserare’);
ELSIF DELETING THEN
INSERT INTO audit_angajati (actiune)
VALUES (‘Stergere’);
ELSE
INSERT INTO audit_angajati (actiune)
VALUES (‘Actualizare’);
END IF;
END;
c. CREATE TRIGGER trigger_audit_angajati
AFTER INSERT OR DELETE OR UPDATE ON angajati
BEGIN
IF INSERTING THEN
INSERT INTO audit_angajati (actiune)
VALUES (‘Inserare’);
ELSIF DELETING THEN
INSERT INTO audit_angajati (actiune)
VALUES (‘Stergere’);
ELSE
INSERT INTO audit_angajati (actiune)
VALUES (‘Actualizare’);
END IF;
END;

41. Se defineste un trigger care determina inserarea unei linii in tabelul angajati_log atunci cand
salariul unui angajat este marit. Care dintre urmatoarele variante este corecta?

a. CREATE TRIGGER trigger_salariu


AFTER UPDATE OF salariu ON angajati
FOR EACH ROW
BEGIN
IF :NEW.salariu>:OLD.salariu THEN
INSERT INTO angajati_log (utilizator, data, angajat, salariu_vechi, salariu_nou)
VALUES (USER, SYSDATE, :OLD.id_angajat, :OLD.salariu, :NEW.salariu);
END IF;
END;
b. CREATE TRIGGER trigger_salariu
AFTER UPDATE OF salariu ON angajati
WHEN (:NEW.salariu>:OLD.salariu)
BEGIN
INSERT INTO angajati_log (utilizator, data, angajat, salariu_vechi, salariu_nou)
VALUES (USER, SYSDATE, :OLD.id_angajat, :OLD.salariu, :NEW.salariu);
END;
c. CREATE TRIGGER trigger_salariu
BEFORE UPDATE OF salariu ON angajati_log
FOR EACH ROW
BEGIN
IF NEW.salariu>OLD.salariu THEN
INSERT INTO angajati_log (utilizator, data, angajat, salariu_vechi, salariu_nou)
VALUES (USER, SYSDATE, :OLD.id_angajat, :OLD.salariu, :NEW.salariu);
END IF;
END;

42. Se presupune ca a fost creat tabelul dept(id_depatament, nr_angajati), care mentine pentru fiecare
departament numarul de angajati care lucreaza in acesta.
Prin comanda urmatoare se defineste vizualizarea view_angajati:

CREATE VIEW view_angajati AS


SELECT id_angajat, nume, prenume, id_departament FROM angajati;

Care este varianta corecta prin care se defineste un trigger care va determina incrementarea cu 1 a
numarului de angajati din tabelul dept daca in vizualizare este inserata o inregistrare, respective
decrementarea cu 1 a numarului de angajati din tabelul dept daca din vizualizare este stearsa o
inregistrare?

a. CREATE TRIGGER trig_dept


INSTEAD OF INSERT OR DELETE ON view_angajati
BEGIN
IF INSERTING THEN
UPDATE dept SET nr_angajati = nr_angajati +1;
ELSE
UPDATE dept SET nr_angajati = nr_angajati -1;
END IF;END;
b. CREATE TRIGGER trig_dept
INSTEAD OF INSERT OR DELETE ON view_angajati
FOR EACH ROW
BEGIN
IF INSERTING THEN
UPDATE dept SET nr_angajati = nr_angajati +1;
WHERE id_departament = :NEW.id_departament;
ELSE
UPDATE dept SET nr_angajati = nr_angajati -1;
WHERE id_departament = :OLD.id_departament;
END IF;END;
c. CREATE TRIGGER trig_dept
AFTER INSERT OR DELETE ON view_angajati
FOR EACH ROW
BEGIN
IF INSERTING THEN
UPDATE dept SET nr_angajati = nr_angajati +1;
WHERE id_departament = :NEW.id_departament;
ELSE
UPDATE dept SET nr_angajati = nr_angajati -1;
WHERE id_departament = :OLD.id_departament;
END IF;END;
43. Urmatoarea comanda creaza tabelul audit:

CREATE TABLE audit


(actiune VARCHAR2(20),
utilizator VARCHAR2(30) DEFAULT USER,
data DATE DEFAULT SYSDATE);

Apoi, este definit urmatorul trigger:

CREATE TRIGGER trig_audit


AFTER ALTER ON SCHEMA
BEGIN
INSERT INTO audit(actiune)
VALUES(‘Obiect modificat’);
END;

Care dintre actiunile urmatoare va determina declansarea triggerului creat si inserarea unei inregistrari in
tabelul audit?

a. O comanda prin care se adauga o constrangere de cheie primara unui table existent.
b. O comanda prin care se modifica valorile unor inregistrari dintr-un tabel.
c. O comanda prin care se creaza un tabel.
d. O comanda prin care se eliminaun index.

44. Se presupune că într-o sală a unui muzeu pot fi expuse maximum 10 opere de artă. Pentru aceasta
se creează următorul trigger:

CREATE TRIGGER trigger_opere


BEFORE INSERT OR UPDATE OF cod_sala ON opera
FOR EACH ROW
DECLARE
v_max NUMBER := 10;
v_nr NUMBER;
BEGIN
SELECT COUNT(*) INTO v_nr
FROM opera
WHERE cod_sala =:NEW.cod_sala;
IF v_nr + 1>v_max THEN
RAISE_APPLICATION_ERROR(-20000,’Prea multe opere de arta);
END IF;
END;

Care dintre urmatoarele variante este corecta?

a. Triggerul este creat fara erori la compilare si va functiona corect pentru toate comenzile
LMD utilizate asupra tabelului opera.
b. Aceasta conditie poate fi implementata prin adaugarea unei constrangeri de tip CHECK
asupra tabelului opera.
c. Triggerul este creat cu erori la compilare
d. Triggerul este creat fara erori la compilare, dar in cazul anumitor comenzi LMD asupra
tabelului opera va genera eroarea “table mutating”.