Documente Academic
Documente Profesional
Documente Cultură
Bucureti
Cibernetic, Statistic i
Informatic Economic
Disciplina: SGBD
Profesor:
Seria A
Firma S.C.ALPROM.S.A. are ca domeniu de activitate
proiectarea si productia de elemente profilate din lemn, servicii
de prelucrare PAL si comercializarea materialelor pentru
productia de mobilier din PAL melaminat si elemente profilate
din lemn pentru amenajari interioare si lucrari de constructii.
Pentru a gestiona cu usurin informaiile legate de
produsele i comenzile diferiilor clieni, am creat aceast baz
de date, care cuprinde 5 tabele: Angajai, Clieni, Comenzi,
Produse i Rnd Comenzi.
create table PRODUSE
(id_produs number(5),
denumire_produs varchar2(30) not null,
descriere varchar(500),
cantitate_produs number(8),
pret number(8,2) );
create table RAND_COMENZI
( nr_comanda NUMBER(12),
id_produs NUMBER(5) not null,
pret
NUMBER(8,2),
cantitate NUMBER(8) );
create table COMENZI
(nr_comanda NUMBER(12),
data_comanda DATE,
id_client NUMBER(5),
stare_comanda VARCHAR2(25),
id_angajat NUMBER(5) );
create table ANGAJATI
(id_angajat NUMBER(5),
prenume
VARCHAR2(20) not null,
nume
VARCHAR2(20) not null,
email
VARCHAR2(25) unique,
telefon
VARCHAR2(20) unique,
data_angajare DATE,
salariul
NUMBER(8,2) );
In tabela PRODUSE:
INSERT INTO PRODUSE VALUES(1,'Scaun Janin', 'Scaun din
lemn (brad)',10,130);
INSERT INTO PRODUSE VALUES(2,'Taburet Cool', 'Taburet
stofa(n culori)',20,200);
INSERT INTO PRODUSE VALUES(3,'Fotoliu Dream', 'Fotoliu
(alb-negru)',10,420);
INSERT INTO PRODUSE VALUES(4,'Hol Laura', 'Canapea
extensibila(stofa,brate din lemn',3,2199);
INSERT INTO PRODUSE VALUES(5,'Hol Alex', 'Canapea 3 locuri
cu extensie(beige)',2,2450);
INSERT INTO PRODUSE VALUES(6,'Masa Cleo', 'Masa
wenge',7,320);
INSERT INTO PRODUSE VALUES(7,'Masa bucatarie', 'Masa
lemn de nuc',4,265);
INSERT INTO PRODUSE VALUES(8,'Masa fixa', 'Masa
stejar',3,350);
INSERT INTO PRODUSE VALUES(9,'Pat Classic', 'Pat lemn de
fag lacuit',2,780);
INSERT INTO PRODUSE VALUES(10,'Pat suprapus', 'Pat
metalic',100,500);
INSERT INTO PRODUSE VALUES(11,'Patut Mickey','Patut verde
transformer',5,690);
INSERT INTO PRODUSE VALUES(12,'Birou Gama', 'Birou mic si
practic pt. calculator',8,450);
COMMIT;
In tabela RAND_COMENZI:
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
RAND_COMENZI
RAND_COMENZI
RAND_COMENZI
RAND_COMENZI
RAND_COMENZI
RAND_COMENZI
RAND_COMENZI
RAND_COMENZI
VALUES(1,4,2199,1);
VALUES(2,3,420,3);
VALUES(3,1,130,5);
VALUES(4,2,200,3);
VALUES(5,7,265,1);
VALUES(6,10,500,50);
VALUES(7,12,450,2);
VALUES(8,11,690,1);
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
COMMIT;
RAND_COMENZI
RAND_COMENZI
RAND_COMENZI
RAND_COMENZI
VALUES(9,7,265,1);
VALUES(10,6,500,1);
VALUES(11,9,690,2);
VALUES(12,8,450,1);
In tabela COMENZI:
INSERT INTO COMENZI
finalizata',001);
INSERT INTO COMENZI
finalizata',002);
INSERT INTO COMENZI
finalizata',008);
INSERT INTO COMENZI
anulata',004);
INSERT INTO COMENZI
finalizata',003);
INSERT INTO COMENZI
finalizata',007);
INSERT INTO COMENZI
finalizata',003);
INSERT INTO COMENZI
anulata',004);
INSERT INTO COMENZI
finalizata',003);
INSERT INTO COMENZI
finalizata',002);
INSERT INTO COMENZI
finalizata',001);
INSERT INTO COMENZI
finalizata',009);
COMMIT;
VALUES(1,'30.01.2012',3,'
VALUES(2,'14.02.2012',3,'
VALUES(3,'15.02.2012',4,'
VALUES(4,'15.02.2012',1,'
VALUES(5,'15.02.2012',2,'
VALUES(6,'16.02.2012',7,'
VALUES(7,'18.02.2012',5,'
VALUES(8,'15.03.2012',6,'
VALUES(9,'30.04.2012',7,'
VALUES(10,'04.06.2012',6,'
VALUES(11,'16.07.2012',1,'
VALUES(12,'21.09.2012',4,'
In tabela ANGAJATI:
INSERT INTO ANGAJATI VALUES(1,'Iordache',
'Andrei','io.andrei@alprom.ro
','0744128488','02.10.2002',1850);
INSERT INTO ANGAJATI VALUES(2,'Stefan',
'Baicu','steff_b@alprom.ro
','0742789182','04.03.2002',1900);
INSERT INTO ANGAJATI VALUES(3,'Andreea',
'Saul','sauldeea@alprom.ro','0723857425','12.11.2005',2480);
INSERT INTO ANGAJATI VALUES(4,'Boros',
'Cosmin','cosma@alprom.ro
','0741123456','17.06.1005',2950);
INSERT INTO ANGAJATI VALUES(5,'Dorel',
'Icogrum','ico_dorel@alprom.ro
,'0733978544','25.10.2011',1550);
INSERT INTO ANGAJATI VALUES(6,'Ioana',
'Badea','ioanab@gmail.com,'0765890775','29.07.2005',2800);
INSERT INTO ANGAJATI VALUES(7,'Vasile',
'Stoica','stoicavasi@gmail.com','0741886675','10.12.2009',2640);
INSERT INTO ANGAJATI VALUES(8,'Mircea',
'Ionescu','ionescu.m@yahoo.com','0744095518','04.01.2008',365
0);
INSERT INTO ANGAJATI VALUES(9,'Laura',
'Pop','pop_laura@alprom.ro
,'0743442908','30.03.20014',1900);
COMMIT;
In tabela CLIENTI:
INSERT INTO CLIENTI VALUES(1,'S.C. KOSEPA S.R.L.', 'RO
867552',' Industriilor',14,' 021890627','kosepa@gmail.com');
INSERT INTO CLIENTI VALUES(2,'S.C.BENVENUTII S.R.L.', 'RO
779952',' Mihai VBravu',79,' 0217985','radix.srl@yahoo.com');
INSERT INTO CLIENTI VALUES(3,'S.C. APLA S.R.L.', 'RO
1672885',' Soseaua de centura',116,'
0753991112',aplalux@gmail.com);
INSERT INTO CLIENTI VALUES(4,'SC.RDS-RCS S.A.', 'RO
7124124',' Bulevardul Stefan cel Mare',89,'
021121212','rds.rcs@rds.ro');
v_cant produse.canitate_produs%type;
BEGIN
SELECT cantitate_produs into v_cant from produse
where id_produs=1;
dbms_out.put_line(Stocul initial este: || v_cant);
IF
v_cant <10 then v_cant:=2*v_cant;
ELSIF v_cant between 10-20 then
v_cant:=2*v_cant;
ELSE
v_cant:=1.25&v_cant;
end if;
dbms_out.put_line(Stocul final este: ||v_cant);
end;
8. Afiai angajaii cu id-urile n intervalul 1-7 att timp ct
salariul acestora este mai mic dect media salariilor.
DECLARE
v_sal angajati.salariul%type;
v_sal_mediu v_sal%type;
i number(4):=1;
BEGIN
select avg(salariul) into v_sal_mediu from angajati;
dbms_output.put_line('Salariul mediu este: '||v_sal_mediu);
loop
select salariul into v_sal from angajati where id_angajat=i;
dbms_output.put_line('Angajatul cu codul '||i||' are salariul:
'||v_sal);
i:=i+1;
exit when v_sal<v_sal_mediu or i>7;
end loop;
END;
/
10. Creai o nou tabel: EMPLOYEE, care s conin idul, numele i prenumele primilor 3 angajai din tabela
Angajai folosind un cursor explicit.
CREATE TABLE EMPLOYEE
(cod varchar2(7),
nume varchar2(30),
prenume varchar2(30)
);
DECLARE
v_id angajati.id_angajat%type;
v_nume angajati.nume%type;
v_prenume angajati.prenume%type;
cursor c is select id_angajat, nume, prenume from angajati;
BEGIN
open c;
for i in 1..3 loop
fetch c into v_id, v_nume, v_prenume;
insert into EMPLOYEE values(v_id, v_nume, v_prenume);
end loop;
close c;
END;
/
TRATAREA EXCEPTIILOR
raise nu_exista_ang;
end if;
exception when nu_exista_ang then
dbms_output.line('Nu exista angajatul ! ');
end;
/
16.Sa se stearga
toate nregistrrile din tabela:
PRODUSE2, dup care creati o nou tabel: ERORI care
s conin valorile SQLCODE i SQLERRM.
create table ERORI
(utilizator varchar2(40),
cod_eroare number(10),
mesaj_eroare varchar2(255)
);
DECLARE
cod number;
mesaj varchar2(255);
del_exception exception;
pragma exception_init (del_exception, -2292);
BEGIN
delete from produse2;
EXCEPTION
when del_exception then
dbms_output.put_line('Produsul nu poate fi ters. ');
dbms_output.put_line('Exist comenzi n derulare. ');
cod:=SQLCODE
mesaj:=SQLERRM;
insert into ERORI values(user, cod, mesaj);
END;
/
function exista_comanda
(nr comenzi.nr_comanda%type);
return boolean;
exceptie exception;
END;
/
CREATE OR REPLACE PACKAGE BODY actualizare_comanda IS
procedure insert_comanda(nr comenzi.nr_comanda%type, data
comenzi.data_comanda%type,idC comenzi.id_client%type,stare
comenzi.stare_comanda%type,idA comenzi.id_angajat%type)
IS
BEGIN
if exista_comanda(nr) then raise exceptie;
else
insert into comenzi valuse(nr,data,idC,stare,idA);
end if ;
exception
when exception then dbms_out.put_line('Comanda existenta! ');
procedure modifica_comanda
(nr comenzi.nr_comanda%type, data comenzi.data_comanda
%type,idC comenzi.id_client%type,stare comenzi.stare_comanda
%type,idA comenzi.id_angajat%type)
IS
BEGIN
if exista_comanda(nr) then
update comenzi
set data_comanda=data,id_client=idC,stare_comanda=stare,
id_angaja=idA;
where nr_comanda=nr;
else
raise exceptie;
end if;
exception
when exceptie then
dbms_output.put_line('Comanda cu nr '||nr|| ' nu exista');
procedure sterge_comanda
(nr comenzi.nr_comanda%type)
is
begin
if exista_comanda(nr) then
delete from comenz
where nr_comanda=nr;
dbms_out.put_line('Comanda cu nr '||nr|| ' nu exista!');
end;
function exista_comanda
(nr comenz.nr_comanda%type)
return boolean
is
v_nr number;
select * into v_nr
from comenz
where nr_comanda=nr;
return true;
exception
when no_data_found then
return false;
end;
END;
/
23. Realizai un trigger care s nu permit depirea unei limite
maxime a salariului unui angajat.
CREATE or replace trigger restrictie
before insert or update on angajati
for each row
DECLARE
sal_max number;
BEGIN
select max(salariul) into sal_max from angajati where
id_funct :new.id_functie;
if :new.salariul>v_sal_max then
raise_application_error (-20202, 'Nu se poate depsi
salariul maxim');
end if;
END;
/