Sunteți pe pagina 1din 11

Proiect EABD PL/SQL

Tema Proiect:
Transport marfa

Proiect Elemente Avansate de Baze de Date


Informatica Economica ID, An.3
Bihari Zsolt - Mihaly
1. Scenariu descriptiv:

Compania de transport si logistica Gebruder Weiss este prezenta pe piata cu o vechime si


experienta vasta. Filiala din Cluj Napoca opereaza de mai bine de 8 ani, oferind mai multe
servicii, precum: solutii de depozitare si logistica, servicii de transport rutier de marfuri, atat
la nivel national cat si international. Oferta distributiei nationale este una competitiva,
castigand increderea mai multor client mari din diverse domenii.
In cele ce urmeaza, prin baza de date implementata si pe platforma Oracle Application
Express, voi evidentia principlaii clienti cu care lucreaza compania, diferitele tipuri de
marfuri transportate, ariile acoperite de filiala din Cluj Napoca, volumul de marfa transportat
si costurile efective de transport.

2. Crearea tabelelor:
CREATE table "ARII" (
"ID_ARII" NUMBER NOT NULL,
"INDICATIV" VARCHAR2(35) NOT NULL,
"ORAS" VARCHAR2(30) NOT NULL,
constraint "ARII_PK" primary key ("ID_ARII")
)
/

CREATE sequence "ARII_SEQ"


/

CREATE trigger "BI_ARII"


before insert on "ARII"
for each row
begin
if :NEW."ID_ARII" is null then
select "ARII_SEQ".nextval into :NEW."ID_ARII" from sys.dual;
end if;
end;
/
/
ALTER TRIGGER "BI_ARII" ENABLE
/
- Dupa cum se poate observa s-a creat o secventa ARII_SEQ pentru a se asigura auto-
increment. Folosind trigger, adaug automat la popularea tabelelor un index
incrementat de la 1+ fiecarei intrari.
CREATE table "CLIENTI" (
"ID_CLIENTI" NUMBER NOT NULL,
"CUI" NUMBER(6,0) NOT NULL,
"DENUMIRE" VARCHAR2(25) NOT NULL,
"STRADA" VARCHAR2(25) NOT NULL,
"NUMAR" CHAR(7) NOT NULL,
"LOCALITATE" VARCHAR2(30) NOT NULL,
constraint "CLIENTI_PK" primary key ("ID_CLIENTI")
)
/

Proiect Elemente Avansate de Baze de Date


Informatica Economica ID, An.3
Bihari Zsolt - Mihaly
CREATE sequence "CLIENTI_SEQ"
/

CREATE trigger "BI_CLIENTI"


before insert on "CLIENTI"
for each row
begin
if :NEW."ID_CLIENTI" is null then
select "CLIENTI_SEQ".nextval into :NEW."ID_CLIENTI" from sys.dual;
end if;
end;
/

CREATE TABLE "MARFA"


( "COD_PRODUS" NUMBER(2,0) NOT NULL ENABLE,
"TIP" VARCHAR2(35) NOT NULL ENABLE,
"VOLUM" VARCHAR2(25) NOT NULL ENABLE,
CONSTRAINT "MARFA_PK" PRIMARY KEY ("COD_PRODUS")
USING INDEX ENABLE
)
/

CREATE table "COSTURI" (


"ID_COST" NUMBER NOT NULL,
"TARIF_MINIM" NUMBER(5,10) NOT NULL,
"PRET_VOLUM" NUMBER(5,15) NOT NULL,
constraint "COSTURI_PK" primary key ("ID_COST")
)
/

CREATE sequence "COSTURI_SEQ"


/

CREATE trigger "BI_COSTURI"


before insert on "COSTURI"
for each row
begin
if :NEW."ID_COST" is null then
select "COSTURI_SEQ".nextval into :NEW."ID_COST" from sys.dual;
end if;
end;
/

3. Popularea tabelelor:
INSERT INTO "ARII"("ID_ARII","INDICATIV","ORAS")
VALUES ('','SJ', 'ZALAU');
INSERT INTO "ARII"("ID_ARII","INDICATIV","ORAS")
VALUES ('','CJ', 'CLUJ');
INSERT INTO "ARII"("ID_ARII","INDICATIV","ORAS")
VALUES ('','SM', 'SATU MARE');
INSERT INTO "ARII"("ID_ARII","INDICATIV","ORAS")
VALUES ('','MM', 'BAIA MARE');
INSERT INTO "ARII"("ID_ARII","INDICATIV","ORAS")
VALUES ('','BN', 'BISTRITA');

Proiect Elemente Avansate de Baze de Date


Informatica Economica ID, An.3
Bihari Zsolt - Mihaly
INSERT INTO "CLIENT"("ID_CLIENTI""CUI","DENUMIRE","STRADA","NUMAR","LOCALITATE")
VALUES('','123456','SC HENKEL ROMANIA','TRASCAULUI','33','CLUJ');
INSERT INTO "CLIENT"("ID_CLIENTI""CUI","DENUMIRE","STRADA","NUMAR","LOCALITATE")
VALUES('','654321','SC CEMACON SA','DEPOZITELOR','66','ZALAU');
INSERT INTO "CLIENT"("ID_CLIENTI""CUI","DENUMIRE","STRADA","NUMAR","LOCALITATE")
VALUES('','112233','SC ELECTROLUX SA','HENRI COANDA','99','SATU MARE');
INSERT INTO "CLIENT"("ID_CLIENTI""CUI","DENUMIRE","STRADA","NUMAR","LOCALITATE")
VALUES('','223344','SC GAMA AND GAMA SRL','BUCURESTI','22','BAIA MARE');
INSERT INTO "CLIENT"("ID_CLIENTI""CUI","DENUMIRE","STRADA","NUMAR","LOCALITATE")
VALUES('','556677','SC RAAL SA','SUBCETATE','102','BISTRITA');

INSERT INTO "MARFA"("COD_PRODUS","TIP","VOLUM")

VALUES('11','ADEZIVI','10 PALETI');

INSERT INTO "MARFA"("COD_PRODUS","TIP","VOLUM")

VALUES('22','CARAMIDA','7 PALETI');

INSERT INTO "MARFA"("COD_PRODUS","TIP","VOLUM")

Proiect Elemente Avansate de Baze de Date


Informatica Economica ID, An.3
Bihari Zsolt - Mihaly
VALUES('33','ELECTROCASNICE','5 PALETI');

INSERT INTO "MARFA"("COD_PRODUS","TIP","VOLUM")

VALUES('44','FOOD','15 PALETI');

INSERT INTO "MARFA"("COD_PRODUS","TIP","VOLUM")

VALUES('55','RADIATOARE','33 PALETI');

INSERT INTO "COSTURI"("ID_COST","TARIF_MINIM","PRET_VOLUM")

VALUES('','125','750');

INSERT INTO "COSTURI"("ID_COST","TARIF_MINIM","PRET_VOLUM")

VALUES('','135','550');

INSERT INTO "COSTURI"("ID_COST","TARIF_MINIM","PRET_VOLUM")

VALUES('','155','500');

INSERT INTO "COSTURI"("ID_COST","TARIF_MINIM","PRET_VOLUM")

VALUES('','140','300');

INSERT INTO "COSTURI"("ID_COST","TARIF_MINIM","PRET_VOLUM")

VALUES('','220','1400');

Proiect Elemente Avansate de Baze de Date


Informatica Economica ID, An.3
Bihari Zsolt - Mihaly
Alternativa pentru popularea tabelelor:
BEGIN

INSERT INTO "ARII"("ID_ARII","INDICATIV","ORAS")


VALUES ('','SJ', 'ZALAU');
INSERT INTO "ARII"("ID_ARII","INDICATIV","ORAS")
VALUES ('','CJ', 'CLUJ');
INSERT INTO "ARII"("ID_ARII","INDICATIV","ORAS")
VALUES ('','SM', 'SATU MARE');
INSERT INTO "ARII"("ID_ARII","INDICATIV","ORAS")
VALUES ('','MM', 'BAIA MARE');
INSERT INTO "ARII"("ID_ARII","INDICATIV","ORAS")
VALUES ('','BN', 'BISTRITA');

INSERT INTO "CLIENT"("ID_CLIENTI""CUI","DENUMIRE","STRADA","NUMAR","LOCALITATE")


VALUES('','123456','SC HENKEL ROMANIA','TRASCAULUI','33','CLUJ');
INSERT INTO "CLIENT"("ID_CLIENTI""CUI","DENUMIRE","STRADA","NUMAR","LOCALITATE")
VALUES('','654321','SC CEMACON SA','DEPOZITELOR','66','ZALAU');
INSERT INTO "CLIENT"("ID_CLIENTI""CUI","DENUMIRE","STRADA","NUMAR","LOCALITATE")
VALUES('','112233','SC ELECTROLUX SA','HENRI COANDA','99','SATU MARE');
INSERT INTO "CLIENT"("ID_CLIENTI""CUI","DENUMIRE","STRADA","NUMAR","LOCALITATE")
VALUES('','223344','SC GAMA AND GAMA SRL','BUCURESTI','22','BAIA MARE');
INSERT INTO "CLIENT"("ID_CLIENTI""CUI","DENUMIRE","STRADA","NUMAR","LOCALITATE")
VALUES('','556677','SC RAAL SA','SUBCETATE','102','BISTRITA');

INSERT INTO "MARFA"("COD_PRODUS","TIP","VOLUM")

VALUES('11','ADEZIVI','10 PALETI');

INSERT INTO "MARFA"("COD_PRODUS","TIP","VOLUM")

VALUES('22','CARAMIDA','7 PALETI');

INSERT INTO "MARFA"("COD_PRODUS","TIP","VOLUM")

VALUES('33','ELECTROCASNICE','5 PALETI');

INSERT INTO "MARFA"("COD_PRODUS","TIP","VOLUM")

VALUES('44','FOOD','15 PALETI');

INSERT INTO "MARFA"("COD_PRODUS","TIP","VOLUM")

INSERT INTO "COSTURI"("ID_COST","TARIF_MINIM","PRET_VOLUM")

VALUES('','125','750');

INSERT INTO "COSTURI"("ID_COST","TARIF_MINIM","PRET_VOLUM")

VALUES('','135','550');

INSERT INTO "COSTURI"("ID_COST","TARIF_MINIM","PRET_VOLUM")

VALUES('','155','500');

INSERT INTO "COSTURI"("ID_COST","TARIF_MINIM","PRET_VOLUM")

VALUES('','140','300');

INSERT INTO "COSTURI"("ID_COST","TARIF_MINIM","PRET_VOLUM")

END;

Proiect Elemente Avansate de Baze de Date


Informatica Economica ID, An.3
Bihari Zsolt - Mihaly
4. Creare tabela Clienti1 care include doar CUI, DENUMIRE,
LOCALITATE. Afisare:
BEGIN

execute immediate 'create table Client1 as select CUI, DENUMIRE, LOCALITATE


from CLIENTI';

END;

5. Creare bloc PL/SQL care selecteaza pretul maxim existent in tabela


Costuri.

Proiect Elemente Avansate de Baze de Date


Informatica Economica ID, An.3
Bihari Zsolt - Mihaly
6. Pentru PRET_VOLUM 1400 se creste de 1,5 ori pretul daca acesta e
mai mare de 1500 si de 2 ori daca e mai mic. Afisarea pretului initial
si final.
Declare
v_pret COSTURI.PRET_VOLUM%type;
Begin
select PRET_VOLUM into v_pret from COSTURI where ID_COST=5;
dbms_output.put_line('pretul initial al biletului este :'||v_pret);
if v_pret <1500 then v_pret:= v_pret * 2;
else v_pret:=v_pret * 1.5;
End if;
dbms_output.put_line('pretul final al biletului este :'||v_pret);
End;

7. Tratarea exceptiilor

- Inserarea in tabela CLIENTI a unui client nou si tratarea exceptiei in cazul in care nu
este introdusa numarul strazii:
Declare
exc_null exception;
pragma exception_init (exc_null, -01400);
Begin
insert into CLIENTI(ID_CLIENT,CUI,DENUMIRE,STRADA,NUMAR,LOCALITATE) values
('',6511,null,COSBUC,33,BUCURESTI);
exception
when exc_null then
dbms_output.put_line('nu este permisa completarea campului cu NULL,
deoarece are restrictie de NOT NULL ');
dbms_output.put_line('codul asociat acestei erori este:'||sqlcode|| ' cu
mesajul :' || sqlerrm);
End;

Proiect Elemente Avansate de Baze de Date


Informatica Economica ID, An.3
Bihari Zsolt - Mihaly
8. Gestionarea cursorilor:
- Modificarea volumului de marfa la toate tipurile de produs in afara cel cu
COD_PRODUS 44
Declare

contor number(3);

Begin

update MARFA set VOLUM='55' where COD_PRODUS <44;

contor:=sql%rowcount;

dbms_output.put_line('s-au realizat '||contor|| ' actualizari');

End;

Proiect Elemente Avansate de Baze de Date


Informatica Economica ID, An.3
Bihari Zsolt - Mihaly
- Sa se afiseze toate preturile/volum care sunt mai mare decat media pretului/volum
DECLARE

v_pret COSTURI.PRET_VOLUM%type;

v_med COSTURI.PRET_VOLUM%type;

cursor c1 is SELECT PRET_VOLUM FROM COSTURI

where PRET_VOLUM>(SELECT AVG(PRET_VOLUM)FROM COSTURI);

BEGIN

select avg(pret_volum) into v_med from COSTURI;

dbms_output.put_line('Valora medie a volumelor:'||v_med);

open c1;

loop

fetch c1 into v_pret;

exit when c1%notfound;

dbms_output.put_line('preturile per volum sunt:'||v_pret);

end loop;

close c1;

END;

Proiect Elemente Avansate de Baze de Date


Informatica Economica ID, An.3
Bihari Zsolt - Mihaly
9. Package-uri
- Actualizare tarif minim la toate inregistrarile unde ID_COST este mai mare de 2:
Create or replace procedure actualizare
(codp in COSTURI.ID_COST%type)
IS
BEGIN
UPDATE COSTURI
set TARIF_MINIM=(select TARIF_MINIM from COSTURI where ID_COST=codp)
where ID_COST>2;
END;

Proiect Elemente Avansate de Baze de Date


Informatica Economica ID, An.3
Bihari Zsolt - Mihaly