Subiecte Primite La Examen
Subiecte Primite La Examen
Care este varianta corecta pentru a afisa valoarea returnata de urmatoarea procedura stocata care
calculeaza salariul minim al angajatilor?
2. Care este varianta incorecta prin care se afiseaza numele si prenumele primelor 5 persoane angajate in luna
martie in anul 1997?
a. DECLARE
v_nume angajati.nume%TYPE; v_prenume angajati.prenume%TYPE;
CURSOR c IS
SELECT nume, prenume FROM angajati
WHERE TO_CHAR(data_angajarii,'MM-YYYY') = '03-1997'
ORDER BY data_angajarii;
b. BEGIN
OPEN c;
LOOP
FETCH 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. DECLARE
CURSOR c IS
SELECT nume v_nume, prenume v_prenume FROM angajati
WHERE TO_CHAR(data_angajarii,'MM-YYYY') ='03-1997'
ORDER BY data_angajarii ASC;
BEGIN
FOR i IN c LOOP
DBMS_OUTPUT.PUT_LINE(c.v_nume || ' '||c.v_prenume);
END LOOP;
END;
d. BEGIN
FOR c IN (SELECT * FROM (
SELECT nume v_nume, prenume v_prenume FROM angajati
WHERE TO_CHAR(data_angajarii,'MM-YYYY') = '03-1997'
ORDER BY data_angajarii DESC)
WHERE ROWNUM<=5) LOOP
DBMS_OUTPUT.PUT_LINE(c.v_nume || ' '||c.v_prenume);
END LOOP;
END;
b. DECLARE
v_contor NUMBER(2) := 1;
BEGIN
FOR i IN 1..5 LOOP
INSERT INTO testare VALUES (v_contor);
END LOOP;
END;
DECLARE
v_contor NUMBER(2) := 1;
c. BEGIN
WHILE v_contor < 6 LOOP
INSERT INTO testare VALUES (v_contor);
v_contor := v_contor - 1;
END LOOP;
END;
d. BEGIN
FOR i IN 5..1 LOOP
INSERT INTO testare VALUES (i);
END LOOP;
END;
4. Se da urmatorul bloc PL/SQL:
DECLARE
v_cod_sal angajati.id_angajat%TYPE:= 100;
v_cod_dept angajati.id_departament%TYPE:= 10;
v_procent NUMBER(8):=20;
BEGIN
UPDATE angajati
SET id_departament := v_cod_dept
AND salariu := salariu + (salariu* v_procent/100)
WHERE id_angajat = v_cod_sal;
IF SQL%ROWCOUNT =0 THEN
DBMS_OUTPUT.PUT_LINE('Nu exista un angajat cu acest cod');
ELSE
COMMIT;
DBMS_OUTPUT.PUT_LINE('Actualizare realizata');
END IF;
END;
5. Care este varianta corecta prin care se obtine pentru fiecare departament lista angajatilor care lucreaza in
acesta, in rezultat incluzandu-se si departamentele in care nu lucreaza nimeni?
a. BEGIN
FOR d IN (SELECT nume_departament FROM departamente) LOOP
DBMS_OUTPUT.PUT_LINE('Departamentul ' || d.nume_departament);
FOR a IN (SELECT nume FROM angajati) LOOP
DBMS_OUTPUT.PUT_LINE('Angajatul ' || a.nume);
END LOOP;
END LOOP;
END;
b. BEGIN
FOR d IN (SELECT nume_departament, nume
FROM departamente d, angajati a
WHERE d.id_departament = a.id_departament) LOOP
DBMS_OUTPUT.PUT_LINE('Departamentul ' || d.nume_departament);
DBMS_OUTPUT.PUT_LINE('Angajatul ' || d.nume);
END LOOP;
END;
c. BEGIN
FOR d IN (SELECT nume_departament, id_departament FROM departamente) LOOP
DBMS_OUTPUT.PUT_LINE('Departamentul ' || d.nume_departament);
FOR a IN (SELECT nume FROM angajati
WHERE id_departament=d.id_departament) LOOP
DBMS_OUTPUT.PUT_LINE('Angajatul ' || a.nume);
END LOOP;
END LOOP;
END;
a. Atunci cand un tabel este sters, triggeri asociati acestuia sunt eliminati.
b. Corpul unui trigger nu poate contine comenzi LMD.
c. Blocul PL/SQL care descrie actiunea unui trigger poate contine comanda COMMIT.
d. In clauza ON din definitia unui trigger pot fi specificate mai multe tabele sau vizualizari.
7. Care este varianta de bloc PL/SQL corecta pentru a mentine intr-un vector codurile angajatilor care au
salariul mai mic decat 20000 si nu lucreaza in departamentul 80 sau 90?
a. DECLARE
TYPE t_id IS VARRAY(100) OF angajati.id_angajat%TYPE ;
v_id t_id := t_id();
BEGIN
SELECT id_angajat INTO v_id
FROM angajati
WHERE id_departament=90 AND salariu < 20000;
END;
b. DECLARE
TYPE t_id IS VARRAY(100) OF angajati.id_angajat%TYPE ;
v_id t_id := t_id() ;
BEGIN
SELECT id_angajat BULK COLLECT INTO t_id
FROM angajati
WHERE id_departament NOT IN (80, 90) AND salariu < 20000;
END;
c. DECLARE
TYPE t_id IS VARRAY(100) OF angajati.id_angajat%TYPE ;
v_id t_id := t_id();
BEGIN
SELECT id_angajat BULK COLLECT INTO v_id
FROM angajati
WHERE id_departament = 90 AND salariu < 20000;
END;
a. Univ. Bucuresti
b. Univ. Spiru Haret
c. Eroare intoarsa de sistem
d. Este o eroare!
10. Care nu este varianta corecta de cod PL/SQL care sterge din tabelul joburi, joburile pentru care salariul
minim este 4000 sau 8200, daca aceste valori sunt mentinute intr-un vector?
a. DECLARE
TYPE min_sal IS VARRAY(20) OF NUMBER;
v_min_sal min_sal:= min_sal(4000,8200);
BEGIN
FOR i IN v_min_sal.FIRST..v_min_sal.LAST LOOP
DELETE FROM joburi
WHERE salariu_min = v_min_sal(i);
END LOOP;
END;
b. DECLARE
TYPE min_sal IS VARRAY(20) OF NUMBER;
v_min_sal min_sal:= min_sal(4000,8200);
BEGIN
FORALL i IN v_min_sal.FIRST..v_min_sal.LAST
DELETE FROM joburi
WHERE salariu_min = v_min_sal(i);
END;
c. DECLARE
TYPE min_sal IS VARRAY(20) OF NUMBER;
v_min_sal min_sal;
BEGIN
FORALL i IN v_min_sal.FIRST..v_min_sal.LAST
DELETE FROM joburi
WHERE salariu_min = v_min_sal(i);
END;
REZULTAT 40%