Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQL PLUS Kompilierungsfehler auslösen

Es ist nicht der Trigger, es ist der Datentyp. Wenn Sie ein Datum von einem anderen Datum subtrahieren, ist das Ergebnis ein Intervall, kein weiteres Datum:

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

Wenn also der Trigger das Intervall in einer Zahl speichert, kompiliert er:

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

und wenn es das Intervall in einem Datum speichert, tut es nicht:

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