Sunteți pe pagina 1din 7

EXERCIII

1. Specificai ce se va afia la rularea urmtorului bloc PL/SQL:


DECLARE
v_var1 NUMBER :=100;
v_var2 NUMBER;
v_var3 NUMBER := v_var2;
v_var4 VARCHAR(20) := 'variabila PL/SQL';
v_var5 NUMBER NOT NULL := v_var1;
c_const1 CONSTANT DATE := TO_DATE('12/02/2007','dd/mm/yyyy');
c_const2 CONSTANT NUMBER NOT NULL := 2;
c_const3 CONSTANT NUMBER := NULL;
v_var6 NUMBER DEFAULT NULL;
BEGIN
DBMS_OUTPUT.PUT_LINE('variabila 1 = '||v_var1);
DBMS_OUTPUT.PUT_LINE('variabila 2 = '||v_var2);
DBMS_OUTPUT.PUT_LINE('variabila 3 = '||v_var3);
DBMS_OUTPUT.PUT_LINE('variabila 4 = '||v_var4);
DBMS_OUTPUT.PUT_LINE('variabila 5 = '||v_var5);
DBMS_OUTPUT.PUT_LINE('constanta 1 = '||c_const1);
DBMS_OUTPUT.PUT_LINE('constanta 2 = '||c_const2);
DBMS_OUTPUT.PUT_LINE('constanta 3 = '||c_const3);
DBMS_OUTPUT.PUT_LINE('variabila 6 = '||v_var6);
END;
/
2. Specificai ce se va afia la rularea urmtorului bloc PL/SQL (care conine blocuri
imbricate, ilustrnd domeniul de vizibilitate al unor variabile care au acelai nume):
DECLARE
var NUMBER;
BEGIN
var := 1;
DBMS_OUTPUT.PUT_LINE(var);
<<bloc1>>
DECLARE
var NUMBER;
BEGIN
var :=2;
DBMS_OUTPUT.PUT_LINE(var);
END bloc1;
DBMS_OUTPUT.PUT_LINE(var);
<<bloc2>>
DECLARE

var NUMBER;
BEGIN
var :=3;
DBMS_OUTPUT.PUT_LINE(var);
<<bloc3>>
DECLARE
var NUMBER;
BEGIN
var :=4;
DBMS_OUTPUT.PUT_LINE(var);
DBMS_OUTPUT.PUT_LINE(bloc2.var);
END bloc3;
DBMS_OUTPUT.PUT_LINE(var);
END bloc2;
DBMS_OUTPUT.PUT_LINE(var);
END;
/
3. S se calculeze suma a dou numere, iar rezultatul s se divid cu 3.
DECLARE
v_num1 number :=10;
v_num2 number :=20;
v_rezultat number;
BEGIN
v_rezultat:=(v_num1+v_num2)/3;
dbms_output.put_line('Rezultatul este: '||v_rezultat);
END;
/
4. S se afieze salariul mrit cu un procent.
DECLARE
v_sal number:=2000;
v_procent number:=10;
BEGIN
dbms_output.put_line(v_sal*(1+ v_procent/100));
END;
/
5. S se afieze TVA pentru o anumit valoare specificata.
6. Creati un bloc PL/SQL ce selecteaza stocul maxim pentru produsele existente in
tabela PRODUSE. Tipariti rezultatul pe ecran.
7. Creati un bloc PL/SQL ce adauga un produs nou in tabela PRODUSE.

a. Folositi maximul dintre codurile produselor si adaugati 10 la aceasta valoare,


folosind-o ca valoare pentru codul produsului nou introdus.
b. Lasati unitatea de masura si stocul NULL.
c. Executati blocul.
8. Creati un bloc PL/SQL ce actualizeaza zona unei firme existente.
a. Codul firmei este specificat prin initializarea unei variabile locale
b. Zona firmei este specificata prin initializarea unei variabile locale
c. Testati blocul PL/SQL.
9. Creati un bloc PL/SQL care sterge un produs pe baza codului acestuia (dat drept
valoare initiala unei variabile locale).
10. Creati o tabela numita Mesaje, avand un camp unic, de tip Varchar2.
11. Scrieti un bloc PL/SQL pentru a selecta codul comenzilor incheiate in anul 2005.
a. Daca se returneaza o singura linie, introduceti in tabela Mesaje codul comenzii.
b. Daca interogarea returneaza mai mult de o valoare pentru numarul comenzii,
captati exceptia cu o rutina de tratare corespunzatoare si inserati in tabela
Mesaje mesajul Atentie! In anul 2005 s-au incheiat mai multe comenzi!.
c. Daca interogarea nu returneaza nici o valoare pentru numarul comenzii, captati
exceptia cu o rutina de tratare corespunzatoare si inserati in tabela Mesaje
mesajul Atentie! In anul 2005 nu s-au incheiat comenzi!.
d. Captati orice alta exceptie cu o rutina de tratare corespunzatoare si inserati in
tabela Mesaje mesajul A aparut o alta eroare!.
12. Afiai informaii despre primele 3 comenzi care au cea mai mare valoare.
13. S se defineasc o variabil de tip nregistrare (record), de acelai tip cu un tuplu din
tabela Produse i s se ncarce n aceast variabil nregistrarea pentru care
Codprodus = 111.
14. S se afieze numrul de produse i stocul mediu al acestora.
15. S se creeze procedura Adauga_firma care s adauge o nregistrare nou n tabela
Firme.
16. S se creeze procedura Modifica_firma care s modifice denumirea unei firme. Codul
firmei si denumirea acesteia sunt parametrii procedurii.
17. S se creeze procedura Sterge_firma care s tearg o firma n funcie de codul
primit drept parametru.
ntrebrile de tip gril pot avea un singur rspuns corect, nici unul sau mai multe!
18. Din urmtoarea structur de bloc PL/SQL:
DECLARE

seciune declarativ
BEGIN
seciune executabil
EXCEPTION
seciune tratare erori
END;
a) sunt obligatorii toate seciunile;
b) sunt opionale toate seciunile;
c) lipsesc alte seciuni;
d) este obligatorie doar seciunea executabil;;
e) este obligatorie doar seciunea declarativ.
19. Se consider secvena PL/SQL:
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');
ELSE
INSERT INTO mesaje VALUES (i, 'impar');
END IF;
COMMIT;
END;
/
Precizai rspunsurile corecte. Explicai!
a) se realizeaz o ciclare cu numrtor;
b) se realizeaz adugarea de noi atribute n tabela Mesaje;
c) nu se respect structura de bloc PL/SQL;
d) este greit.
20. Un cursor implicit poate fi evaluat folosind atributele:
a) SQL%ROWCOUNT;
b) SQL%FOUND;
c) SQL%TYPE;
d) SQL%ROWTYPE;
e) SQL%NOTFOUND.

21. ntr-un bloc PL/SQL o excepie se definete n mod explicit (de ctre utilizator) prin
comanda:
a) RAISE nume_excepie;
b) nume_excepie EXCEPTION;
c) WHEN nume_excepie THEN;
d) nu se poate.
22. Un trigger este executat implicit de serverul Oracle atunci cnd are loc:
a) insert
b) update
c) delete
d) select
e) create
23. Se d urmtoarea secven de comenzi:
DECLARE
invalid_prod EXCEPTION;
BEGIN
UPDATE produse
SET denprodus='cafea'
WHERE codprodus=3;
IF SQL%NOTFOUND THEN
RAISE invalid_prod;
END IF;
EXCEPTION
WHEN invalid_prod THEN
DBMS_OUTPUT.PUT_LINE('Nu exista produsul cu acest cod');
END;
/
Care afirmaii sunt corecte:
a) se trateaz o excepie de sistem;
b) utilizeaz un cursor implicit;
c) utilizeaz un cursor explicit;
d) se trateaz o excepie definit de utilizator;
24. Se d urmtoarea secven de comenzi:
CREATE TABLE mesaje
(cod varchar2(7),
nume varchar2(20)
);

DECLARE
v_cod agenti.codagent%type;
v_nume agenti.numeagent%type;
CURSOR c1 IS SELECT codagent,numeagent FROM agenti;
BEGIN
OPEN c1;
FOR i IN 1..5 LOOP
FETCH c1 INTO v_cod,v_nume;
INSERT INTO mesaje VALUES(v_cod,v_nume);
END LOOP;
CLOSE c1;
END;
/
Care afirmaie este greit:
a) se deschide un cursor implicit definit de utilizator;
b) se utilizeaz o structur de control repetitiv
c) se creeaz o tabel;
d) se definesc dou variabile scalare;
e) se definete un cursor explicit;
25. Precizai ce va afia urmtorul bloc PL/SQL:
DECLARE
Myage number;
BEGIN
IF myage>18 THEN
dbms_output.put_line('Adult!');
ELSE
dbms_output.put_line('Copil!');
END IF;
END;
/
26. Care din urmtoarele variabile nu este corect definit? Explicai!
a) v_codp produse.codprodus%type;
b) v_data date default sysdate;
c) v_stocmin produse.stoc%type := 500;
d) v_data2 date := sysdate+7;
e) v_valid boolean not null;
27. n urmtorul exemplu se definesc:
DECLARE

v1 number(7,2);
v2 boolean;
v3 char(7);
v4 date;
v5 agenti%rowtype;
Specificai care afirmaie este eronat. n secvena de mai sus sunt definite:
a) o variabil numeric;
b) o variabil de tip dat calendaristic;
c) o variabil boolean;
d) o variabil de tip ir de caractere de lungime variabil;
e) o variabil compus de tip nregistrare (record).

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