Sei sulla pagina 1di 10

Universitatea Romano-Americana Informatica Economica

Proiectarea si realizarea aplicatiilor cu baze de date utilizand limbajul S.Q.L *Plus

Masterand: Glomnicu Andra Grupa 1 IE

Bucuresti 2012

Scriptul de creare a tabelelor:


DROP TABLE Produse CASCADE CONSTRAINT; DROP TABLE Furnizori CASCADE CONSTRAINT; DROP TABLE Clienti CASCADE CONSTRAINT; DROP TABLE Comenzi CASCADE CONSTRAINT; DROP TABLE Contracte CASCADE CONSTRAINT;

CREATE TABLE Produse ( CodP NUMBER(7), DenP VARCHAR2(40), UM VARCHAR2(10), PRET NUMBER(10), Stoc NUMBER(5), CONSTRAINT pk_CodP PRIMARY KEY (CodP) ); CREATE TABLE Furnizori( CodF NUMBER(3), DenF VARCHAR2(15), Adresa VARCHAR2(20), Localitate VARCHAR2(25), Telefon NUMBER(10), Cont VARCHAR2(20), Banca VARCHAR2(50), CONSTRAINT pk_codf PRIMARY KEY(CodF) ); CREATE TABLE Clienti( CodC NUMBER(4), Nume VARCHAR2(10), Prenume VARCHAR2(15), Adresa VARCHAR2(30), Localitate VARCHAR2(10), Telefon NUMBER(12), Cont VARCHAR2(20), Banca VARCHAR2(50), CONSTRAINT pk_codC PRIMARY KEY(CodC) ); CREATE TABLE Comenzi( CodCom NUMBER(4), NrCom NUMBER(5), Valoare NUMBER(9), CodP NUMBER(7), CodC NUMBER(4), CONSTRAINT pk_codCom PRIMARY KEY(CodCom),

CONSTRAINT fk_CodProd FOREIGN KEY (CodP) REFERENCES Produse(CodP), CONSTRAINT fk_CodClient FOREIGN KEY (CodC) REFERENCES Clienti(CodC) );

CREATE TABLE Contracte ( Nr_Contracte NUMBER(5) NOT NULL, Data_contract DATE, Termen DATE, Valoare NUMBER(10), CodP NUMBER(7), CodC NUMBER(4), CodF NUMBER(3), CodCom NUMBER(4), CONSTRAINT pk_Nr_Contracte PRIMARY KEY (Nr_Contracte), CONSTRAINT fk_CodP FOREIGN KEY (CodP) REFERENCES Produse(CodP), CONSTRAINT fk_CodC FOREIGN KEY (CodC) REFERENCES Clienti(CodC), CONSTRAINT fk_CodCom FOREIGN KEY (CodCom) REFERENCES Comenzi(CodCom), CONSTRAINT fk_CodF FOREIGN KEY (CodF) REFERENCES Furnizori(CodF) );

Popularea tabelelor:
DELETE FROM Produse; INSERT INTO Produse VALUES (1,'Milka Ciocolata','Buc',1500,250); INSERT INTO Produse VALUES (2,'MM Bomboane','Buc',2500,300); INSERT INTO Produse VALUES (3,'Nesquik Batoane','Buc',1230,120); INSERT INTO Produse VALUES (4,'Nutline Seminte','Buc',1750,245); INSERT INTO Produse VALUES (5,'Mandarine','Kg',750,145); DELETE FROM Furnizori; INSERT INTO Furnizori VALUES(1,'Alka','Calea Vitan 23C','Bucuresti','0753412557','RO12BCR4567891231245','BCR'); INSERT INTO Furnizori VALUES(2,'Nestle','Aleea Berceni 68','Bucuresti','0755698741','RO17BRD1472583692458','BRD'); INSERT INTO Furnizori VALUES(3,'Kraft Foods','Str.Erou Nicolae','Ploiesti','0744256378','RO22BCR1112458796321','BCR'); INSERT INTO Furnizori VALUES(4,'Gottino Foods','Str.Ambrozie','Ploiesti','0723144522','RO44BRD2124578954712','BRD'); INSERT INTO Furnizori VALUES(5,'Expert Cafe','Str.Recoltei 3,','Ploiesti','0744040456','RO44BRD2124141789696','BRD');

DELETE FROM Clienti; INSERT INTO Clienti VALUES (1,'Asad','Ahmed','Str.1 Mai 28', 'Bucuresti' ,0723145898,'RO14BRD111444222555','BRD' ); INSERT INTO Clienti VALUES (2,'Mihalcea','Daniela','Str.Evadatului 8','Timisoara', 0744144899,'RO00BCR124587974125','BCR' );

INSERT INTO Clienti VALUES (3,'Buhoaica','Ionut','Str.Americanului 10', 'Bucuresti' ,0765411422,'RO30BCR1234567891012','BCR' ); INSERT INTO Clienti VALUES (4,'Grecu','Carmen','Str.Visului 55', 'Ploiesti' ,0766454123,'RO14BRD1001112354879','BRD' ); INSERT INTO Clienti VALUES (5,'Ilaria','Andreea','Str.Amurgului 6', 'Bucuresti', 0723457899,'RO14BRD5894786214587','BRD' ); DELETE FROM Comenzi; INSERT INTO Comenzi VALUES (1,45698,3000,1,3); INSERT INTO Comenzi VALUES (2,45698,3000,1,5); INSERT INTO Comenzi VALUES (3,45698,3000,1,2); INSERT INTO Comenzi VALUES (4,45698,3000,2,5); INSERT INTO Comenzi VALUES (5,45698,3000,3,3); INSERT INTO Comenzi VALUES (6,45698,3000,4,3); INSERT INTO Comenzi VALUES (7,45698,3000,3,1);

DELETE FROM Contracte; INSERT INTO Contracte VALUES (1,TO_DATE('01/02/2011','MM/DD/YYYY'),TO_DATE('12 /12/2011','MM/DD/YYYY'),45000,1,1,3,1); INSERT INTO Contracte VALUES (2,TO_DATE('01/25/2011','MM/DD/YYYY'),TO_DATE('12 /10/2011','MM/DD/YYYY'),55000,2,1,4,3); INSERT INTO Contracte VALUES (3,TO_DATE('11/12/2011','MM/DD/YYYY'),TO_DATE('12 /03/2012','MM/DD/YYYY'),85000,4,2,5,1); INSERT INTO Contracte VALUES (4,TO_DATE('01/12/2011','MM/DD/YYYY'),TO_DATE('12 /02/2012','MM/DD/YYYY'),45000,4,4,1,2); INSERT INTO Contracte VALUES (5,TO_DATE('01/01/2012','MM/DD/YYYY'),TO_DATE('12 /12/2012','MM/DD/YYYY'),115000,1,2,2,3);

Generarea rapoartelor:
1.Sa se afiseze denumirea produsele, unitatea monetara si pretul, acelor produse masurate in "Buc", cu pret cuprins intre 1700 si 2000.

SELECT DenP, UM, Pret FROM Produse WHERE UM=Buc AND Pret BETWEEN 1700 AND 2000;

2. Sa se afiseze numarul de contracte incheiate pe fiecare furnizor SELECT Count(*) AS Nr_Contract, Denf FROM Furnizori, Contracte WHERE Furnizori.CodF=Contracte.CodF GROUP BY Denf;

3.Sa se afiseze valoarea medie a stocului de produse , pe care s-au incheiat contracte.
SELECT Furnizori.Denf, AVG(Stoc*Pret) AS ValoareMedie FROM Contracte, Produse, Furnizori WHERE Contracte.CodP=Produse.CodP And Furnizori.CodF=Contracte.CodF GROUP BY Furnizori.Denf;

4.Sa se afiseze numele,prenumele adresa si localitatea clientilor ai carei localitate incepe cu litera B.
SELECT Nume, Prenume, Adresa, Localitate FROM Clienti WHERE Localitate LIKE b%;

5.Sa se majorete pretul unui produs cu un procent dat de la tastatura.Codul produsului se citeste de la tastatura.
SELECT * FROM Produse; VARIABLE Rez NUMBER; ACCEPT prod PROMPT 'Introduceti codul produsului:'; ACCEPT proc PrOMPT 'Introduceti procentul de majorare:' DECLARE Vproc number:=&proc; Vpret Produse.Pret%TYPE; BEGIN SELECT Pret INTO Vpret FROM Produse WHERE CodP='&prod'; :Rez:=nvl(vpret,0)*(1+nvl(vproc,0)/100); END; /

6.Citind de la tastatura codul comenzii, sa se actualizeze valoarea comenzii pentru produsul citit de la tastatura.Noua valoare se va citi de la tastatura.

SELECT CodCom, Valoare FROM Comenzi; ACCEPT cod PROMPT 'Dati codul comenzii:'; ACCEPT valoare PROMPT 'Noua valoare a comenzii:'; SELECT CodCom AS "COMANDA", valoare AS "VALOARE" FROM Comenzi WHERE CodCom=&cod; UPDATE Comenzi SET Valoare=&Valoare WHERE CodCom=&cod; SELECT CodCom AS "Comanda", valoare AS "Valoare" FROM Comenzi WHERE CodCom=&cod;

7.Modificati stocul unui produs, in cazul in care codul produsului si cantitatea cu care se modifica se introduc de la tastatura.
ACCEPT Produs PROMPT 'Introduceti codul produsului:'; ACCEPT Cantitate PROMPT 'Cantitatea de modificare a stocului:'; DECLARE Cantitate Produse.Stoc%TYPE:=&Cantitate; BEGIN UPDATE Produse SET Stoc= Stoc+Cantitate WHERE CodP='&Produs'; END; / SELECT * FROM PRODUSE WHERE CodP='&Produs';

8.Sa se creeze o procedura care modifica pretul actual al unui produs cu un procent, avand ca parametrii denumirea produsului si procentul de majorare, apoi sa se majoreze pretul produsului Mandarine cu 25 de procente.

SET VERIFY OFF; CREATE OR REPLACE PROCEDURE Majorare(Denumire produse.DenP%TYPE, procent NUMBER) IS BEGIN UPDATE produse SET pret= pret+(pret*procent/100) WHERE DenP=Denumire; IF SQL%FOUND THEN COMMIT; RAISE_APPLICATION_ERROR(-20000,'Modificarea a avut loc'); END IF; IF SQL%NOTFOUND THEN RAISE_APPLICATION_ERROR(-20000,'Produs inexistent'); END IF; END; / SELECT * FROM produse; ACCEPT denumire PROMPT 'Dati numele produsului:'; ACCEPT procent PROMPT 'Procentul de majorare:'; EXECUTE Majorare('&denumire',&procent); SELECT * FROM produse;

9.Sa se creeze o procedura care sterge definitiv un furnizor, avand ca parametru de intrare numele. In cazul nostru am sters furnizorul Alka.
CREATE OR REPLACE PROCEDURE Sterge(f_denumire furnizori.denf%TYPE) IS cod furnizori.codf %TYPE; BEGIN SELECT CodF INTO cod FROM furnizori WHERE Denf=f_denumire; DELETE FROM contracte WHERE CodF=cod; DELETE FROM furnizori WHERE DenF=f_denumire; IF SQL%FOUND THEN COMMIT; RAISE_APPLICATION_ERROR(-20006,'cATEGORIA "'||f_denumire||'" a fost stearsa'); END IF; IF SQL%NOTFOUND THEN RAISE_APPLICATION_ERROR(-20007,'Furnizorul"'||f_denumire||'"NU EXISTA'); END IF; END; / EXECUTE Sterge('Alka'); SELECT Codf COD, Denf DENUMIRE FROM furnizori;

10. Pentru o localitate data de la tastatura sa se afiseze numele furnizorilor din acea localitate.
DROP TABLE Afisare; CREATE TABLE Afisare(nume varchar2(10)); SELECT * FROM furnizori; ACCEPT loc PROMPT 'Localitatea furnizorului:' DECLARE Nume Furnizori.Denf%TYPE; CURSOR c1(loc varchar2) IS SELECT Denf FROM Furnizori WHERE Localitate=loc; BEGIN OPEN c1('&loc'); LOOP FETCH c1 INTO Nume; EXIT WHEN c1%NOTFOUND; INSERT INTO Afisare VALUES(Nume);

END LOOP; CLOSE c1; END; / SELECT * FROM Afisare;