| ' '

问题描述 投票:0回答:1

这里是概念模型。enter image description here在driver表中, totalTripMade属性都是空的, 但是trip表中包含了所有driver所做的行程, 所以我需要创建一个触发器,当一个记录被插入到trip中时, 触发器会通过计算所有行程来更新totalTripMade。

create or replace trigger updateTrip
   AFTER INSERT 
     on TRIP
     for each row
      declare
         PRAGMA AUTONOMOUS_TRANSACTION;
         totalTrips number;
      begin

     UPDATE DRIVER 
     SET TOTALTRIPMADE = (SELECT COUNT(L#) FROM TRIP WHERE L# =:NEW.L#)
     WHERE L#=:NEW.L#;

         SELECT COUNT(L#) into totalTrips FROM TRIP WHERE L# =:NEW.L#;
         DBMS_OUTPUT.PUT_LINE(:NEW.L# || ' ' || totalTrips);
   commit;
end;
/

SHOW ERRORS;

select * from DRIVER;
--
insert into TRIP values(109, 10001, 'SST005', sysdate );
insert into TRIP values(110, 10001, 'SST005', sysdate );
insert into TRIP values(111, 10001, 'SST005', sysdate );


--
select * from DRIVER;
select * from TRIP;

所以在这3条插入语句之前,司机10001已经跑了27趟,因为根据l#10001有27条记录,但每次插入后,这条代码 "DBMS_OUTPUT.PUT_LINE(:NEW.L#)

plsql triggers sqlplus database-trigger
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.