Qulcuno pratico di Oracle SQL e PL/SQL ?
Sono un po' alle prime armi ed ho un problema. Massimo delle stelline a chi lo risolve!
Uso Oracle 10g
- Ho queste 2 Tabelle in Oracle SQL di sotto riportate e in Associazione 1 a N
-- TABELLE
CREATE TABLE CICLOMOTORE(
TARGA CHAR(6) PRIMARY KEY,
NGARAGE INTEGER NOT NULL,
DISPONIBILITA DATE NOT NULL,
CHECK(NGARAGE>0 AND NGARAGE<4),
CONSTRAINT FK_GARAGE FOREIGN KEY(NGARAGE) REFERENCES GARAGE(NGARAGE));
CREATE TABLE ASSISTENZA (
ID_ASS INTEGER PRIMARY KEY,
N_TESSANITARIA VARCHAR(20) NOT NULL,
N_TESMEDICASA INTEGER,
TARGA CHAR(6),
TIPO_ASS VARCHAR(3) NOT NULL,
CURA VARCHAR(30) NOT NULL,
INIZIO_ASS DATE NOT NULL,
FINE_ASS DATE NOT NULL,
CHECK (TIPO_ASS='ADI'OR TIPO_ASS='ADO'),
CONSTRAINT FK_PAZIENTE FOREIGN KEY (N_TESSANITARIA) REFERENCES PAZIENTE(N_TESSANITARIA),
CONSTRAINT FK_CICLOMOTORE FOREIGN KEY (TARGA) REFERENCES CICLOMOTORE(TARGA),
CONSTRAINT FK_PERSONALE FOREIGN KEY (N_TESMEDICASA) REFERENCES PERSONALE(N_TESMEDICASA));
...poi
- Ho poi un Trigger in Oracle PL/SQL che prima di ogni update su Targa di Assistenza o di inserimento di intera Tupla di Assistenza con Targa!=null controlli se il valore del campo DISPONIBILITA di Ciclomotore sia un valore di Data e Ora inferiori a quello del Campo INIZIO_ASS di Assistenza, in caso contrario se la Data di Disponbibilità è postcedente alla Data di Inizio_Ass
il trigger deve impedire l'inserimento della Targa su Assistenza, settandolo a Null ed infine mandare un messaggio di segnalazione "Scegliere Altro Mezzo' oppure Generare e gestire un EXCEPTION Error.
-- TRIGGER
CREATE OR REPLACE TRIGGER AuditingInserimentoAssistenz
BEFORE INSERT ON ASSISTENZA
FOR EACH ROW
DECLARE
dispCiclom DATE;
eccezioneCiclom EXCEPTION;
BEGIN
SELECT DISPONIBILITA INTO dispCiclom FROM CICLOMOTORE;
IF dispCiclom>:NEW.INIZIO_ASS THEN
RAISE eccezioneCiclom;
END IF;
EXCEPTION
WHEN eccezioneCiclom THEN
RAISE_APPLICATION_ERROR(-20022,'---- ERRORE!! CICLOMOTORE AL MOMENTO E'' IMPEGNATO, SCEGLIERE ALTRO CICLOMOTORE ----');
END;
/
- PROBLEMA
IL TRIGGER COMPILA SENZA ERRORI PERO'
per qualsiasi tipo di inserimento di Assistenza o update di Targa, anche con Targa=NULL
IL TRIGGER NON FUNZIONA E mi da sempre questo errore!
SQL> insert into assistenza values(26,'00001111222233334468','VB45J9… 08.30','21-06-20011 08.55');
insert into assistenza values(26,'00001111222233334468','VB45J9… 08.30','21-06-20011 08.55')
*
ERRORE alla riga 1:
ORA-04098: il trigger 'MEDICASA.AUDITINGINSERIMENTOASSISTENZA' non Þ valido
oppure la nuova convalida non é riuscita
SQL> insert into assistenza values(26,'00001111222233334468',NULL,2,… 08.30','21-06-20011 08.55');
insert into assistenza values(26,'00001111222233334468',NULL,2,… 08.30','21-06-20011 08.55')
*
ERRORE alla riga 1:
ORA-04098: il trigger 'MEDICASA.AUDITINGINSERIMENTOASSISTENZA' non è valido
oppure la nuova convalida non Þ riuscita
COS'è CHE SBAGLIO!?