sql >> Databasteknik >  >> RDS >> Oracle

SQL PLUS Trigger kompileringsfel

Det är inte utlösaren, det är datatypen. Om du subtraherar ett datum från ett annat datum blir resultatet ett intervall, inte ett annat 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

Så, om triggern lagrar intervallet i ett tal, kompilerar den:

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

och om det lagrar intervallet i ett datum, gör det inte:

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


  1. Nifi PutSQL Tidstämpel/Datetime-fel kan inte konverteras fel

  2. Ta bort en underordnad och en överordnad rad med ett SQL-skript

  3. Blanda ANSI 1992 JOINs och COMMAs i en fråga

  4. En översikt över Percona XtraDB Cluster Kubernetes Operator