Solution of this easy trigger

本秂侑毒 提交于 2019-12-14 04:26:31

问题


I have a problem with my trigger(Im new with oracle) With this trigger I want when insert a new contract and this contracts have a start_date which is before that end_date of the other contract of this user, the trigger have to change the old end_date to the start_date of the new contract.

Here is my code:

CREATE OR REPLACE TRIGGER Date_contracts
    BEFORE INSERT OR UPDATE OF START_DATE ON CONTRACTS
    FOR EACH ROW
    BEGIN
      IF :NEW.START_DATE < (SELECT DISTINCT END_DATE FROM CONTRACTS WHERE SSN = NEW.SSN) 
      THEN OLD.END_DATE := NEW.START_DATE;
      END IF;
    END;
    /

And sql developres says that subquery not allowed in this context. Im sure that is to repair but I cant solve it because my level is so low. I hope you help me:) Thanks


回答1:


1.

SELECT DISTINCT END_DATE FROM CONTRACTS WHERE SSN = NEW.SSN May Return one or more record which may cause proble.

2.

selecting from same table within trigger on which trigger is created may cause problem.

Thanks




回答2:


reed about Using Triggers
You cant set :OLD. values - this is read only value (:old values is values of updated row before update)... probably you try do this

update CONTRACTS set END_DATE = :NEW.START_DATE 
where SSN = :NEW.SSN and END_DATE < :NEW.START_DATE and someid <> nvl(:OLD.someid, :NEW.someid)


来源:https://stackoverflow.com/questions/36372988/solution-of-this-easy-trigger

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!