UPDATE使用ROWID或ROWNUM

时间:2016-12-29 14:08:21

标签: sql oracle

我想在HIRE中使用触发器

添加新行时从CAR更新CAR_CASE
create 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;

1 个答案:

答案 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语句等中分散逻辑。

祝你好运。