Sunteți pe pagina 1din 39

Proiectarea bazelor de date

Curs final
Structura biletelor de examen

Adrian Runceanu
www.runceanu.ro/adrian
2018
copyright@www.adrian.runceanu.ro

Curs final

30.12.2018 2
copyright@www.adrian.runceanu.ro

Structura biletelor de examen


A. Proba teoretica:
Subiect I (6p) - intrebari tip grila cu o singura
varianta de raspuns corecta
Subiect II (2p) - enuntul unei probleme simple

B. Proba practica:
Enuntul unei probleme ce se poate rezolva cu
tabelele existente in ORACLE Apex.
30.12.2018 3
copyright@www.adrian.runceanu.ro

Structura biletelor de examen

A. Proba teoretica:
Subiect I (6p) - intrebari tip grila cu o singura
varianta de raspuns corecta
Subiect II (2p) - enuntul unei probleme simple

30.12.2018 4
copyright@www.adrian.runceanu.ro

Solutie c)
1. Ce se afiseaza cand urmatorul cod va fi executat?
DECLARE
varA NUMBER := 12;
BEGIN
DECLARE Variabila varB este declarata
varB NUMBER := 8; intr-o zona locala, iar apoi
BEGIN este apelata in afara zonei de
varA := varA + varB; vizibilitate!
END;
DBMS_OUTPUT.PUT_LINE(varB);
END;
a) 8
b) 12
c) Nimic, blocul va esua cu o eroare
d) 20
e) VarB
copyright@www.adrian.runceanu.ro

Solutie d)

2. Cand se utilizeaza blocuri imbricate, care


blocuri trebuie sa fie etichetate?

a) Blocul interior trebuie sa fie etichetat, blocul


exterior poate fi etichetat
b) Ambele blocuri trebuie etichetate
c) Blocurile imbricate nu pot fi etichetate
d) Blocul exterior trebuie sa fie etichetat daca
va fi referit in blocul interior
copyright@www.adrian.runceanu.ro

Solutie a)

3. Cand apare o exceptie intr-un bloc PL/SQL,


instructiunile ramase in sectiunea executabila
a blocului sunt omise. Adevarat sau Fals?

a) Adevarat
b) Fals
copyright@www.adrian.runceanu.ro

Solutie d)

4. Ce tip de bloc PL/SQL este definit prin urmatorul cod ?

BEGIN
DBMS_OUTPUT.PUT_LINE('Primul test grila');
END;

a) procedure
b) subroutine
c) function
d) anonim
copyright@www.adrian.runceanu.ro

Solutie c)
5. Examinati urmatorul cod. Care este valoarea finala a
variabilei V_MYVAR ?
DECLARE
v_myvar NUMBER;
BEGIN
v_myvar := 1 + 2 * 3;
v_myvar := v_myvar * 2;
END;

a) 81
b) 49
c) 14
d) 18
copyright@www.adrian.runceanu.ro

Solutie b)

6. Litera P in expresia PL/SQL vine de la:

a) Processing
b) Procedural
c) Primary
d) Proprietary
copyright@www.adrian.runceanu.ro

Solutie c)
7. Ce se intampla dupa executia urmatorului cod ?
BEGIN
FOR i in 1..3 LOOP
DBMS_OUTPUT.PUT_LINE (i);
i := i + 1;
END LOOP;
END;
a) Se afiseaza 1, 2, 3.
b) Se afiseaza 2, 3, 4.
c) Va rezulta o eroare deoarece nu se poate modifica
contorul intr-o bucla FOR.
d) Va rezulta o eroare deoarece contorul nu a fost declarat
in mod explicit.
copyright@www.adrian.runceanu.ro

Solutie a)
8. Examinati urmatorul cod. Care este valoarea finala a
variabilei V_MYBOOL ?
DECLARE
v_mynumber NUMBER; Variabila v_mybool va lua
valoarea false deoarece
v_mybool BOOLEAN; variabila v_mynumber nu este
BEGIN in intervalul inchis 10,20.

v_mynumber := 6;
v_mybool := (v_mynumber BETWEEN 10 AND 20);
v_mybool := NOT (v_mybool);
END;
Variabila v_mybool va lua
a) Adevarat valoarea true prin negatia
b) Fals valorii false obtinuta anterior
copyright@www.adrian.runceanu.ro

Solutie d)

9. Care dintre atributele cursorului este setat la


numarul total de linii ?

a) %ISOPEN
b) %NOTFOUND
c) %FOUND
d) %ROWCOUNT
Grila 1
Examinati urmatorul fragment de cod:
DECLARE
CURSOR emp_cursor IS
SELECT ename, sal, job FROM emp;
v_emp_rec emp_cursor%ROWTYPE;
BEGIN

FETCH emp_cursor INTO v_emp_rec;
DBMS_OUTPUT.PUT_LINE (... Punctul A ...);

END;
Proiectarea bazelor de date 14
30.12.2018
Solutie a) Grila 1(continuare)
Pentru a extrage valoarea din coloana ename,
ce ar trebui sa scrieti in Punctul A?

a) v_emp_rec.ename
b) v_emp_rec(ename)
c) v_emp_rec
d) ename
e) Nicio varianta nu este corecta

Proiectarea bazelor de date 15


30.12.2018
Grila 3 Solutie b)

O functie PL/SQL poate avea parametrii IN OUT.


Adevarat sau Fals?

a) Adevarat
b) Fals

Proiectarea bazelor de date 17


30.12.2018
Grila 4 Solutie d)

Care dintre urmatoarele aspecte se gasesc


intr-o functie si nu se gasesc intr-o
procedura?

a) O sectiune de exceptii
b) Parametri IN
c) Variabile locale in sectiunea IS/AS
d) Instructiunea RETURN in antet

Proiectarea bazelor de date 18


30.12.2018
Solutie b)
Grila 5
Procedura p1 are un singur parametru OUT de tip
DATE.
Functia f1 returneaza o valoare de tip DATE.
Care este diferenta dintre p1 si f1?
a) p1 se poate invoca dintr-un bloc anonim, dar f1 nu
se poate
b) f1 poate fi folosita intr-o instructiune SQL, dar p1 nu
poate fi folosita
c) p1 poate sa aiba oricati parametrii IN are nevoie, dar
f1 nu poate avea mai mult de doi parametrii IN
d) Nu este nicio diferenta deoarece amandoua
returneaza o singura valoare in aceeasi baza de date
Proiectarea bazelor de date 19
30.12.2018
Grila 6
CREATE FUNCTION get_sal_example (p_id
emp.empno%TYPE)
RETURN number
IS
v_sal emp.sal%TYPE := 0;
BEGIN
SELECT sal INTO v_sal
FROM emp
WHERE empno = p_id;
RETURN v_sal;
END get_sal_example;
Proiectarea bazelor de date 20
30.12.2018
Grila 6(continuare)
Solutie d)

Care variabila este transferata functiei si care variabila


este returnata de catre functie?

a) GET_SAL este transferata si V_SAL este returnata


b) SAL este transferata si P_ID este returnata
c) EMPNO este transferata si SAL este returnata
d) P_ID este transferata si V_SAL este returnata
Proiectarea bazelor de date 21
30.12.2018
Solutie d)
Grila 7
Care din aceste exceptii pot fi manipulate intr-o
sectiune EXCEPTION dintr-un bloc PL/SQL?

a) O incercare de impartire la zero


b) O instructiune SELECT care nu returneaza
nicio linie
c) Orice tip de exceptie care poate aparea intr-
un bloc
d) Toate cele trei variante
e) Niciunul dintre cele de mai sus
Proiectarea bazelor de date 22
30.12.2018
Solutie c)
Grila 8
Cum poti “prinde” o exceptie a serverului
Oracle ORA-01403: no data found?

a) WHEN NO DATA FOUND THEN ...


b) WHEN ORA-01403 THEN ...
c) WHEN NO_DATA_FOUND THEN ...
d) WHEN SQL%ROWCOUNT=0 THEN ...

Proiectarea bazelor de date 23


30.12.2018
Solutie c)
Grila 9
Ce fel de cod este stocat intr-o procedura ?

a) doar SQL
b) doar PL/SQL
c) Un amestec de SQL si PL/SQL
d) Un amestec de SQL si PL/SQL si Java

Proiectarea bazelor de date 24


30.12.2018
Grila 10

Ce nu este corect in urmatoarea secventa de cod?

CREATE OR REPLACE TRIGGER mytrigg


AFTER DELETE ON dept
BEGIN
INSERT INTO audit_table (who, when)
VALUES (USER, SYSDATE);
COMMIT;
END;
Proiectarea bazelor de date 25
30.12.2018
Solutie b)
Grila 10(continuare)
a) Un trigger DML nu poate sa contina o
instructiune DML cum ar fi INSERT INTO
audit_table
b) Nu se poate utiliza COMMIT intr-un trigger.
c) Ultima linie a codului trebuie sa aiba END
mytrigg;
d) A doua linie ar trebui sa fie: AFTER
DELETE OF DEPT
e) Nimic nu este incorect, trigger-ul se va
executa cu succes

Proiectarea bazelor de date 26


30.12.2018
Solutie a)
Grila 11
Blocul urmator afiseaza:
DECLARE a) NOT EQUAL
v_x NUMBER(9,2):=10; b) EROARE
v_y NUMBER(9,2); c) EQUAL
v_message VARCHAR2(20);
d) nimic
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;
Proiectarea bazelor de date 27
30.12.2018
Solutie d)
Grila 12
Pentru ca urmatorul bloc PL/SQL sa fie corect trebuie
adaugat la linia 8 urmatorul cod:
1 DECLARE
2 TYPE ang_record_type IS RECORD (
3 nume VARCHAR2(20), a) INTO ang_record_type%type
4 departament NUMBER); b) INTO ang_record_type%rowtype
5 ang_record ang_record_type; c) INTO ang_record_type
6 BEGIN
d) INTO ang_record
7 SELECT nume, id_departament
8 ……………………………………..
9 FROM angajati
10 WHERE id_angajat =100;
11 DBMS_OUTPUT.PUT_LINE (‘Nume’ || ang_record.nume ||’ Departament ‘ ||
12 ang_record.departament);
13 END;
Proiectarea bazelor de date 28
30.12.2018
Solutie d)
Grila 13
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

Proiectarea bazelor de date 29


30.12.2018
Solutie c)
Grila 14
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.
Proiectarea bazelor de date 30
30.12.2018
Solutie c)
Grila 15
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.

Proiectarea bazelor de date 31


30.12.2018
copyright@www.adrian.runceanu.ro

Structura biletelor de examen


A. Proba teoretica:
Subiect I (6p) - intrebari tip grila cu o singura
varianta de raspuns corecta
Subiect II (2p) - enuntul unei probleme simple

30.12.2018 32
Exemplu de Problema pentru subiectul II
 Să se specifice dacă un departament este mare, mediu sau
mic după cum numărul angajaţilor săi este mai mare ca 30,
cuprins între 10 şi 30 sau mai mic decât 10.
 Codul departamentului va fi initializat.
 In variabila v_numar se va numara cati angajati are
departamentul, iar in variabila v_comentariu se introduce
una din valorile cerute(‘mic’, ‘mare’ sau ‘mediu’).

DECLARE
p_cod_dep VARCHAR2(50):=30;
v_cod_dep dept.deptno%TYPE := p_cod_dep;
v_numar NUMBER(3) := 0;
v_comentariu VARCHAR2(10);
BEGIN
...
END
solutie
DECLARE
p_cod_dep VARCHAR2(50):=3;
v_cod_dep dept.deptno%TYPE := p_cod_dep;
v_numar NUMBER(3) := 0;
v_comentariu VARCHAR2(10);
BEGIN
SELECT COUNT(*)
INTO v_numar
FROM emp
WHERE deptno = v_cod_dep;
IF v_numar < 10 THEN
v_comentariu := 'mic';
ELSIF v_numar BETWEEN 10 AND 30 THEN
v_comentariu := 'mediu';
ELSE
v_comentariu := 'mare';
ENDIF;
DBMS_OUTPUT.PUT_LINE('Departamentul avand codul ' || v_cod_dep
|| ' este de tip ' || v_comentariu);
END;
Structura biletelor de examen

B. Proba practica:
Enuntul unei probleme ce se poate rezolva cu
tabelele existente in ORACLE Apex.

30.12.2018 35
Exemplu de problema propusa pentru proba
practica
Se considera tabela emp in care se
gestioneaza informatii despre angajatii unei
firme.
Să se afişeze lista cu numele şi salariul
angajaţilor din fiecare departament in parte
folosind o structura repetitiva simpla
(LOOP).
Precizare: numarul maxim de departamente
este 50.
solutie
declare
v_contor number(2) :=1;
v_deptno number;
v_dname varchar2(10);
v_loc varchar2(10);
begin
loop
begin
select deptno, dname, loc into v_deptno, v_dname, v_loc
from dept
where deptno=v_contor;
dbms_output.put_line('Dep.cu cod '|| v_contor||' se
numeste '||v_dname||' si este in '||v_loc);
Solutie(continuare)

exception
when no_data_found then
dbms_output.put_line('Nu exista departamentul
cu cod '|| v_contor);
end;
v_contor := v_contor + 1;
exit when v_contor > 50;
end loop;
exception
when others then
dbms_output.put_line('Exceptie');
end;
Întrebări?

30.12.2018 Proiectarea bazelor de date 40

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