You are on page 1of 6

SGBD Oracle – RECAPITULARE 1 –

EXERCIŢII RECAPITULATIVE

1. 1Să se creeze tabelele Facultăţi, Catedre şi Persoane pe baza schemei de mai sus,
ţinând cont de următoarele:

FACULTĂŢI
Nume coloană CODFAC DENFAC
Tipul restricţiei Primary key Not null
Tip dată Varchar2 Varchar2
Lungime 5 80

CATEDRE
Nume coloană CODCAT DENCAT CODFAC
Tipul restricţiei Primary key Not null Foreign key - referă tabela
Facultăţi, coloana CODFAC
Tip dată Varchar2 Varchar2 Varchar2
Lungime 7 50 5

PERSOANE
Nume CODP NUME FUNCŢI DATAANG CODCAT SALARI
coloană A U
Tipul Primary Check Foreign key - referă
restricţiei key tabela Catedre,
coloana CODCAT
Tip dată Number Varchar2 Varchar2 Date Varchar2 Number
Lungime 3 30 5 7 4
Atributul FUNCŢIA poate lua valorile: Prof (profesor), Conf (conferenţiar), Lect (lector),
Asist (asistent), Prep (preparator)
1
Codul necesar creării tabelelor şi adăugării de înregistrări se găseşte începând de la pagina 5.

1
SGBD Oracle – RECAPITULARE 1 –

2. Să se adauge în tabele următoarele informaţii:

FACULTĂŢI
CODFAC DENFAC
CSIE Cibernetica, Statistica si Informatica Economica
CIG Contabilitate si Informatica de Gestiune
COM Comert

CATEDRE
CODCAT DENCAT CODFAC
IE Informatica Economica CSIE
CIB Cibernetica Economica CSIE
EM Economie Matematica CSIE
STAT Statistica si Previziune Economica CSIE

PERSOANE
CODP NUME FUNCŢIA DATAANG CODCAT SALARIU
1 Ionescu Prof 12-NOV-1994 IE 2200
2 Popescu Prof CIB 2000
3 Georgescu Asist 23-APR-2002 IE 1000
4 Stanescu Conf 10-OCT-2001 EM 1400
5 Tudor Lect IE 1500
6 Zaharia Prep 04-FEB-2005 EM 900

3. Să se definească o variabilă de tip înregistrare (record), de acelaşi tip cu un tuplu din


tabela Persoane şi să se încarce în această variabilă înregistrarea pentru care Codp = 4.
4. Să se afişeze numărul de angajaţi pentru o anumită catedră. Codul catedrei se va introduce
de la tastatură.
5. Completaţi blocul creat anterior, tratând cazul în care codul citit de la tastatură nu există
(tratare excepţie).
6. Creaţi un bloc PL/SQL prin care să măriţi cu 20% salariul angajaţilor, în cazul în care
acesta este mai mic decât 1500. Contorizaţi şi afişaţi numărul de înregistrări modificate.
7. Creaţi un bloc PL/SQL care să afişeze numele şi funcţia pentru angajatii din catedra al
cărei cod este precizat (fie citit de la tastatură, fie dat drept valoare iniţială unei variabile
locale). Trataţi excepţiile implicite care pot apărea.
8. Utilizînd un cursor, să se afişeze primii 4 angajaţi cel mai bine plătiţi.

2
SGBD Oracle – RECAPITULARE 1 –

9. Creaţi un cursor explicit prin care să se afişeze denumirea catedrei şi numărul de angajaţi
de la fiecare catedră, cu excepţia catedrei de Informatică Economică şi numai pentru acele
catedre care au mai mult de o persoană.
10. Afişaţi informaţii despre toate catedrele şi despre angajaţii din fiecare dintre acestea.
Folosiţi un cursor pentru a încărca denumirea catedrelor şi un cursor parametrizat pentru
încărcarea numelor angajaţilor din cadrul fiecărei catedre.

Întrebările de tip grilă pot avea un singur răspuns corect, nici unul sau mai multe!
11. Din următoarea structură de bloc PL/SQL:
DECLARE
secţiune declarativă
BEGIN
secţiune executabilă
EXCEPTION
secţiune tratare erori
END;
a) sunt obligatorii toate secţiunile;
b) sunt opţionale toate secţiunile;
c) lipsesc alte secţiuni;
d) este obligatorie doar secţiunea executabilă;;
e) este obligatorie doar secţiunea declarativă.

12. Se consideră secvenţa PL/SQL:


CREATE TABLE mesaje
(numar NUMBER,
tip VARCHAR2(10));

DECLARE
i NUMBER(3);
n NUMBER;

BEGIN
FOR i IN 1 .. 15 LOOP
n:=i MOD 2;
IF n=0 THEN
INSERT INTO mesaje VALUES (i, 'par');

3
SGBD Oracle – RECAPITULARE 1 –

ELSE
INSERT INTO mesaje VALUES (i, 'impar');
END IF;
COMMIT;
END;
/
Precizaţi răspunsurile corecte. Explicaţi!
a) se realizează o ciclare cu numărător;
b) se realizează adăugarea de noi atribute în tabela Mesaje;
c) nu se respectă structura de bloc PL/SQL;
d) este greşită.

13. Un cursor implicit poate fi evaluat folosind atributele:


a) SQL%ROWCOUNT;
b) SQL%FOUND;
c) SQL%TYPE;
d) SQL%ROWTYPE;
e) SQL%NOTFOUND.

14. Într-un bloc PL/SQL o excepţie se defineşte în mod explicit (de către utilizator) prin
comanda:
a) RAISE nume_excepţie;
b) nume_excepţie EXCEPTION;
c) WHEN nume_excepţie THEN;
d) nu se poate.

4
SGBD Oracle – RECAPITULARE 1 –

1. Să se creeze tabelele Facultăţi, Catedre şi Persoane pe baza schemei de mai sus,


ţinând cont de următoarele:

create table facultati


(
codfac varchar2(5),
denfac varchar2(80) not null,
constraint pk_fac primary key(codfac)
);

create table catedre


(
codcat varchar2(7),
dencat varchar2(50) not null,
codfac varchar2(5),
constraint pk_cat primary key(codcat),
constraint fk_fac foreign key(codfac) references facultati(codfac)
);

create table persoane


(
codp number(3),
nume varchar2(30),
functia varchar2(5),
dataang date,
codcat varchar2(7),
salariu number(4),
constraint pk_pers primary key(codp),
constraint fk_cat foreign key(codcat) references catedre(codcat),
constraint ck_functia check(functia in('Prof','Conf','Lect','Asist','Prep'))
);

2. Să se adauge în tabele următoarele informaţii:

insert into facultati values ('CSIE','Cibernetica, Statistica si Informatica Economica');


insert into facultati values ('CIG','Contabilitate si Informatica de Gestiune');
insert into facultati values ('COM','Comert');

insert into catedre values ('IE','Informatica Economica','CSIE');


insert into catedre values ('CIB','Cibernetica Economica','CSIE');
insert into catedre values ('EM','Economie Matematica','CSIE');
insert into catedre values ('STAT','Statistica si Previziune Economica','CSIE');

insert into persoane values ('1','Ionescu','Prof',to_date('12-nov-1994','dd-mon-


yyyy'),'IE','2200');
insert into persoane values ('2','Popescu','Prof',null,'CIB','2000');
insert into persoane values ('3','Georgescu','Asist',to_date('23-apr-2002','dd-mon-
yyyy'),'IE','1000');

5
SGBD Oracle – RECAPITULARE 1 –

insert into persoane values ('4','Stanescu','Conf',to_date('10-oct-2001','dd-mon-


yyyy'),'EM','1400');
insert into persoane values ('5','Tudor','Lect',null,'IE','1500');
insert into persoane values ('6','Zaharia','Prep',to_date('04-feb-2005','dd-mon-
yyyy'),'EM','900');
commit;

You might also like