我想在HIRE中使用触发器
添加新行时从CAR更新CAR_CASEcreate or replace TRIGGER HIRE_CAR_CASE_UPDATE
AFTER INSERT OR UPDATE OF CAR_ID ON HIRE
REFERENCING OLD AS OLD NEW AS NEW
BEGIN
UPDATE CAR SET CAR_CASE =
(SELECT HIRE.CAR_CASE FROM HIRE where HIRE.CAR_ID = CAR.CAR_ID and TO_DATE (HIRE.DATE_) = TO_DATE(sysdate))
WHERE rowid = :NEW.ROWID;
END;
答案 0 :(得分:4)
看起来你想要做的是
CREATE OR REPLACE TRIGGER HIRE_CAR_CASE_UPDATE
AFTER INSERT OR UPDATE OF CAR_ID ON HIRE
FOR EACH ROW
BEGIN
UPDATE CAR c
SET c.CAR_CASE = :NEW.CAR_CASE
WHERE c.CAR_ID = :NEW.CAR_ID;
END HIRE_CAR_CASE_UPDATE;
因为我不知道您的数据库是什么样的或者它是如何使用的,所以我不能说是否应该对由以下引用的“旧”CAR进行类似的更新:OLD.CAR_ID。
然而,或许更重要的是 - 这是业务逻辑,它实际上不应该在触发器中实现。将这种逻辑放在您的应用程序中,或者将其放入存储过程中,该存储过程为特定业务任务执行所有必需的逻辑,而不是在一堆触发器,过程,单个SQL语句等中分散逻辑。祝你好运。