curs final structura biletelor de examen adrian runceanu · grila 12 pentru ca urmatorul bloc...
TRANSCRIPT
Proiectarea bazelor de date
Adrian Runceanuwww.runceanu.ro/adrian
2018
Curs finalStructura 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
Structura biletelor de examen
A. Proba teoretica:
Subiect I (6p) - intrebari tip grila cu o singuravarianta de raspuns corecta
Subiect II (2p) - enuntul unei probleme simple
30.12.2018 4
Structura biletelor de examen
Solutie c)
1. Ce se afiseaza cand urmatorul cod va fi executat?DECLARE
varA NUMBER := 12;BEGIN
DECLAREvarB NUMBER := 8;BEGINvarA := varA + varB;END;DBMS_OUTPUT.PUT_LINE(varB);
END;a) 8b) 12c) Nimic, blocul va esua cu o eroared) 20e) VarB
Variabila varB este declarataintr-o zona locala, iar apoi
este apelata in afara zonei de vizibilitate!
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 etichetatec) Blocurile imbricate nu pot fi etichetated) Blocul exterior trebuie sa fie etichetat daca
va fi referit in blocul interior
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) Adevaratb) Fals
Solutie d)
4. Ce tip de bloc PL/SQL este definit prin urmatorul cod ?
BEGINDBMS_OUTPUT.PUT_LINE('Primul test grila');
END;
a) procedureb) subroutinec) functiond) anonim
Solutie c)
5. Examinati urmatorul cod. Care este valoarea finala a variabilei V_MYVAR ?
DECLAREv_myvar NUMBER;
BEGINv_myvar := 1 + 2 * 3;v_myvar := v_myvar * 2;
END;
a) 81b) 49c) 14d) 18
Solutie b)
6. Litera P in expresia PL/SQL vine de la:
a) Processingb) Proceduralc) Primaryd) Proprietary
Solutie c)
7. Ce se intampla dupa executia urmatorului cod ? BEGIN
FOR i in 1..3 LOOPDBMS_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.
Solutie a)
8. Examinati urmatorul cod. Care este valoarea finala a variabilei V_MYBOOL ?
DECLAREv_mynumber NUMBER;v_mybool BOOLEAN;
BEGINv_mynumber := 6;v_mybool := (v_mynumber BETWEEN 10 AND 20);v_mybool := NOT (v_mybool);
END;a) Adevaratb) Fals
Variabila v_mybool va luavaloarea false deoarece
variabila v_mynumber nu estein intervalul inchis 10,20.
Variabila v_mybool va luavaloarea true prin negatia
valorii false obtinuta anterior
Solutie d)
9. Care dintre atributele cursorului este setat la numarul total de linii ?
a) %ISOPENb) %NOTFOUNDc) %FOUNDd) %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;
30.12.2018Proiectarea bazelor de date 14
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
30.12.2018Proiectarea bazelor de date 15
Solutie a)
Grila 3
O functie PL/SQL poate avea parametrii IN OUT.
Adevarat sau Fals?
a) Adevarat
b) Fals
30.12.2018Proiectarea bazelor de date 17
Solutie b)
Grila 4
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
30.12.2018Proiectarea bazelor de date 18
Solutie d)
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
30.12.2018Proiectarea bazelor de date 19
Solutie b)
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;
30.12.2018Proiectarea bazelor de date 20
Grila 6(continuare)
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
30.12.2018Proiectarea bazelor de date 21
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
30.12.2018Proiectarea bazelor de date 22
Solutie d)
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 ...
30.12.2018Proiectarea bazelor de date 23
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
30.12.2018Proiectarea bazelor de date 24
Solutie c)
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;
30.12.2018Proiectarea bazelor de date 25
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
30.12.2018Proiectarea bazelor de date 26
Solutie b)
Grila 11Blocul 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;
30.12.2018Proiectarea bazelor de date 27
a) NOT EQUAL
b) EROARE
c) EQUAL
d) nimic
Solutie a)
Grila 12Pentru 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),
4 departament NUMBER);
5 ang_record ang_record_type;
6 BEGIN
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;
30.12.2018Proiectarea bazelor de date 28
a) INTO ang_record_type%type
b) INTO ang_record_type%rowtype
c) INTO ang_record_type
d) INTO ang_record
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’);
30.12.2018Proiectarea bazelor de date 29
a) USER_OBJECTS
b) USER_ERRORS
c) USER_FUNCTIONS
d) USER_SOURCE
Solutie d)
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;
30.12.2018Proiectarea bazelor de date 30
a) DBMS_OUTPUT.PUT_LINE(v_numar);
b) COMMIT;
c) RETURN v_numar;
d) nu mai trebuie adaugat nimic.
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.
30.12.2018Proiectarea bazelor de date 31
Solutie c)
A. Proba teoretica:
Subiect I (6p) - intrebari tip grila cu o singuravarianta de raspuns corecta
Subiect II (2p) - enuntul unei probleme simple
30.12.2018 32
Structura biletelor de examen
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;
B. Proba practica:
Enuntul unei probleme ce se poate rezolva cu
tabelele existente in ORACLE Apex.
30.12.2018 35
Structura biletelor de examen
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;