简体   繁体   English

UPDATE使用ROWID或ROWNUM

[英]UPDATE used ROWID or ROWNUM

I want to update CAR_CASE from CAR when I add a new row in HIRE used trigger 当我在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;

It appears that what you wanted to do was 看来您想做的是

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;

Because I don't know what your database looks like or how it's to be used I can't say if a similar update should be made to the "old" CAR referred to by :OLD.CAR_ID. 因为我不知道您的数据库是什么样子或如何使用,所以我无法说是否应该对:OLD.CAR_ID所指的“旧” CAR进行类似的更新。

Perhaps more to the point, however - this is business logic which really should not be implemented in a trigger. 但是,也许更重要的是-这是业务逻辑,实际上不应在触发器中实现。 Put this kind of logic in your application, or perhaps put it into a stored procedure which performs all the necessary logic for a particular business task, rather than scattering logic willy-nilly among a bunch of triggers, procedures, individual SQL statements, etc. 可以将这种逻辑放入您的应用程序中,或者将其放入执行特定业务任务所需的所有逻辑的存储过程中,而不是将逻辑随意分散在触发器,过程,单个SQL语句等中。

Best of luck. 祝你好运。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM