Sei sulla pagina 1di 7

CREATE TABLE "FURNIZORI"

( "COD_FURNIZOR" NUMBER(4,0) NOT NULL ENABLE,


"DENUMIRE" VARCHAR2(25),
"ADRESA" VARCHAR2(100),
"TELEFON" VARCHAR2(10),
CONSTRAINT "FURNIZORI_PK" PRIMARY KEY ("COD_FURNIZOR")
USING INDEX ENABLE
)
/
CREATE TABLE "PRODUSE"
( "DENUMIRE_PRODUS" VARCHAR2(30),
"PRET_ACHIZ" VARCHAR2(30),
"UM" VARCHAR2(3),
"COD_PRODUS" NUMBER(4,0) NOT NULL ENABLE,
"COTA_TVA" NUMBER(2,0),
"COD_FURNIZOR" NUMBER(4,0),
"STOC" NUMBER(6,0),
"PRET_VANZARE" NUMBER(7,2),
CONSTRAINT "PRODUSE_CON" PRIMARY KEY ("COD_PRODUS")
USING INDEX ENABLE,
CONSTRAINT "UNIQ_PRODUSE" UNIQUE ("DENUMIRE_PRODUS")
USING INDEX ENABLE
)
/
CREATE TABLE "FUNCTII_ANGAJATI"
( "ID_FUNCTIE" NUMBER(4,0) NOT NULL ENABLE,
"FUNCTIA" VARCHAR2(30),
"SALARIU_MAXIM" NUMBER(4,0) NOT NULL ENABLE,
CONSTRAINT "FUNCTII_ANGAJATI_CON" PRIMARY KEY ("ID_FUNCTIE")
USING INDEX ENABLE,
CONSTRAINT "UNIQ_FCT" UNIQUE ("FUNCTIA")
USING INDEX ENABLE
)
/
CREATE TABLE "ANGAJATI"
( "ID_ANGAJAT" NUMBER(4,0) NOT NULL ENABLE,
"DATA_ANGAJARE" DATE NOT NULL ENABLE,
"TIMP_DE_LUCRU" NUMBER(1,0) NOT NULL ENABLE,
"SALAR_DE_BAZA" NUMBER(4,0) NOT NULL ENABLE,
"OBSERVATII" CHAR(1000),
"NUMAR_CONTRACT" NUMBER(4,0) NOT NULL ENABLE,
"PERSOANE_INTRETINERE" NUMBER(1,0),
"FUNCTIE" VARCHAR2(30),
"NUME" VARCHAR2(30),
"PRENUME" VARCHAR2(30),
"ADRESA" VARCHAR2(50),
"DATA_NASTERII" DATE NOT NULL ENABLE,
"CNP" NUMBER(13,0),
"TELEFON" VARCHAR2(10),
CONSTRAINT "ANGAJATI_PK" PRIMARY KEY ("ID_ANGAJAT")
USING INDEX ENABLE
)
/
CREATE TABLE "CLIENTI"
( "COD_CLIENT" NUMBER(4,0) NOT NULL ENABLE,
"DENUMIRE" VARCHAR2(25),
"ADRESA" VARCHAR2(100),
"TELEFON" VARCHAR2(10),
"EMAIL" VARCHAR2(30),
CONSTRAINT "CLIENTI_PK" PRIMARY KEY ("COD_CLIENT")
USING INDEX ENABLE
)
/
CREATE TABLE "FACTURI"
( "IDFACTURA" NUMBER(4,0) NOT NULL ENABLE,
"NRFACTURA" NUMBER(4,0) NOT NULL ENABLE,
"COD_CLIENT" NUMBER(4,0),
"DATA_FACTURII" DATE,
"VALOAREA_FACTURII" NUMBER(10,2),
"VALOARE_FARA_TVA" NUMBER(10,2),
"VALOARE_TVA" NUMBER(10,2),
CONSTRAINT "FACTURI_PK" PRIMARY KEY ("IDFACTURA")
USING INDEX ENABLE
)
/
CREATE TABLE "PRODUSEFACTURATE"
( "ID_INREG" NUMBER NOT NULL ENABLE,
"IDFACTURA" NUMBER,
"CODCLIENT" NUMBER,
"COD_PRODUS" NUMBER,
"DENP" VARCHAR2(30),
"CANTITATE" NUMBER,
"UM" VARCHAR2(3),
"COTA_TVA" NUMBER(2,0),
"PRET_CU_TVA" NUMBER(14,2),
"VALOARE" NUMBER(14,2),
"VALOARE_FARA_TVA" NUMBER(14,2),
"VALOARE_TVA" NUMBER(14,2),
CONSTRAINT "PRODUSEFACTURATE_PK" PRIMARY KEY ("ID_INREG")
USING INDEX ENABLE
)
CREATE TABLE "CEI_MAI_BINE_PLATITI"
( "NUME" VARCHAR2(30),
"PRENUME" VARCHAR2(30),
"FUNCTIE" VARCHAR2(30),
"SALAR_DE_BAZA" NUMBER(4,0) NOT NULL ENABLE
)

ALTER TABLE "ANGAJATI" ADD CONSTRAINT "ANG_FC_CL_FK" FOREIGN KEY ("FUNCTIE")


REFERENCES "FUNCTII_ANGAJATI" ("FUNCTIA") ENABLE
/
ALTER TABLE "FACTURI" ADD CONSTRAINT "FACTURI_FK" FOREIGN KEY ("COD_CLIENT")
REFERENCES "CLIENTI" ("COD_CLIENT") ENABLE
/

ALTER TABLE "PRODUSEFACTURATE" ADD CONSTRAINT "PRODUSEFACTURATE_CON" FOREIGN KEY


("COD_PRODUS")
REFERENCES "PRODUSE" ("COD_PRODUS") ENABLE
/
ALTER TABLE "PRODUSEFACTURATE" ADD CONSTRAINT "PRODUSEFACTURATE_FK_CLIENT" FOREIGN
KEY ("CODCLIENT")
REFERENCES "CLIENTI" ("COD_CLIENT") ENABLE
/
ALTER TABLE "PRODUSEFACTURATE" ADD CONSTRAINT "PRODUSEFACTURATE_FK_FACT" FOREIGN
KEY ("IDFACTURA")
REFERENCES "FACTURI" ("IDFACTURA") ENABLE
/
ALTER TABLE "PRODUSE" ADD CONSTRAINT "PRODUSE_FK" FOREIGN KEY ("COD_FURNIZOR")
REFERENCES "FURNIZORI" ("COD_FURNIZOR") ENABLE
/
CREATE OR REPLACE FUNCTION "INDEXARE"
( proc_index IN number )
RETURN number
IS
"id_angajat" number;
CURSOR c1
IS
SELECT "salar"
FROM EXAMEN_ANGAJATI

FOR UPDATE of "salar";


BEGIN
OPEN c1;
FETCH c1 INTO "id_angajat";
if c1%notfound then
"id_angajat" := 9999;
else
UPDATE EXAMEN_ANGAJATI
SET "salar" ="salar"+"salar"*proc_index
WHERE CURRENT OF c1;
COMMIT;
end if;
CLOSE c1;
RETURN "id_angajat";
END;
/

CREATE OR REPLACE FUNCTION "FUNCTIE_MAR"


( id_pr IN number,proc_mar IN number)
RETURN number
IS
"ID_PRODUS" number;

CURSOR c1
IS
SELECT "ID_PRODUS"
FROM EXAMEN_PRODUSE

FOR UPDATE of "PRET_PRODUCTIE";


BEGIN
OPEN c1;
FETCH c1 INTO "ID_PRODUS";
if c1%notfound then
"ID_PRODUS" := 9999;
else
UPDATE EXAMEN_PRODUSE
SET "PRETPRODUCTIE" ="PRETPRODUCTIE"+"PRETPRODUCTIE"*proc_mar WHERE
ID_PRODUS=id_pr ;
COMMIT;
end if;
CLOSE c1;
RETURN "ID_PRODUS";
END;
/

CREATE OR REPLACE FUNCTION "FUNCTIE"


( id_cat IN number,val_tva IN number)
RETURN number
IS
"ID_CATEGORIE" number;

CURSOR c1
IS
SELECT "ID_CATEGORIE"
FROM EXAMEN_COTATVA

FOR UPDATE of "VALOARE";


BEGIN
OPEN c1;
FETCH c1 INTO "ID_CATEGORIE";
if c1%notfound then
"ID_CATEGORIE" := 9999;
else
UPDATE EXAMEN_COTATVA
SET "VALOARE" =val_tva WHERE "ID_CATEGORIE"=id_cat ;
COMMIT;
end if;
CLOSE c1;
RETURN "ID_CATEGORIE";
END;
/

CREATE OR REPLACE FUNCTION "CAUTA_PRODUS"


(name_in IN varchar2)
return number
IS
cod_produs number
cursor c1 is
select COD_PRODUS
from PRODUSE
where COD_PRODUS=name_in
BEGIN
open c1;
fetch c1 into COD_PRODUS;
if c1%notfound then
COD_PRODUS:=9999;
END IF;
CLOSE C1;
RETURN cod_produs;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'Atentie aceasta functie contine erori'||
SQLCODE||'EDITATI STRUCTURA EI SI RULATI DIN NOU'||SQLEERM)

END
/

CREATE OR REPLACE FUNCTION "CAUTAPROD"


( name_in IN varchar2 )
RETURN number
IS
prodid number;
CURSOR c1
IS
SELECT COD_PRODUS
FROM PRODUSE
WHERE DENUMIRE_PRODUS = name_in;
BEGIN
OPEN c1;
FETCH c1 INTO prodid;
if c1%notfound then
prodid := 9999;
end if;
CLOSE c1;
RETURN prodid;
END;
/

CREATE UNIQUE INDEX "ANGAJATI_PK" ON "ANGAJATI" ("ID_ANGAJAT")


/
CREATE UNIQUE INDEX "CLIENTI_PK" ON "CLIENTI" ("COD_CLIENT")
/
CREATE UNIQUE INDEX "CUSTOMERS_PK" ON "CUSTOMERS" ("CUSTOMERID")
/
CREATE UNIQUE INDEX "EMPLOYEES_PK" ON "EMPLOYEES" ("EMPLOYEEID")
/
CREATE UNIQUE INDEX "FACTURI_PK" ON "FACTURI" ("IDFACTURA")
/
CREATE UNIQUE INDEX "FUNCTII_ANGAJATI_CON" ON "FUNCTII_ANGAJATI" ("ID_FUNCTIE")
/
CREATE UNIQUE INDEX "FURNIZORI_PK" ON "FURNIZORI" ("COD_FURNIZOR")
/
CREATE UNIQUE INDEX "ORDERDETAILS_PK" ON "ORDERDETAILS" ("ORDERID", "PRODUCTID")
/
CREATE UNIQUE INDEX "ORDERS_PK" ON "ORDERS" ("ORDERID")
/
CREATE UNIQUE INDEX "PRODUCTS_PK" ON "PRODUCTS" ("PRODUCTID")
/
CREATE UNIQUE INDEX "PRODUSEFACTURATE_PK" ON "PRODUSEFACTURATE" ("ID_INREG")
/
CREATE UNIQUE INDEX "PRODUSE_CON" ON "PRODUSE" ("COD_PRODUS")
/
CREATE UNIQUE INDEX "SUPPLIERS_PK" ON "SUPPLIERS" ("SUPPLIERID")
/
CREATE UNIQUE INDEX "UNIQ_FCT" ON "FUNCTII_ANGAJATI" ("FUNCTIA")
/
CREATE UNIQUE INDEX "UNIQ_PRODUSE" ON "PRODUSE" ("DENUMIRE_PRODUS")
/
CREATE UNIQUE INDEX "exam_ang_pk" ON "BILET_ANGAJATI" ("id_angajat")
/
CREATE UNIQUE INDEX "exam_dep_pk" ON "BILET_DEPARTAMENTE" ("id_departament")
/
CREATE UNIQUE INDEX "exam_fct_pk" ON "BILET_FUNCTII" ("id_functie")
/
CREATE OR REPLACE PACKAGE "PACHET_SUB5" AS
Function micsorare
( proc_mic IN number )
RETURN number
END pachet_sub5;
/
CREATE OR REPLACE PACKAGE BODY "PACHET_SUB5" AS
Function micsorare
( proc_mic IN number )
RETURN number
IS
"id_angajat" number;
CURSOR c1
IS
SELECT "salar"
FROM EXAMEN_ANGAJATI

FOR UPDATE of "salar";


BEGIN
OPEN c1;
FETCH c1 INTO "id_angajat";
if c1%notfound then
"id_angajat" := 9999;
else
UPDATE EXAMEN_ANGAJATI
SET "salar" ="salar"-"salar"*proc_mic
WHERE CURRENT OF c1;
COMMIT;
end if;
CLOSE c1;
RETURN "id_angajat";
END;
END pachet_sub5;
/

CREATE OR REPLACE PROCEDURE "UPDATE_PRODUCT_PRICE" (p_productid IN number,


p_procent IN number) is
v_productid products.productid%type;
v_price products.unitprice%type;
begin
select productid, unitprice into v_productid, v_price from products where
productid=p_productid;
dbms_output.put_line('produsul cu id '||v_productid||' are pretul' ||v_price );
exception when no_DATA_FOUND then
dbms_output.put_line('Eroare! produsul cu codul respectiv nu exista in baza de
date');
end;
/

CREATE OR REPLACE PROCEDURE "TEST2" (p1 in number) is


begin
dbms_output.put_line(p1);
end;
/

CREATE OR REPLACE TRIGGER "RESTRICTIONARE_SALARIU"


BEFORE INSERT or UPDATE on angajati
FOR EACH ROW
DECLARE
v_fct varchar(32);
sal_max number;
BEGIN
v_fct:=:new.functie;
SELECT SALARIU_MAXIM into sal_max FROM FUNCTII_ANGAJATI where FUNCTIA=v_fct;
IF :new.SALAR_DE_BAZA>sal_max then
RAISE_APPLICATION_ERROR (-20202, 'Nu se poate depasi salariul maxim atribuit
fiecarei functii');
end if;
END;
/
ALTER TRIGGER "RESTRICTIONARE_SALARIU" ENABLE
/
CREATE OR REPLACE TRIGGER "RESTRICT_SALARIUL"
BEFORE INSERT or UPDATE on angajati
FOR EACH ROW
BEGIN
IF :new.SALAR_DE_BAZA>3000 then
RAISE_APPLICATION_ERROR (-20202, 'Nu se poate depasi salariul maxim de 3000
de lei');
end if;
END;

/
ALTER TRIGGER "RESTRICT_SALARIUL" ENABLE
/
CREATE OR REPLACE TRIGGER "TRIGGER_SUB5"
BEFORE INSERT or UPDATE on BILET_ANGAJATI
FOR EACH ROW
BEGIN
IF :new."salar">4000 then
RAISE_APPLICATION_ERROR (-20202, 'salariul maxim introdus depaseste limita de
4000 lei ');
end if;
END;

/
ALTER TRIGGER "TRIGGER_SUB5" ENABLE
/
CREATE OR REPLACE FORCE VIEW "PRODUSE_CU_COTETVA_MARI" ("DENUMIRE", "VALOARE") AS
SELECT EXAMEN_PRODUSE.DENUMIRE,EXAMEN_COTATVA.VALOARE
FROM EXAMEN_PRODUSE
INNER JOIN EXAMEN_COTATVA
ON EXAMEN_PRODUSE.FK_COTATVA= EXAMEN_COTATVA.ID_CATEGORIE
WHERE EXAMEN_COTATVA.VALOARE>9
/
CREATE OR REPLACE FORCE VIEW "VANZARI_CL_A" ("PRODUS", "Valoare iesita din
gestiune", "NUMAR FACTURA") AS
SELECT PRODUSEFACTURATE.DENP "PRODUS",SUM(PRODUSEFACTURATE.VALOARE_FARA_TVA)
"Valoare iesita din gestiune", FACTURI.NRFACTURA "NUMAR FACTURA"
FROM PRODUSEFACTURATE
INNER JOIN produse
ON Produsefacturate.denp = Produse.DENUMIRE_PRODUS
INNER JOIN facturi
ON Produsefacturate.idfactura = Facturi.idfactura
INNER JOIN clienti
ON Clienti.COD_CLIENT= Produsefacturate.codclient
WHERE CLIENTI.DENUMIRE='SC A SRL'
GROUP BY Produsefacturate.denp, Facturi.nrfactura
/

Potrebbero piacerti anche