我的触发器有问题(我是oracle的新手) 使用此触发器,我想在插入新合约时,并且此合约的start_date位于该用户的另一个合约的end_date之前,触发器必须将旧的end_date更改为新合约的start_date。
这是我的代码:
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;
/
并且sql developres说在这种情况下不允许使用子查询。我确定要修复,但我无法解决它因为我的水平太低了。我希望你帮助我:)谢谢
答案 0 :(得分:0)
1
SELECT NISTINCT END_DATE FROM CONTRACTS SSN = NEW.SSN 可能会返回一条或多条可能导致问题的记录。
2
在创建触发器的触发器中从同一表中选择可能会导致问题。
由于
答案 1 :(得分:0)
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)