Sunteți pe pagina 1din 3

Nume si prenume

BAZE DE DATE
2022

Gr.4

1. O interogare fara clauza WHERE în ORACLE?


a) realizeaza o uniune externa
b) Realizeaza o uniune interna
c) Are ca rezultat un produs cartezian
d) Are ca rezultat o reunuiune de tabele
e) Produce eroare

2. O instructiune OPEN pentru un cursor în Oracle:


a) Include numele cursorului
b) Contine o declaratie de SELECT
c) Contine un ciclu LOOP
d) Include Numele tabelelor selectate
e) Determina rularea interogarii de definitie a cursorului si plasarea datelor in setul de rezultate
f) Nu se foloseste pentru toate cursoarele

3.Inainte de a extrage randuri cu un cursor explicit, acesta trebuie


a) Inchis
b) Declarat
c) Activat
d) Deschis
e) Finalizat

4. . Se da tabelul:
CREATE TABLE salarii2(
Marca_angajat INT NOT NULL,
an NUMBER(4) NOT NULL,
luna number(2) NOT NULL,
orelucrate NUMBER(3),
venitbaza NUMBER(16,2),
sporuri NUMBER(16,2),
impozit NUMBER(16,2),
retineri NUMBER(16,2),
CONSTRAINT pk_salarii PRIMARY KEY (marca_angajat,an,luna),
CONSTRAINT ck_salarii_an CHECK (an between 2001 and 2012),
CONSTRAINT pk_salarii_luna CHECK (luna BETWEEN 1 and 12)
);
Scrieti o functie care determina venitul net al angajatului cu numarul de inregistrare
“marca_angajat” (parametru de intrare. VenitNet= Venitbaza*(sporuri/100) – impozit -retineri).
Raspuns :
create or replace function venit_net(p_marca_angajat in number) as
v_venit_net number;
v_venit_baza number;
v_sporuri number;
v_impozit number;
v_retineri number;
begin
begin
select venitbaza, sporuri, impozit, retineri
into v_venit_baza, v_sporuri, v_impozit, v_retineri
from salarii2
where Marca_angajat = p_marca_angajat;
exception
when no_data_found then
v_venit_baza := '';
v_sporuri := '';
v_impozit := '';
v_retineri := '';
end;
v_venit_net := v_venit_baza*(v_sporuri/100) - v_impozit - v_retineri;
return v_venit_net;
end;

5. Daţi un exemplu bloc de execuţie PL/SQL care defineşte un cursor ce modifica salariul_pe_ora cu
10 procente in plus, daca este inferior valorii de 24 lei/ora.
Raspuns :

declare
v_salariul_pe_ora number;
v_marca_angajat number;
cursor c_salariu is
select Marca_angajat, salariul_pe_ora from salarii2;
begin
open c_salariu;
loop
fetch c_salariu into v_marca_angajat, v_salariul_pe_ora;
exit when c_salariu;%notfound;
if v_salariul_pe_ora < 24 then
update salarii2
set salariul_pe_ora = salariul_pe_ora + salariul_pe_ora*0.1
where marca_angalat = v_marca_angajat;
end if;
end loop;
end;

6. Definiti un trigger care avertizeaza daca la inserare in tabela de la punctul 4 numarul de ore
lucrate depaseste 180 pe luna.
Raspuns :

CREATE OR REPLACE TRIGGER verif_ore_lucrate


BEFORE INSERT
ON emp
FOR EACH ROW
BEGIN

if :new.orelucrate > 180 then


raise_application_error(-20000, 'Orele lucrate depasesc 180!');
end if;
END;

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