2 lcm zg lcm_zg 于 2016.05.08 22:12 提问

oracle 触发器 插删改
 create or replace trigger TG_attend_417
before delete or insert or update on attend_417
for each row
begin
    if inserting then 
        update stud set sum_evaluation = sum_evaluation-2*(select count(*)from attend_417 where (attendance = 'la')-5*(select count(*)from attend_417 where attendance = 't')-1*(select count(*)from attend_417 where attendance = 'le')
        where sno=:new.sno;
    end if;
    if deleting then
        update stud set sum_evaluation = sum_evaluation-2*(select count(*)from attend_417 where (attendance = 'la')-5*(select count(*)from attend_417 where attendance = 't')-1*(select count(*)from attend_417 where attendance = 'le')
        where sno = :old.sno;
    end if;
    if updating then 
        update stud set sum_evaluation = sum_evaluation-2*(select count(*)from attend_417 where (attendance = 'la')-5*(select count(*)from attend_417 where attendance = 't')-1*(select count(*)from attend_417 where attendance = 'le')
        where sno = :old.sno;
    end if;
end;

这是代码,la表示迟到,扣2分,t表示旷课,扣5分,le表示请假,扣1分,attendance 表示出勤类别

请问要怎么修改才是正确的?

1个回答

caozhy
caozhy   Ds   Rxr 2016.05.08 23:20
已采纳
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Oracle插入时删除当天重复线路数据触发器
Create or Replace Trigger DeleGetpassengertotal   before insert on z_getpassengertotal --监听表插入前   for each row --行触发器 declare   integrity_error exception;   errno  integer;   errmsg char(200); --执行PL/...
oracle中插入数据时自动生成主键的触发器
create or replace trigger ChangeMessageSequenceTrigger before insert on MESSAGEINFORMATION for each row declare message_num messageinformation.messagenum%type; begin select messageinformation_
ORACLE触发器及如何直接修改新增行的内容
CREATE OR REPLACE TRIGGER uptime BEFORE   --这里必须用before INSERT ON table1 FOR EACH ROW    --for each row是行级触发,没有则是语句级触发。比如用一条语句向表中插入了10条内容,则还是仅触发一次。如:insert  into table1 select * from table2,则仅触发一次。所以我
在trigger中实现本表中修改插入的行
做一个表的insert的trigger,目的是只修改插入行的字段。 CREATEORREPLACETRIGGER TR_RME_SLOT BEFORE    INSERTONRME_SLOT    FOREACHROWBEGIN IF(:NEW.POSITION >=0AND:NEW.POSITION 10)THEN      :NEW.SLOT_NAME :=0|
ORACLE触发器:在insert之前,判断这条插入语句是否可插入,不可插入时抛异常........
CREATE OR REPLACE TRIGGER "RQC_RECORD_TRI_INS"  BEFORE insert ON RQC_RECORD FOR EACH ROW DECLARE     NEW_TIME VARCHAR2(8);     START_TIME VARCHAR2(8);     END_TIME VARCHAR2(8);     INSERT_EXCE
oracle触发器,insert时数据插入另一个表中
<br />CREATE OR REPLACE TRIGGER TRG_aI <br />AFTER INSERT <br />ON a <br />FOR EACH ROW <br />BEGIN <br />INSERT INTO b (ID, Name ) <br />VALUES( :NEW.id, :NEW.Name ) <br />end;
oracle触发器中对同一张表进行更新再查询时,需加自制事务
CREATE OR REPLACE TRIGGER Trg_ReimFact    BEFORE UPDATE    ON BP_Order    FOR EACH ROW DECLARE  PRAGMA AUTONOMOUS_TRANSACTION;--自制事务  fc     varchar2(255); BEGIN    IF ( :NEW.orderstate = 2
Oracle 跨用户表间数据操作(触发器实现)
需求:     用户hfxcroad中有一个表P_TABLE,创建表语句如下:    create table P_TABLE    (        ID varchar2(50) default SYS_GUID(),        NC varchar2(50)    );    用户fdfxkh中有一个表P_TABLE,创建语句如下:   create table P_TABLE   ( 
oracle插入修改触发器改变时间
CREATE OR REPLACE TRIGGER "MYUSAP".TR_USAP_USER_ROLE_INDATE_TIME before INSERT OR UPDATE ON TB_USAP_USER_ROLE_LINK FOR EACH ROW BEGIN IF INSERTING THEN :NEW.link_indate := SYSDATE;
oracle触发器中增删改查本表 -自治事务
oracle触发器中增删改查本表   (1)只有before insert触发器中才可以查询或更新本表 ? 1 2 3 4 5 6 7 8 9 10 11 create or replace trigger tri_test_ins befor