Salve a tutti,
ho una consegna di progetto lunedi 25 giugno, ma le procedure in oracle non mi vanno mi danno errori di compilazione..mi potreste dire dove sbaglio??

--prenotazione evento

CREATE OR REPLACE PROCEDURE PRENOTAZIONE_SERVIZIO(ID_E NUMBER,DATA_EV DATE,FASCIA_GIORNO

VARCHAR2,ID_LOC NUMBER)
IS


DAT_EVENTO SERVIZIO.DATA%TYPE;
MOMENTO VARCHAR2;
DAT_LOC NUMBER;

LOCAL_EXP EXCEPTION;
LOCAL2_EXP EXCEPTION;
LOCAL3_EXP EXCEPTION;

--SELEZIONAMI LA DATA E LA FASCIA_ORARIA ALL'INTERNO DELLA TABELLA SERVIZIO DOVE LA DATA COINCIDE

CON LA DATA IMMESSA IN INPUT

CURSOR GETLIBERODATA IS
SELECT DATA FROM SERVIZIO WHERE DATA=DATA_EV;

CURSOR GETLIBEROMOMENTO IS
SELECT FASCIA_ORARIA FROM SERVIZIO WHERE FASCIA_ORARIA=FASCIA_GIORNO;

CURSOR GETLIBEROLOC IS
SELECT ID_L FROM SERVIZIO WHERE ID_L=ID_LOC;

BEGIN
--CONTROLLO CHE LA DATA SIA LIBERA(E QUINDI NON CI SIA)
OPEN GETLIBERODATA;
FETCH GETLIBERODATA INTO DAT_EVENTO;
IF GETLIBERODATA%NOTFOUND
THEN
RAISE LOCAL_EXP;
END IF;
CLOSE GETLIBERODATA;

--CONTROLLA CHE LA FASCIA ORARIA SIA LIBERA
OPEN GETLIBEROMOMENTO;
FETCH GETLIBEROMOMENTO INTO MOMENTO;
IF GETLIBEROMOMENTO%NOTFOUND
THEN
RAISE LOCAL2_EXP;
END IF;
CLOSE GETLIBEROMOMENTO;

--CONTROLLO CHE LA LOCAZIONE SIA LIBERA
OPEN GETLIBEROLOC;
FETCH GETLIBEROLOC INTO DAT_LOC;
IF GETLIBEROLOC%NOTFOUND
THEN
RAISE LOCAL3_EXP;
END IF;
CLOSE GETLIBEROLOC;


INSERT INTO SERVIZIO(DATA ,FASCIA_ORARIA,ID_EVENTO,ID_L)
VALUES(ID_E,DATA_EV,FASCIA_GIORNO,ID_LOC);

EXCEPTION

WHEN LOCAL_EXP THEN RAISE_APPLICATION_ERROR(-20487,'NON CI SONO EVENTI FISSATI IN QUESTA

DATA');

WHEN LOCAL2_EXP THEN RAISE_APPLICATION_ERROR(-20487,'NON CI SONO EVENTI FISSATI IN QUESTO

MOMENTO DELLA GIORNATA');

WHEN LOCAL3_EXP THEN RAISE_APPLICATION_ERROR(-20487,'NON CI SONO EVENTI FISSATI IN QUESTA

LOCAZIONE,IN QUESTA DATA E IN QUESTO MOMENTO');

END;
/



--sconto 20% PRODOTTI se la quantita è maggiore di 200 pezzi

CREATE OR REPLACE PROCEDURE SCONTOPRODOTTI
IS
CURSOR C1 IS
SELECT ID_P
FROM E_INCLUSO
WHERE QUANTITA>200;

X NUMBER;


BEGIN

OPEN C1;
FETCH C1 INTO X;

IF C1%NOTFOUND
THEN
RAISE NOPROD;
ELSE
SET PREZZO=PREZZO*0,80;--SCONTO DEL 20% [80=100-20];
END IF;
CLOSE C1;

EXCEPTION
WHEN NOPROD THEN RAISE_APPLICATION_ERROR(-20234,'NESSUN PRODOTTO CON QUELLE QUANTITA');
END;
/


--PROCEDURA DIPENDENTE
CONTROLLA SE CI SONO DIPENDENTI ASSEGNATI AL SERVIZIO in caso nn ci siano avvisano l utente

CREATE OR REPLACE PROCEDURE ASSOCIA_DIP(C_F_DIP VARCHAR2,DATA_S DATE)
IS
--CONTA I DIPENDENTI DALLA TABELLA LAVORA CON IL CF IMMESSO IN INPUT E LA DATA
CURSOR C1 IS
SELECT COUNT(*)
FROM LAVORA
WHERE C_F=C_F_DIP AND DATA=DATA_S;

X NUMBER:=0;
LOCAL_EXP EXCEPTION;

BEGIN
OPEN C1;
FETCH C1 INTO X;
CLOSE C1;
--IS IL NUMERO DI DIP è MINORE DI 1(NN CI SONO DIPENDENTI,ALTRIMENTI TI AVVISA CHE CI SONO I DIPENDENTI
IF X<1
THEN
RAISE LOCAL_EXP;
ELSE
DBMS_OUTPUT.PUT_LINE('CI SONO'||X||' DIPENDENTI CON CODICE FISCALE' || C_F_DIP || ' ASSEGNATI

ALL'EVENTO ' );
END IF;

EXCEPTION
when local_exp then raise_application_error (-20400,'NON CI SONO DIPENDENTI ASSEGNATI');
END;
/