0% found this document useful (0 votes)
145 views5 pages

Subiecte Primite La Examen

The document contains 10 multiple choice questions related to PL/SQL programming. The questions cover topics such as calling stored procedures, using cursors, inserting data using loops, updating records, triggers, and arrays.

Uploaded by

pitzmaster_88
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
145 views5 pages

Subiecte Primite La Examen

The document contains 10 multiple choice questions related to PL/SQL programming. The questions cover topics such as calling stored procedures, using cursors, inserting data using loops, updating records, triggers, and arrays.

Uploaded by

pitzmaster_88
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 5

1.

Care este varianta corecta pentru a afisa  valoarea returnata de urmatoarea procedura stocata care
calculeaza salariul minim al angajatilor?

CREATE PROCEDURE min_sal (sal OUT angajati.salariu%TYPE)


AS
BEGIN
    SELECT MIN(salariu)
    INTO      sal
    FROM    angajati;
END;

a. VARIABLE val NUMBER


EXECUTE min_sal  (val)
PRINT val 

b. DBMS_OUTPUT.PUT_LINE('numarul salariu minim ' || min_sal(val));

c. VARIABLE val NUMBER


EXECUTE min_sal  (:val)
PRINT val 

d.   ACCEPT val NUMBER


EXECUTE  min_sal (:val)
PRINT val 

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; 

3. Sa se introduca in tabelul testare(cod NUMBER(2)) 5 inregistrari, avand codurile egale cu 1, 2, 3, 4


respectiv 5.
Care dintre  urmatoarele variante executa acest deziderat? 
   
 a.   DECLARE
    v_contor NUMBER(2) := 1;
BEGIN 
    LOOP   
        INSERT INTO testare  VALUES (v_contor);   
        v_contor := v_contor + 1;   
        EXIT WHEN v_contor > 5; 
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;

Care dintre urmatoarele afirmatii este adevarata?


a. Executia blocului se incheie cu o eroare, deoarece clauza SET a comenzii UPDATE este utilizata gresit. 
b. Executia blocului se incheie cu o eroare, deoarece comanda COMMIT nu poate fi utilizata intr-un bloc
PL/SQL. 
c. Blocul se executa fara erori si afiseaza mesajul 'Nu exista un angajat cu acest cod' daca angajatul avand
codul 100 nu exista in tabelul angajati sau mesajul 'Actualizare realizata' in caz contrar. 
d. Executia blocului se incheie cu o eroare, deoarece metoda ROWCOUNT este utilizata pentru un cursor
nedeclarat. 

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; 

6. Care dintre urmatoarele afirmatii este corecta?

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; 

8. Care dintre urmatoarele afirmatii  este corecta?

a. Un trigger nu 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 nu 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. 
9. Ce se va afisa in urma executiei urmatorului bloc?

SQL> DEFINE  p_a = 'xxx'


SQL> DECLARE
  2    v_a  CHAR(3) := UPPER('&p_a');
  3  BEGIN
  4  CASE  v_a
  5    WHEN  'UB'  THEN DBMS_OUTPUT.PUT_LINE('Univ. Bucuresti');
  6    WHEN 'USH' THEN DBMS_OUTPUT.PUT_LINE('Univ. Spiru Haret');
  7    ELSE DBMS_OUTPUT.PUT_LINE('Este o eroare!');
  8  END CASE;
  9  END;
  10  /

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%

You might also like