Sunteți pe pagina 1din 7

Cebotari Ion

1. De creat o procedura stocata care are un parametru de iesire. Procedura va cauta o

valoare in tabela BD individuale. Apelati.

2. De creat o functie care are un parametru de intrare pentru a determina valoarea medie

a unui camp din tabelele BD individuale. Apelati.

3. Intr-un bloc anonym. Repartizati suma S la studenti (bursa) dupa urmatorul algoritm.

Daca media este intre 8 si 10 se adauga la bursa proportional numarului de studenti

(S/n) altfel se scad 10% si se pastreaza intr-o variabila.

Baza de date:

create table Cazare(

Cod_cazare number(20),

Cod_client number(20),

Cod_numar number(20),

Data_cazare date,

Data_plecare date,

Pret number(20) );

insert into Cazare values(5,2,5,'06.12.2021','06.20.2021',800);

insert into Cazare values(4,4,3,'10.24.2021','10.30.2021',550);

insert into Cazare values(7,5,4,'05.01.2021','10.30.2021',600);

insert into Cazare values(8,8,8,'02.18.2021','02.24.2021',360);

insert into Cazare values(9,6,7,'02.06.2021','02.16.2021',1200);

insert into Cazare values(1,3,9,'05.01.2021','05.05.2021',380);

insert into Cazare values(2,7,6,'02.18.2021','02.28.2021',1000);

COD_CAZAR

COD_CLIEN

T COD_NUMAR DATA_CAZAR
E

DATA_PLECAR

7 5 4 05/01/2021 10/30/2021 600

8 8 8 02/18/2021 02/24/2021 360

2 7 6 02/18/2021 02/28/2021 1000

5 2 5 06/12/2021 06/20/2021 800

4 4 3 10/24/2021 10/30/2021 550

9 6 7 02/06/2021 02/16/2021 1200

1 3 9 05/01/2021 05/05/2021 380

7 5 4 05/01/2021 10/30/2021 600

--Pretul clientilor cazati pe 18.02.2021 se va mari cu 500

create or replace procedure marire_pret(x in number) is

pr Cazare.pret%type;

cursor c1 is select pret from Cazare where Data_cazare = '02.18.2021';

begin

open c1;

loop

fetch c1 into pr;

exit when c1%notfound;

pr:= pr + x;

dbms_output.put_line('pret = ' || pr);

end loop;

close c1;

end;

DECLARE

c number :=500;
BEGIN

marire_pret(c);

END;

Procedure created.

pret = 860

pret = 1500

Statement processed.

Trigger-ul:

create or replace trigger dif_pret--Trigger-ul calculeaza diferenta dintre pretul precedent si cel introdus
nou.

before update on Cazare

FOR EACH ROW

DECLARE

dif number;

BEGIN

dif := :NEW.pret - :OLD.pret;

dbms_output.put_line('Pretul precedent: ' || :OLD.pret);

dbms_output.put_line('Pretul nou: ' || :NEW.pret);

dbms_output.put_line('Diferrnta dintre preturi: ' || dif);

END;

Trigger created.

UPDATE Cazare

SET pret = pret + 50

WHERE cod_client = 5;

Pretul precedent: 600

Pretul nou: 650

Diferrnta dintre preturi: 50

Functia:
--Functia afla cel mai scump numar

create or replace function max_pret return number is

pt number;

begin

select max(pret) into pt from cazare ;

return pt;

end;

Function created.

DECLARE

b number;

BEGIN

b := max_pret;

dbms_output.put_line('Pretul maxim al numarului: ' || b);

END;

Pretul maxim al numarului: 1200

Pachet-ul:

create or replace package schimb_cazare as

procedure cazare_noua(

caz_cod cazare.cod_cazare%type,

caz_cli cazare.cod_client%type,

caz_num cazare.cod_numar%type,

caz_dat cazare.data_cazare%type,

caz_plec cazare.data_plecare%type,

caz_pr cazare.pret%type

);

procedure stergere_cazare(

caz_cod cazare.cod_cazare%type);
procedure afisare_cazari;

end schimb_cazare;

Package created.

Create or replace package body schimb_cazare as

procedure cazare_noua(

caz_cod cazare.cod_cazare%type,

caz_cli cazare.cod_client%type,

caz_num cazare.cod_numar%type,

caz_dat cazare.data_cazare%type,

caz_plec cazare.data_plecare%type,

caz_pr cazare.pret%type

) is

begin

insert into cazare (cod_cazare,cod_client,cod_numar,data_cazare,data_plecare,pret)

values(caz_cod, caz_cli, caz_num, caz_dat, caz_plec, caz_pr);

end cazare_noua;

procedure stergere_cazare(caz_cod cazare.cod_cazare%type) is

begin

delete from cazare where cod_cazare= caz_cod;

end stergere_cazare;

procedure afisare_cazari is

cursor c_caz is

select cod_cazare from cazare;

type c_afisare is table of cazare.cod_cazare%type;


cod_cazare_afisare c_afisare := c_afisare();

contor integer :=0;

begin

for n in c_caz loop

contor := contor+ 1;

cod_cazare_afisare.extend;

cod_cazare_afisare(contor) := n.cod_cazare;

dbms_output.put_line('Cazari(' ||contor|| ')'||cod_cazare_afisare(contor) );

end loop;

end afisare_cazari;

end schimb_cazare;

Package Body created.

DECLARE

cod cazare.Cod_cazare%type:= 8;

BEGIN

schimb_cazare.cazare_noua(10,11,21,'01.25.2021','01.30.2021',450);

schimb_cazare.cazare_noua(12,10,14,'06.19.2021','06.23.2021',940);

schimb_cazare.afisare_cazari;

schimb_cazare.stergere_cazare(cod);

schimb_cazare.afisare_cazari;

END;

Cazari(1)7

Cazari(2)8

Cazari(3)2

Cazari(4)5

Cazari(5)4

Cazari(6)9

Cazari(7)1
Cazari(8)7

Cazari(9)10

Cazari(10)12

Cazari(1)7

Cazari(2)2

Cazari(3)5

Cazari(4)4

Cazari(5)9

Cazari(6)1

Cazari(7)7

Cazari(8)10

Cazari(9)12

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