Curs final Structura biletelor de examen Adrian Runceanu · 2019-01-01 · Curs final Structura...

39
Proiectarea bazelor de date Adrian Runceanu www.runceanu.ro/adrian 2018 Curs final Structura biletelor de examen

Transcript of Curs final Structura biletelor de examen Adrian Runceanu · 2019-01-01 · Curs final Structura...

Proiectarea bazelor de date

Adrian Runceanuwww.runceanu.ro/adrian

2018

Curs finalStructura biletelor de examen

[email protected]

Curs final

30.12.2018 2

[email protected]

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

[email protected]

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

[email protected]

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!

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

Solutie b)

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

a) Processingb) Proceduralc) Primaryd) Proprietary

[email protected]

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.

[email protected]

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

[email protected]

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)

[email protected]

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;

Întrebări?

30.12.2018 Proiectarea bazelor de date 40