Sunteți pe pagina 1din 4

Nume si prenume

Grupa

SISTEME DE GESTIUNE A BAZELOR DE DATE


2022 gr. 2

1. Se da tabelul

Raspuns corect C : UPDATE Angajati SET Salariu = Salariu*1.01 WHERE


YEAR(DataAngajare)
= 2005;
2 Fie tabelele
b) SELECT DataFact, Nume
Raspuns corect :
FROM Clienti LEFT JOIN Facturi ON Clienti.CodCL=Facturi.CodCL
WHERE Date(DataFact) = #01/05/2007#
GROUP BY DataFact
HAVING COUNT(NrFactura)=0
3.Numele unui un cursor explicit apare in
a) Instructiunea INSERT
b) Intrctiunea FETCH
c) Instructiunea SELECT
d) Instructiunea CLOSE
e) La DECLARE CURSOR

4. Daţi un exemplu bloc de execuţie PL/SQL care defineşte şi utilizează un trigger după UPDATE
care modifica o înregistrare dintr-un alt tabel.
CREATE OR REPLACE TRIGGER verif_ore_lucrate
AFTER UPDATE
ON emp
FOR EACH ROW
BEGIN
if :new.salariu > 6880 then
update salarii2
set salariubaza = :new.salariu
where marca_anagajat = :new.marca_angajat;
end if;
END;

5. Scrieti un bloc PL/SQL care sa insereze un rând în coloana NUMCOL1 din tabela MESSAGES
conţinând 1 dacă este primul rând, 2 daca este al 2-lea s.a.m.d. Nu inserati rânduri etichetate 6 sau 8
si ieşiţi din ciclu când valoarea 10 a fost inserată. Blocul va executa şi tranzacţia de actualizare a
bazei de date.

Raspuns :

DECLARE
V_RESULTS MESSAGES.NUMCOL1%TYPE := 0;
BEGIN
LOOP
SELECT
MAX(NUMCOL1)
INTO V_RESULTS
FROM
MESSAGES;
V_RESULTS := NVL(V_RESULTS, 0) + 1;
IF V_RESULTS IN (
6,
8
) THEN
V_RESULTS := V_RESULTS + 1;
END IF;

INSERT INTO MESSAGES ( NUMCOL1) VALUES ( V_RESULTS );

EXIT WHEN V_RESULTS >= 10;


END LOOP;
END;

6 . Se da tabela

Daţi un exemplu bloc de execuţie PL/SQL care defineşte un cursor cu atributul %FOUND pentru
a afişa lista tuturor angajatilor cu salariul mai mare de 3000 prin nume, profesie şi salariu în
forma:
Nume = Trump, profesia = PRESIDENT, salariu = 500000

Raspuns :
SET SERVEROUTPUT ON;
DECLARE
CURSOR c1 IS SELECT ename,job, sal FROM emp WHERE sal> 3000;
my_ename emp.ename%TYPE;
my_job emp.job%TYpe;
my_sal emp.sal%TYPE;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO my_ename, my_job, my_sal;
IF c1%FOUND THEN
DBMS_OUTPUT.PUT_LINE('Nume = ' || my_ename || ', profesia=' || my_job || ', salariu= ' || my_sal);
ELSE
EXIT;
END IF;
END LOOP;
END;

S-ar putea să vă placă și