Oracle
 sql >> Base de données >  >> RDS >> Oracle

Erreurs de compilation du déclencheur SQL PLUS

Ce n'est pas le déclencheur, c'est le type de données. Si vous soustrayez une date d'une autre date, le résultat est un intervalle, pas une autre date :

CREATE TABLE dates (date1 DATE, date2 DATE, datediff DATE, numdiff NUMBER);
INSERT INTO dates (date1, date2) VALUES (sysdate, sysdate-1);

UPDATE dates SET numdiff = date1 - date2;
1 rows updated

UPDATE dates SET datediff = date1 - date2;
SQL Error: ORA-00932: inconsistent datatypes: expected DATE got DATE JULIAN

Ainsi, si le déclencheur stocke l'intervalle dans un nombre, il compile :

CREATE OR REPLACE TRIGGER newtriggernum
  BEFORE INSERT ON dates FOR EACH ROW
BEGIN
  :new.numdiff := :new.date1 - :new.date2;
END;
/
TRIGGER NEWTRIGGERNUM compiled

et s'il stocke l'intervalle dans une date, ce n'est pas :

CREATE OR REPLACE TRIGGER newtriggerdate
  BEFORE INSERT ON dates FOR EACH ROW
BEGIN
  :new.datediff := :new.date1 - :new.date2;
END;
/
Error(2,11): PL/SQL: ORA-00922: missing or invalid option