50
QUESTION 1 Urmatoarea comanda creaza tabelul audit: CREATE TABLE audit (actiune VARCHAR2(20), utilizator VARCHAR2(30) DEFAULT USER, data DATE DEFAULT SYSDATE); Apoi, este definit urmatorul trigger: CREATE TRIGGER trig_audit AFTER ALTER ON SCHEMA BEGIN INSERT INTO audit(actiune) VALUES(`Obiect modificat'); END; Care dintre actiunile urmatoare va determina declansarea triggerului creat si inserarea unei inregistrari in tabelul audit? A. O comanda prin care se adauga o constrangere de cheie primara unui table existent. B. O comanda prin care se modifica valorile unor inregistrari dintr-un tabel. C. O comanda prin care se creaza un tabel. D. O comanda prin care se elimina un index. Answer: A Candidate Response: A (Correct) Explanation/Reference: A

Sgbd From Vce

Embed Size (px)

Citation preview

Page 1: Sgbd From Vce

QUESTION 1Urmatoarea comanda creaza tabelul audit:

CREATE TABLE audit(actiune VARCHAR2(20),utilizator VARCHAR2(30) DEFAULT USER,data DATE DEFAULT SYSDATE);

Apoi, este definit urmatorul trigger:

CREATE TRIGGER trig_auditAFTER ALTER ON SCHEMABEGININSERT INTO audit(actiune)VALUES(`Obiect modificat');END;

Care dintre actiunile urmatoare va determina declansarea triggerului creat si inserarea unei inregistrari intabelul audit?

A. O comanda prin care se adauga o constrangere de cheie primara unui table existent.B. O comanda prin care se modifica valorile unor inregistrari dintr-un tabel.C. O comanda prin care se creaza un tabel.D. O comanda prin care se elimina un index.

Answer: ACandidate Response: A (Correct)

Explanation/Reference:A

Page 2: Sgbd From Vce

QUESTION 2Care este varianta corecta prin care se incarca date dintr-un cursor intr-o colectie?

A. DECLARETYPE tip_job IS TABLE OF joburi.nume_job%TYPE;v_nume tip_job;CURSOR c_joburi IS SELECT nume_job FROM joburi;BEGINOPEN c_joburi;SELECT c_joburi INTO v_nume;CLOSE c_joburi;END;

B. DECLARETYPE tip_job IS TABLE OF joburi.nume_job%TYPE;v_nume tip_job;CURSOR c_joburi IS SELECT nume_job FROM joburi;BEGINOPEN c_joburi;FETCH c_joburi BULK COLLECT INTO v_nume;CLOSE c_joburi;END;

C. DECLARETYPE tip_job IS TABLE OF joburi.nume_job%TYPE;v_nume tip_job;CURSOR c_joburi IS SELECT nume_job FROM joburi;BEGINOPEN c_joburi;FETCH c_joburi INTO v_nume;CLOSE c_joburi;END;

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 3: Sgbd From Vce

QUESTION 3Se da urmatorul bloc PL/SQL

DECLAREv_salariu NUMBER(8):=&p_salariu;v_bonus NUMBER(8);v_salariu_anual NUMBER(8);BEGINv_salariu_anual:=v_salariu*12;IF v_salariu_anual>=20000THEN v_bonus:=0.01 * v_salariu_anual;ELSIF v_salariu_anual >10000 AND v_salariu_anual <20000 THEN v_bonus:=0.02* v_salariu_anual;ELSE v_bonus:=100;END IF;DBMS_OUTPUT.PUT_LINE(Bonusul este'|| v_bonus);END;

Care din urmatoarele afirmatii nu este corecta?

A. Blocul genereaza o eroare, deoarece variabila p_salariu nu este initializata.B. Variabila p_salariu reprezinta o variabila de substitutie, a carei valoare poate fi data prin utilizarea comenzii

DEFINE din SQL*PLUS.C. Blocul se executa fara erori, asteptandu-se introducerea de la tastatura a unei valori pentru variabila

p_salariu,daca nu a fost deja data o valoare pentru aceasta.D. Daca valoarea variabilei v-salariu este 500, atunci blocul se executa fara erori si afiseaza textul 'Bonusul

este 100'.

Answer: ACandidate Response: A (Correct)

Explanation/Reference:A

Page 4: Sgbd From Vce

QUESTION 4Care este varianta de bloc PL/SQL corecta pentru a mentine intr-un vector codurile angajatilor care au salariulmai mic decat 20000 si lucreaza in departamentul 90?

A. DECLARETYPE t_id IS VARRAY(100) OF angajati.id_angajat%TYPE;v_id t_id :=t_id();BEGINSELECT id_angajat INTO v_idFROM angajatiWHERE id_departement=90 AND salariu < 20000;END;

B. DECLARETYPE t_id IS VARRAY(100) OF angajati.id_angajat%TYPE;v_id t_id :=t_id();BEGINSELECT id_angajat BULK COLLECT INTO v_idFROM angajatiWHERE id_departament=90 AND salariu < 20000;END;

C. DECLARETYPE t_id IS VARRAY(100) OF angajati.id_angajat%TYPE;v_id t_id :=t_id;BEGINSELECT id_angajat BULK COLLECT INTO t_idFROM angajatiWHERE id_departement=90 AND salariu < 20000;END;

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 5: Sgbd From Vce

QUESTION 5Care dintre urmatoarele afirmatii este corecta?

A. Blocul PL/SQL care descrie actiunea unui trigger nu poate contine comanda COMIT.B. Corpul unui trigger nu poate contine comenzi LMD.C. Atunci cand un tabel este sters, triggeri asociati acestuia sunt dezactivati automat, nefiind eliminati.D. In clauza ON din definitia unui trigger pot fi specificate mai multe tabele sau vizualizari.

Answer: ACandidate Response: A (Correct)

Explanation/Reference:A

Page 6: Sgbd From Vce

QUESTION 6Un pachet are doua parti, fiecare fiind stocata separat in dictionarul datelor : specificatia si corpul.

A. TrueB. False

Answer: ACandidate Response: A (Correct)

Explanation/Reference:A

Page 7: Sgbd From Vce

QUESTION 7Care este varianta corecta pentru a defini un tablou imbricat de numere care are ca elemente primele 10numere naturale?

A. DECLARETYPE tablou IS TABLE OF NUMBER;tab tablou:= tablou();BEGINFOR i IN 1...10 LOOPtab.NEXT(i)tab(i) := i;END LOOP;END;

B. DECLARETYPE tablou IS TABLE OF NUMBER;tab tablou:= tablou();BEGIN FOR i IN 1...10 LOOPtab.EXTEND; tab(i) := i;END LOOP;END;

C. DECLARETYPE tablou IS TABLE OF NUMBER;tab tablou:= tablou();BEGINFOR i IN 1...10 LOOPtab(i) := tab(i) + i;END LOOP;END;

D. DECLARETYPE tablou IS TABLE OF NUMBER;tab tablou:= tablou();BEGINFOR i IN 1...10 LOOPtab(i) := i;END LOOP;END;

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 8: Sgbd From Vce

QUESTION 8Care este varianta incorecta prin care se obtin numele si salariul angajatilor care au salariul mai mic decat2500 si nu lucreaza in departamentul avand codul 80?

A. DECLAREv_nume angajati.nume%TYPE;v_sal angajati.salariu%TYPE;CURSOR c(var_sal NUMBER, var_dept NUMBER) ISSELECT nume, salariuFROM angajatiWHERE salariu<var_sal AND id_departament<>var_dept;BEGINOPEN c(2500,80);LOOPFETCH c INTO v_nume, v_sal;EXIT WHEN c%NOTFOUND;DBMS_OUTPUT.PUT_LINE(`Salariatul '||v_nume||' are salariul `|| v_sal); END LOOP;CLOSE c;END;

B. DECLAREv_sal :=2500;v_dept := 80;BEGINFOR ind IN (SELECT nume, salariuFROM angajatiWHERE salariu<var_sal AND id_departament<>var_dept)LOOP DBMS_OUTPUT.PUT_LINE(`Salariatul '||ind_nume||' are salariul `|| ind_salariu); END LOOP;END;

C. DECLARECURSOR c(var_sal NUMBER, var_dept NUMBER) ISSELECT nume, salariuFROM angajatiWHERE salariu<var_sal AND id_departament<>var_dept;BEGINFOR ind IN c(2500,80) LOOPDBMS_OUTPUT.PUT_LINE(`Salariatul '||ind_nume||' are salariul `|| ind_salariu); END LOOP;END;

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 9: Sgbd From Vce

QUESTION 9Ce comanda SQL*Plus ar putea sa preceada blocul de mai jos pentru ca in acesta sa se utilizeze valoarea datavariabilei sem?

DECLAREv_sem CHAR(2):=UPPER(`&sem');BEGINCASE v_semWHEN `I' THEN DBMS_OUTPUT.PUT_LINE(`SEMESTRUL I');WHEN `II' THEN DBMS_OUTPUT.PUT_LINE(`SEMESTRUL II');ELSE DBMS_OUTPUT.PUT_LINE(`este o eroare!');END CASE;END;

A. ACCEPT sem PROMPT `sem='B. VARIABLE sem=liC. DEFINE semD. TYPE SEM=i

Answer: ACandidate Response: A (Correct)

Explanation/Reference:A

Page 10: Sgbd From Vce

QUESTION 10Sa se introduca in tabelul testare(cod NUMBER(2)) 5 inregistrari, avand codurile egale cu 1, 2, 3, 4 respectiv 5.Care din urmatoarele variante nu executa acest deziderat?

A. DECLAREv_contor NUMBER(2) := 1;BEGINLOOPINSERT INTO testare VALUES (v_contor);v_contor :=v_contor + 1;EXIT WHEN v_contor > 5;END LOOP;END;

B. DECLAREv_contor NUMBER(2) := 1;BEGINWHILE v_contor < 6 LOOPINSERT INTO testare VALUES (v_contor);v_contor :=v_contor + 1;END LOOP;END;

C. DECLAREv_contor NUMBER(2) := 1;BEGINFOR i IN 1...5 LOOPINSERT INTO testare VALUES (v_contor);END LOOP;END;

D. BEGINFOR i IN 1...5 LOOPINSERT INTO testare VALUES (i);END LOOP;END;

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 11: Sgbd From Vce

QUESTION 11Se da urmatorul bloc PL/SQL:

DECLAREv_cod_sal angajati.id_angajat%TYPE:= 100;v_cod_dept angajati.id_departament%TYPE:= 10;v_procent NUMBER(8):=20;BEGINUPDATE angajatiSET id_departament = v_cod_dept,salariu=salariu + (salariu* v_procent/100)WHERE id_angajat = v_cod_sal;IF SQL%ROWCOUNT = 0 THENDBMS_OUTPUT.PUT_LINE (`Nu exista un angajat cu acest cod'); ELSECOMMIT;DBMS_OUTPUT.PUT_LINE (`Actualizare realizata');END IF;END;

Care dintre urmatoarele afirmatii este adevarata?

A. Executia blocului se incheie cu o eroare, deoarece comanda clauza SET a comenzii UPDATE este utilizatagresit.

B. Executia blocului se incheie cu o eroare, deoarece comanda COMMIT nu poate fi utilizata intr-un bloc PL/SQL.

C. Executia blocului se incheie cu o eroare, deoarece metoda ROWCOUNT este utilizata pentru un cursornedeclarat.

D. Blocul se va executa fara erori si afiseaza mesajul `Nu exista un angajat cu acest cod' daca angajatulavand codul 100 nu exista in tabelul angajati sau mesajul `Actualizare realizata' in caz contrar.

Answer: DCandidate Response: D (Correct)

Explanation/Reference:D

Page 12: Sgbd From Vce

QUESTION 12Care 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.

Answer: DCandidate Response: D (Correct)

Explanation/Reference:D

Page 13: Sgbd From Vce

QUESTION 13Pentru a gestiona exceptiile, utilizatorul trebuie sa scrie cateva comenzi care preiau controlul derularii bloculuiPL/SQL.Aceste comenzi sunt situate in sectiunea de tratare a erorilor dintr-un bloc PL/SQL si sunt cuprinse intrecuvintele cheie...

A. COMMIT si ENDB. WHERE si ANDC. EXCEPTION si ENDD. EXCEPTION si AND

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 14: Sgbd From Vce

QUESTION 14Care tabel/vizualizare poate fi folosit/folosita in urmatoarea comanda pentru a obtine informatii despreprocedurile si functiile detinute de utilizatorul curent?

SELECT *FROM .....WHERE OBJECT_TYPE IN (`PROCEDURE' , `FUNCTION');

A. USER_SOURCEB. DUALC. USER_ERRORSD. USER_OBJECTS

Answer: DCandidate Response: D (Correct)

Explanation/Reference:D

Page 15: Sgbd From Vce

QUESTION 15Se da urmatorul bloc PL/SQL:

DECLAREcarte VARCHAR2(20);autor VARCHAR(15) DEFAULT 'Eminescu' ;BEGINDBMS_OUTPUT.PUT_LINE(carte||' '||autor);END;

Care din urmatoarele afirmatii este corecta?

A. Se va returna o eroare, deoarece variabila carte este utilizata nefiind initializata.B. Se va returna o eroare, deoarece nu se poate utiliza clauza DEFAULT pentru a initializa o variabila de tip

VARCHAR2.C. Blocul se executa fara erori si afiseaza 'null Eminescu'.D. Blocul se executa fara erori si afiseaza 'Eminescu'

Answer: DCandidate Response: D (Correct)

Explanation/Reference:D

Page 16: Sgbd From Vce

QUESTION 16In blocul PL/SQL de mai jos

VARIABLE rows_deleted VARCHAR(20)DECLAREv_dep_id angajati.id_departament%TYPE:=80;BEGINDELETE FROM angajatiWERE id_departament=v_dep_id;:rows_deleted:=SQL%ROWCOUNT||'rows deleted';END;/PRINT rows_deleted

apare:

A. un cursor explicitB. nu apare nici un cursorC. un cursor implicitD. un ciclu cursor cu subcereri

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 17: Sgbd From Vce

QUESTION 17Se da urmatorul bloc PL/SQL:

BEGINSELECT nume_jobINTO :rezultatFROM angajat a, joburi bWHERE a.id_job=b.id_jobAND id_angajat=100;DBMS_OUTPUT_LINE('Numele jobului este'|| :rezultat);END;

Care din urmatoarele afirmatii este adevarata?

A. Blocul se executa fara erori si afiseaza numele jobului angajatului avand codul 100.B. Executia blocului se incheie cu o eroare, deoarece variabila de legatura rezultat nu este declarata in afara

blocului PL/SQL.C. Executia blocului se incheie cu o eroare, deoarece utilizarea clauzei INTO a comenzii SELECT nu este

corecta.D. Valoarea variabilei de legatura rezultat nu poate fi afisata decat din interiorul blocului PL/SQL.

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 18: Sgbd From Vce

QUESTION 18Care este varianta corecta care defineste un trigger la nivel de comanda ce determina inserarea in tabelulaudit_angajati a unui mesaj corespunzator tipului de comanda LMD executata asupra tabelului angajati?

A. CREATE TRIGGER trigger_audit_angajatiAFTER INSERT OR DELETE OR UPDATE ON audit_angajatiFOR EACH ROWBEGINIF INSERTING THENINSERT INTO audit_angajati (actiune)VALUES (:NEW.INSERT);ELSIF DELETING THENINSERT INTO audit_angajati (actiune)VALUES (:OLD.DELETE);ELSEINSERT INTO audit_angajati (actiune)VALUES (:NEW.UPDATE');END IF;END;

B. CREATE TRIGGER trigger_audit_angajatiAFTER INSERT OR AFTER DELETE OR AFTER UPDATE ON angajatiBEGINIF INSERTING THENINSERT INTO audit_angajati (actiune)VALUES (`Inserare');ELSIF DELETING THENINSERT INTO audit_angajati (actiune)VALUES (`Stergere');ELSEINSERT INTO audit_angajati (actiune)VALUES (`Actualizare');END IF;END;

C. CREATE TRIGGER trigger_audit_angajatiAFTER INSERT OR DELETE OR UPDATE ON angajatiBEGINIF INSERTING THENINSERT INTO audit_angajati (actiune)VALUES (`Inserare');ELSIF DELETING THENINSERT INTO audit_angajati (actiune)VALUES (`Stergere');ELSEINSERT INTO audit_angajati (actiune)VALUES (`Actualizare');END IF;END;

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 19: Sgbd From Vce

QUESTION 19Pachetele pot fi apelate, pot transmite parametrii si pot fi incuibarite.

A. TrueB. False

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 20: Sgbd From Vce

QUESTION 20Care dintre urmatoarele blocuri se executa cu erori?

A. declarealfa interval year to month;beginalfa :=interval `2 - 5' year to month;DBMS_OUTPUT.PUT_LINE(`alfa = `|| alfa);end;

B. declarealfa interval year to month;beginalfa :=interval `8' month;DBMS_OUTPUT.PUT_LINE(`alfa = `|| alfa);end;

C. declarealfa interval year to month;beginalfa := `20 - 10';DBMS_OUTPUT.PUT_LINE(`alfa = `|| alfa);end;

D. declarealfa interval month;beginalfa :=interval `8' month;DBMS_OUTPUT.PUT_LINE(`alfa = `|| alfa);end;

Answer: DCandidate Response: D (Correct)

Explanation/Reference:D

Page 21: Sgbd From Vce

QUESTION 21Se da urmatorul bloc PL/SQL

DECLARETYPE tablou_numar IS TABLE OF NUMBERINDEX BY PLS_INTEGER;v_tablou tablou_numar;BEGINFOR i IN 1...10 LOOPv_tablour(i) := i*i*i;END LOOP;FOR i IN v_tablou.FIRST..v_tablou.LAST LOOPv_tablour(i) := NULL;END LOOP;DBMS_OUTPUT.PUT_LINE(`tabloul are ` || v_tablou.COUNT || `elemente'); v_tablou.delete;DBMS_OUTPUT.PUT_LINE(`tabloul are ` || v_tablou.COUNT || `elemente'); END;

In urma executiei blocului se obtine urmatorul rezultat:

A. tabloul are 10 elementetabloul are 10 elemente

B. EroareC. tabloul are 10 elemente

tabloul are 0 elementeD. tabloul are 0 elemente

tabloul are 0 elemente

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 22: Sgbd From Vce

QUESTION 22Care este varianta corecta pentru a crea specificatia unui pachet, care defineste un cursor pentru obtinereadatelor si o procedura ce actualizeaza campul id_job al unui angajat cu un anumit cod?

A. CREATE OR REPLACE PACKAGE manager_pkg ISCURSOR joburi_curs ISSELECT id_angajat, id_job FROM angajati;PROCEDURE update_job(p_ang_id IN angajati.id_angajat%TYPE, P_id_job OUT angajati.id_job%TYPE);END update_job;END manager_pkg;

B. CREATE OR REPLACE PACKAGE manager_pkg ISCURSOR joburi_curs ISSELECT id_angajat, id_job FROM angajati;PROCEDURE update_job(p_ang_id IN angajati.id_angajat%TYPE, P_id_job IN angajati.id_job%TYPE);END manager_pkg;

C. CREATE OR REPLACE PACKAGE manager_pkg ISCURSOR joburi_curs ISSELECT id_angajat, id_job FROM angajati;PROCEDURE update_job(p_ang_id IN angajati.id_angajat%TYPE, P_id_job OUT angajati.id_job%TYPE);END manager_pkg;

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 23: Sgbd From Vce

QUESTION 23Care este varianta corecta prin care se afiseaza numele si prenumele primelor 5 persoane angajate in lunamartie in anul 1997?

A. DECLAREv_nume angajati.nume%TYPE; v_prenume angajati.prenume%TYPE; CURSOR c ISSELECT nume, prenume FROM angajatiWHERE TO_CHAR(data_angajarii, MM-YYYY)=03-1997ORDER BY data_angajarii ASC;BEGINOPEN c;LOOPFETCH c INTO v_nume, v_prenume;EXIT WHEN c%ROWCOUNT>5;DBMS_OUTPUT.PUT_LINE(v_nume||' `|| v_prenume);END LOOP;CLOSE c;END;

B. DECLAREv_nume angajati.nume%TYPE; v_prenume angajati.prenume%TYPE; CURSOR c ISSELECT nume, prenume FROM angajatiWHERE TO_CHAR(data_angajarii, `MM-YYYY')='03-1997'ORDER BY data_angajarii;BEGINOPEN c;LOOPFETCH c INTO v_nume, v_prenume;EXIT WHEN c%ROWCOUNT>5 OR c%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_nume||' `|| v_prenume);END LOOP;CLOSE c;END;

C. DECLAREv_nume angajati.nume%TYPE; v_prenume angajati.prenume%TYPE; CURSOR c ISSELECT nume, prenume FROM angajatiWHERE TO_CHAR(data_angajarii, `MM-YYYY')='03-1997'ORDER BY data_angajarii DESC;BEGINOPEN c;LOOPFETCH c INTO v_nume, v_prenume;EXIT WHEN c%ROWCOUNT<5 AND c%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_nume||' `|| v_prenume);END LOOP;END;

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 24: Sgbd From Vce

QUESTION 24Pachetele sunt unitati de program care pot cuprinde proceduri, functii, cursoare, tipuri de date, constante,variabile si exceptii.

A. TrueB. False

Answer: ACandidate Response: A (Correct)

Explanation/Reference:A

Page 25: Sgbd From Vce

QUESTION 25Se presupune că într-o sală a unui muzeu pot fi expuse maximum 10 opere de artă. Pentru aceasta se creeazăurmătorul trigger:

CREATE TRIGGER trigger_opereBEFORE INSERT OR UPDATE OF cod_sala ON operaFOR EACH ROWDECLAREv_max NUMBER := 10;v_nr NUMBER;BEGINSELECT COUNT(*) INTO v_nrFROM operaWHERE cod_sala =:NEW.cod_sala;IF v_nr + 1>v_max THENRAISE_APPLICATION_ERROR(-20000,'Prea multe opere de arta); END IF;END;

Care dintre urmatoarele variante este corecta?

A. Triggerul este creat fara erori la compilare si va functiona corect pentru toate comenzile LMD utilizateasupra tabelului opera.

B. Aceasta conditie poate fi implementata prin adaugarea unei constrangeri de tip CHECK asupra tabeluluiopera.

C. Triggerul este creat cu erori la compilareD. Triggerul este creat fara erori la compilare, dar in cazul anumitor comenzi LMD asupra tabelului opera va

genera eroarea "table mutating".

Answer: DCandidate Response: D (Correct)

Explanation/Reference:D

Page 26: Sgbd From Vce

QUESTION 26Ce trebuie adaugat la linia 11 pentru ca in urmatorul bloc PL/SQL sa se foloseasca corect cursorul?

1 DECLARE2 CURSOR c_ang IS3 SELECT *4 FROM angajati5 WHERE TO_CHAR(data_angajarii,'YYYY')=20006 FOR UPDATE OF salariu NOWAIT;7 BEGIN8 FOR v_c_ang IN c_ang LOOP9 UPDATE angajati10 SET salariu=salariu+100011 .............................12 END LOOP;13 END;

A. END UPDATE;B. WHERE CURRENT OF c_ang;C. FOR EACH ROWD. EXIT WHEN c_ang%NOTFOUND;

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 27: Sgbd From Vce

QUESTION 27Parametrii unei functii pot fi:

A. De intrare (IN), de intrare/iesire (IN/OUT) sau de iesire (OUT)B. Numai de intrare (IN)C. Numai de iesire (OUT)D. De intrare (IN) sau de iesire (OUT)

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 28: Sgbd From Vce

QUESTION 28Se da functia de mai jos ,care permite calcularea unui impozit pe salariu de 10%.

CREATE FUNCTION impozit(p_value IN NUMBER)RETURN NUMBER ISBEGINRETURN(p_value*0.1);END impozit;

Care este sintaxa corecta pentru a apela aceasta functie?

A. SELECT id_angajat, nume, salariu, impozit taxFROM angajatiWHERE id_departament=50;

B. VARIABILE tax:=impozit(salariu)SELECT id_angajat, nume, salariu, taxFROM angajatiWHERE id_departament=50;

C. SELECT id_angajat, nume, salariu, impozit(salariu) taxFROM angajatiWHERE id_departament=50;

D. DECLARE:tax NUMBERBEGIN:tax:= impozit(salariu);

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 29: Sgbd From Vce

QUESTION 29Se da urmatorul bloc PL/SQL:

DECLAREv_nume angajati.nume%TYPE;v_data angajati.data_angajarii%TYPE;CURSOR c ISSELECT nume, data_angajariiFROM angajati;BEGINOPEN c;LOOPINSERT INTO informatii (nume_angajat, data_angajarii)VALUES (v_nume, v_data);EXIT WHEN c%NOTFOUND;END LOOP;COMMIT;END;

Care dintre urmatoarele afirmatii este adevarata?

A. Blocul se executa fara erori, introducandu-se in tabelul informatii o linie cu toate valorile null , respectiv toateliniile din tabelul angajati

B. Executia blocului se incheie cu o eroare, deoarece cursorul c nu este inchis dupa ce este utilizatC. Executia blocului se incheie cu o eroare, deoarece utilizarea comenzii COMMIT nu este permisa in interiorul

unui bloc PL/SQLD. Blocul se executa fara erori, introducandu-se in tabelul informatii toate liniile din tabelul angajati

Answer: ACandidate Response: A (Correct)

Explanation/Reference:A

Page 30: Sgbd From Vce

QUESTION 30Care este varianta corecta de cod PL/SQL care sterge din tabelul joburi, joburile pentru care salariul minim este4000 sau 8200, daca aceste valori sunt mentinute intr-un vector?

A. DECLARETYPE min_sal IS VARRAY(20) OF NUMBER;v_min_sal min_sal:=min_sal(4000,8200);BEGINFORALL i IN v_min_sal.FIRST..v_min_sal. LASTDELETE FROM joburiWHERE salariu_min=v_min_sal(i);END;

B. DECLARETYPE min_sal IS VARRAY(20) OF NUMBER;v_min_sal min_sal:=min_sal(4000,8200);BEGINFOR i IN v_min_sal.FIRST..v_min_sal. LASTDELETE FROM joburiWHERE salariu_min=v_min_sal(i);END;

C. DECLARETYPE min_sal IS VARRAY(20) OF NUMBER;v_min_sal min_sal;BEGINFORALL i IN v_min_sal.FIRST..v_min_sal. LASTDELETE FROM joburiWHERE salariu_min=v_min_sal(i);END;

Answer: ACandidate Response: A (Correct)

Explanation/Reference:A

Page 31: Sgbd From Vce

QUESTION 31Se defineste un trigger care determina inserarea unei linii in tabelul angajati_log atunci cand salariul unuiangajat este marit.Care dintre urmatoarele variante este corecta?

A. CREATE TRIGGER trigger_salariuAFTER UPDATE OF salariu ON angajatiFOR EACH ROWBEGINIF :NEW.salariu>:OLD.salariu THENINSERT INTO angajati_log (utilizator, data, angajat, salariu_vechi, salariu_nou)VALUES (USER, SYSDATE, :OLD.id_angajat, :OLD.salariu, :NEW.salariu);END IF;END;

B. CREATE TRIGGER trigger_salariuAFTER UPDATE OF salariu ON angajatiWHEN (:NEW.salariu>:OLD.salariu)BEGININSERT INTO angajati_log (utilizator, data, angajat, salariu_vechi, salariu_nou)VALUES (USER, SYSDATE, :OLD.id_angajat, :OLD.salariu, :NEW.salariu);END;

C. CREATE TRIGGER trigger_salariuBEFORE UPDATE OF salariu ON angajati_logFOR EACH ROWBEGINIF NEW.salariu>OLD.salariu THENINSERT INTO angajati_log (utilizator, data, angajat, salariu_vechi, salariu_nou)VALUES (USER, SYSDATE, :OLD.id_angajat, :OLD.salariu, :NEW.salariu);END IF;END;

Answer: ACandidate Response: A (Correct)

Explanation/Reference:A

Page 32: Sgbd From Vce

QUESTION 32Care dintre urmatoarele vizualizari poate fi folosita in urmatoarea comanda pentru a vizualiza codul complet alsubprogramului P1:

SELECT TEXTFROM ....WHERE NAME = UPPER('P1');

A. USER_OBJECTSB. USER_ERRORSC. USER_FUNCTIONSD. USER_SOURCE

Answer: DCandidate Response: D (Correct)

Explanation/Reference:D

Page 33: Sgbd From Vce

QUESTION 33Exceptiile care se produc atunci cand un bloc PL/SQL nu respecta o regula ORACLE sau depaseste o limita asistemului de exploatare sunt :

A. Exceptii independenteB. Exceptii interneC. Exceptii predefiniteD. Exceptii externe

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 34: Sgbd From Vce

QUESTION 34Ce trebuie adaugat la linia 9 pentru ca urmatoarea functie sa fie corect creata?

1 CREATE OR REPLACE FUNCTION nr_sal(v_dept NUMBER)2 RETURN NUMBER IS3 v_numar NUMBER(3);4 BEGIN5 SELECT COUNT(*)6 INTO v_numar7 FROM angajati8 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.

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 35: Sgbd From Vce

QUESTION 35Care este varianta corecta prin care se adauga in tabelul angajati un nou camp numit telefon de tip tablouimbricat, pt care se vor stoca pt fiecare salariat numerele sale de telefon, si apoi se insereaza o linie noua intabel?

A. CREATE TYPE lista AS TABLE OF VARCHAR2(20);ALTER TABLE angajatiADD (telefon lista) NESTED TABLE telefon STORE AS tabel_tel; INSERT INTO angajatiVALUES(200,'xxx',4000,40000,lista(0214567898,0214567899));

B. CREATE TYPE lista AS TABLE OF VARCHAR2(20);ALTER TABLE angajatiADD telefon lista;INSERT INTO angajatiVALUES(200,'xxx',4000,40000,lista(0214567898,0214567899));

C. CREATE TYPE lista AS TABLE OF VARCHAR2(20);ALTER TABLE angajatiADD (telefon lista) NESTED TABLE telefon STORE AS tabel_tel; INSERT INTO angajati telefonVALUES((lista(0214567897,0214567898,0214567899));

Answer: ACandidate Response: A (Correct)

Explanation/Reference:A

Page 36: Sgbd From Vce

QUESTION 36Se da urmatorul bloc PL/SQL:

DECLAREnume VARCHAR2(15);v_nr INTEGER;BEGINSELECT LENGTH(nume) INTO v_nrFROM dual;DBMS_OUTPUT.PUT_LINE('Sirul are '||v_nr||'caractere');END;

Care din urmatoarele afirmatii este adevarata?

A. Va fi generata o eroare deoarece variabila nume este utilizata nefiind initializata.B. Blocul se executa fara erori si afiseaza 'Sirul are caractere').C. Blocul se executa fara erori si afiseaza 'Sirul are 0 caractere').D. Va fi generata o eroare deoarece variabila v_nr este utilizata nefiind initializata

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 37: Sgbd From Vce

QUESTION 37Care din urmatoarele declaratii de valabilitate este corecta?

A. v_id_student NUMBER(5);v_nume_student VARCHAR2(35) NOT NUL:=Ionescu;v_prenume_student CHAR(20);v_data DATE DEFAULT SYSDATE;

B. v_id_student NUMBER(5);v_nume_student VARCHAR2(35) NOT NUL:='Ionescu';v_prenume_student studenti.prenume%TYPE;v_data DATE:=SYSDATE+1;

C. v_id_student NUMBER(2):=150;v_nume_student studenti.nume%ROWTYPE:='Ionescu';v_prenume_student CHAR(20);v_data DATE:=SYSDATE+1;

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 38: Sgbd From Vce

QUESTION 38Se da urmatorul bloc PL/SQL

DECLARETYPE tabimb IS TABLE OF VARCHAR2(50);tab1 tabimb;tab2 tabimb:= tabimb ();BEGINIF tab1 IS NULL THENDBMS_OUTPUT.PUT_LINE(`tab1 este NULL');ELSEDBMS_OUTPUT.PUT_LINE(`tab1 este NOT NULL');END IF;IF tab2 IS NULL THENDBMS_OUTPUT.PUT_LINE(`tab2 este NULL');ELSEDBMS_OUTPUT.PUT_LINE(`tab2 este NOT NULL');END IF;END;

In urma executiei acestui bloc se obtine urmatorul rezultat:

A. tab1 este NOT NULLtab2 este NOT NULL

B. tab1 este NULLtab2 este NOT NULL

C. EROARED. tab1 este NULL

tab2 este NULL

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 39: Sgbd From Vce

QUESTION 39Care este varianta corecta pentru declararea urmatoarelor variabile?

A. v_valoare NUMBER(15) NOT NULL := 0;v_data_achizitie DATE DEFAULT SYSDATE;c_valoare CONSTANT NUMBER:=1000;v_cod_oper opere%TYPE;

B. v_valoare NUMBER(15) NOT NULL;v_data_achizitie DATE DEFAULT SYSDATE;c_valoare CONSTANT NUMBER;v_cod opera opere.cod_opera%TYPE;

C. v_valoare NUMBER(15) NOT NULL := 0;v_data_achizitie DATE DEFAULT SYSDATE;c_valoare CONSTANT NUMBER:= 1000;v_ cod_opera opere.cod_opera%TYPE;

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 40: Sgbd From Vce

QUESTION 40Care dintre urmatoarele vizualizari poate fi folosita in urmatoarea comanda pentru a vizualiza eroarea aparutala compilarea unui program

SELECT LINE, POSITION, TEXTFROM ....WHERE NAME =UPPER('nume');

A. USER_FUNCTIONSB. USER_OBJECTSC. USER_ERRORSD. USER_SOURCE

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 41: Sgbd From Vce

QUESTION 41Se presupune ca a fost creat tabelul dept(id_depatament, nr_angajati), care mentine pentru fiecaredepartament numarul de angajati care lucreaza in acesta. Prin comanda urmatoare se defineste vizualizareaview_angajati:

CREATE VIEW view_angajati ASSELECT id_angajat, nume, prenume, id_departament FROM angajati;

Care este varianta corecta prin care se defineste un trigger care va determina incrementarea cu 1 a numaruluide angajati din tabelul dept daca in vizualizare este inserata o inregistrare, respective decrementarea cu 1 anumarului de angajati din tabelul dept daca din vizualizare este stearsa o inregistrare?

A. CREATE TRIGGER trig_deptINSTEAD OF INSERT OR DELETE ON view_angajatiBEGINIF INSERTING THENUPDATE dept SET nr_angajati = nr_angajati +1;ELSEUPDATE dept SET nr_angajati = nr_angajati -1;END IF;END;

B. CREATE TRIGGER trig_deptINSTEAD OF INSERT OR DELETE ON view_angajatiFOR EACH ROWBEGINIF INSERTING THENUPDATE dept SET nr_angajati = nr_angajati +1;WHERE id_departament = :NEW.id_departament;ELSEUPDATE dept SET nr_angajati = nr_angajati -1;WHERE id_departament = :OLD.id_departament;END IF;END;

C. CREATE TRIGGER trig_deptAFTER INSERT OR DELETE ON view_angajatiFOR EACH ROWBEGINIF INSERTING THENUPDATE dept SET nr_angajati = nr_angajati +1;WHERE id_departament = :NEW.id_departament;ELSEUPDATE dept SET nr_angajati = nr_angajati -1;WHERE id_departament = :OLD.id_departament;END IF;END;

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 42: Sgbd From Vce

QUESTION 42Pentru ca urmatorul bloc PL/SQL sa fie corect trebuie adaugat la linia 6 urmatorul cod:

1 DECLARE2 TYPE typetablou IS TABLE OF NUMBER;3 tablou typetablou:= typetablou();4 BEGIN5 FOR i IN 1..10 LOOP6 ....................................7 tablou(i) :=i;8 END LOOP;9 END;

A. tablou.EXTEND;B. tablou:= typetablou();C. tablou(i):= typetablou();D. tablou(i).NEXT;

Answer: ACandidate Response: A (Correct)

Explanation/Reference:A

Page 43: Sgbd From Vce

QUESTION 43Pentru ca urmatorul bloc PL/SQL sa fie corect si sa afiseze codul, salariul si jobul angajatului cu codul 100,trebuie adaugat la linia 10 urmatorul cod:

SQL> DECLARE2 TYPE type_ang IS RECORD (3 ang_cod angajati.id_angajat%TYPE,4 sal angajati.salariu%TYPE,5 job angajati.id_job%TYPE);6 v_ang type_ang;7 BEGIN8 DELETE FROM angajati9 WHERE id_angajat=10010 ..............................................11 INTO v_ang;12 DBMS_OUTPUT.PUT_LINE (` Angajatul cu codul :'|| v_ang.ang_cod || 13 ` si jobul ` || v_ang.job || ` aresalariul ` || v_ang.sal); 14 END;

A. RETURNING angajati%rowtypeB. RETURNING id_angajat, RETURNING salariu, RETURNING id_jobC. RETURNING id_angajat, salariu, id_jobD. RETURNING v_ang

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 44: Sgbd From Vce

QUESTION 44Se presupune ca asupra tabelului angajati au fost definiti urmatorii 4 triggeri LMD:

- trigger 1 de tip BEFORE INSERT la nivel de comanda;- trigger 2 de tip BEFORE UPDATE la nivel de comanda;- trigger 3 de tip AFTER UPDATE la nivel de linie;- trigger 4 de tip AFTER DELETE la nivel de comanda.

O comanda UPDATE actualizeaza 3 inregistrari din tabelul angajati. In acest caz, de cate ori este executatfiecare trigger (in dreptul numelui triggerului este trecut numar de executii al acestuia)?

A. Trigger1 - 1Trigger2 - 1Trigger3 - 3Trigger4 - 1

B. Trigger1 - 0Trigger2 - 3Trigger3 - 3Trigger4 - 0

C. Trigger1 - 0Trigger2 - 1Trigger3 - 3

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 45: Sgbd From Vce

QUESTION 45Care este varianta corecta pentru afisarea variabilei v_mesaj ?

A. VARIABLE v_mesaj VARCHAR2 (50)BEGIN:v_mesaj := `Invat PL/SQL';PRINT v_mesaj;END;/

B. VARIABLE v_mesaj VARCHAR2 (30)BEGIN:v_mesaj := `Invat PL/SQL';END;/

C. VARIABLE v_mesaj VARCHAR2 (50)BEGIN:v_mesaj := `Invat PL/SQL';DBMS_OUTPUT.PUT_LINE ( v_mesaj);END;/

Answer: BCandidate Response: B (Correct)

Explanation/Reference:B

Page 46: Sgbd From Vce

QUESTION 46Variabila g_mesaj declarata ca mai jos este:

VARIABLE g_mesaj VARCHAR2 (50)BEGIN:g_mesaj := `Invat PL/SQL;END;

A. Variabila de substitutie.B. De tip record.C. Variabila de legatura.D. De tip varray.

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 47: Sgbd From Vce

QUESTION 47Care dintre urmatoarele variante apeleaza corect functia F_TEST care are un singur parametru numeric?

A. SELECT F_TEST (80)FROM DUAL ;

B. DECLAREnr NUMBER;BEGINNr:=F_TEST();END;

C. VARIABLE nr NUMBERCALL F_TEST () INTO:nr;PRINT nr

D. VARIABLE nr NUMBERCALL FUNCTION F_TEST (80) INTO:nr;PRINT nr

Answer: ACandidate Response: A (Correct)

Explanation/Reference:A

Page 48: Sgbd From Vce

QUESTION 48Pentru ca urmatorul bloc PL/SQL sa fie corect trebuie adaugat la linia 8 urmatorul cod:

SQL > DECLARE2 TYPE ang_record_type IS RECORD (3 nume VARCHAR2(20),4 departament NUMBER);5 ang_record ang_record_type;6 BEGIN7 SELECT nume, id_departament8 ...............................................9 FROM angajati WHERE id_angajat = 100;11 DBMS_OUTPUT.PUT_LINE (`Nume' || ang_record.nume ||' Departament ` || 13 ang_record.departament);14 END;

A. INTO ang_record_type%typeB. INTO ang_record_type%rowtypeC. INTO ang_record_typeD. INTO ang_record

Answer: DCandidate Response: D (Correct)

Explanation/Reference:D

Page 49: Sgbd From Vce

QUESTION 49Blocul urmator afiseaza:

DECLAREv_x NUMBER(9,2):=10;v_y NUMBER(9,2);v_message VARCHAR2(20);BEGINv_y:= NULL;IF v_x !=v_y THENv_message := ` NOT EQUAL';ELSE v_message := `EQUAL';END IF;DBMS_OUTPUT.PUT_LINE(v_message);END;

A. NOT EQUALB. EROAREC. EQUALD. NIMIC

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C

Page 50: Sgbd From Vce

QUESTION 50Codul sursa de mai jos defineste un pachet cu ajutorul caruia, utilizand un subprogram functie si un cursor, sepoate obtine salariul minim inregistrat pentru angajati si lista angajatilor care au salariul mai mare sau egaldecat acel minim +1000.

CREATE OR REPLACE PACKAGE pachet_min_sal ASCURSOR c_ang(nr NUMBER) RETURN angajati % ROWTYPE;FUNCTION f_min RETURN NUMBER ;END pachet_min_sal;CREATE OR REPLACE PACKAGE BODY pachet_min_sal ASCURSOR c_ang(nr NUMBER) RETURN angajati % ROWTYPE ISSELECT * FROM angajati WHERE salariu >nr+1000;FUNCTION f_minRETURN NUMBER ISminim NUMBER ;BEGINSELECT Min(salariu) INTO minim FROM angajati;RETURN minim;END f_min;END pachet_min_sal;

Care este varianta corecta de apelare pentru a obtine lista dorita?

A. DECLAREval_min NUMBER ;BEGINval_min:=pachet_min_sal.f_min;DBMS_OUTPUT.PUT_LINE(`Salariul minim ' || ' ` || val_min);FORv_cursor IN pachet_min_sal .c_ang(val_min)LOOPDBMS_OUTPUT.PUT_LINE(v_cursor.nume||' `|| v_cursor.salariu);END LOOP;END;

B. DECLAREval_min NUMBER ;BEGINDBMS_OUTPUT.PUT_LINE(`Salariul minim ' || ' ` || val_min);FORv_cursor IN pachet_min_sal .c_ang(val_min)LOOPDBMS_OUTPUT.PUT_LINE(v_cursor.nume||' `|| v_cursor.salariu);END LOOP;END;

C. DECLAREval_min NUMBER ;BEGINval_min:=pachet_min_sal.f_min;DBMS_OUTPUT.PUT_LINE(`Salariul minim ' || ' ` || val_min);FORv_cursor IN pachet_min_sal .c_ang(val_min)DBMS_OUTPUT.PUT_LINE(v_cursor.nume||' `|| v_cursor.salariu);END;

Answer: CCandidate Response: C (Correct)

Explanation/Reference:C