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;
/

Rispondi quotando