0
我想創建一個觸發器,它可以修改或者在我的表中插入日期「合同」:問題與觸發器更改日期在Oracle
「如果用目前的合同客戶簽訂一個新的結束日期 前一個將成爲新的」
所以開始日期的前一天,我觸發是:
CREATE OR REPLACE TRIGGER TRIGGER_D
BEFORE
INSERT OR UPDATE ON CONTRACTS
FOR EACH ROW
DECLARE
idcliente CONTRACTS.CLIENTID%TYPE;
fecha_fin CONTRACTS.ENDDATE%TYPE;
BEGIN
if :NEW.CLIENTID = idcliente
then
if TO_CHAR(fecha_fin) IS NULL OR TO_CHAR(fecha_fin) > TO_CHAR(:NEW.STARTDATE)
then
INSERT INTO CONTRACTS (ENDDATE) VALUES
(:NEW.STARTDATE);
update CONTRACTS
set
ENDDATE = :NEW.STARTDATE;
end if;
end if;
END;
我試圖插入一行是這樣的:
INSERT INTO CONTRACTS (CONTRACTID, CLIENTID, STARTDATE, ENDDATE, CONTRACT_TYPE ,ADDRESS ,TOWN, ZIPCODE, COUNTRY)
VALUES ('TW42260/09','99/98480296/22T',TO_DATE('18/04/17','DD/MM/YY'), NULL ,'Flat Rate Lover','69 Citadel Street, Ground floor, door 1','Summer forest', '11164' ,'Taiwan, Province of China');
這個觸發器編譯得很好,但他們沒有在桌子上做任何事情。
你沒有設置'idcliente',所以第一個比較永遠不會是真的(對於'fecha_fin'也是如此),所以觸發器什麼都不做。如果你在觸發器中插入/更新,它會再次觸發,所以你冒着遞歸的風險,並且更新會得到一個變異的表錯誤。你的任務是否需要你使用觸發器? –
爲什麼比較「大於」的字符串? –
這是大學的工作 –