sql >> Database >  >> RDS >> Oracle

SQL PLUS Trigger-compilatiefouten

Het is niet de trigger, het is het gegevenstype. Als u een datum aftrekt van een andere datum, is het resultaat een interval, niet een andere 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

Dus als de trigger het interval in een getal opslaat, compileert het:

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

en als het het interval in een datum opslaat, doet het dat niet:

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. Een poging om een ​​automatisch benoemde database bij te voegen voor bestand ....database1.mdf is mislukt

  2. UTF-8, PHP en XML Mysql

  3. NULL vs STANDAARD NULL vs NULL STANDAARD NULL bij het maken van MYSQL-kolommen?

  4. Mysql unieke beperking waardoor een enkele rij voor een combinatie mogelijk is