यह ट्रिगर नहीं है, यह डेटा प्रकार है। यदि आप किसी तिथि को किसी अन्य तिथि से घटाते हैं, तो परिणाम एक अंतराल होता है, कोई अन्य तिथि नहीं:
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
इसलिए, यदि ट्रिगर अंतराल को किसी संख्या में संग्रहीत करता है, तो यह संकलित करता है:
CREATE OR REPLACE TRIGGER newtriggernum
BEFORE INSERT ON dates FOR EACH ROW
BEGIN
:new.numdiff := :new.date1 - :new.date2;
END;
/
TRIGGER NEWTRIGGERNUM compiled
और यदि यह अंतराल को किसी तिथि में संग्रहीत करता है, तो यह नहीं करता है:
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