Documente Academic
Documente Profesional
Documente Cultură
Grupa
1. Se da tabelul
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;
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;