Oracle function 触发器
Oracle function 触发器
老火、又要把上一篇的存储过程转移到触发器里面来!!!
而且上一篇中有很多bug!!!见
- create or replace trigger biufer_tbmeetmgr_CHANGETIME
- --after插入之后
- --before 插入之前
- before insert or update or delete
- on tbmeetmgr
- for each row
- declare
- TYPE c_time IS REF CURSOR; --创建游离标记
- vrec c_time;
- varInt number ;
- strOverSql varchar2(30);
- roomname varchar2(100);
- roomcnt number;
- v_usercount number;
- v_username varchar2(50);
- begin
- --调用存储过程
- if inserting then
- select count(0) into roomcnt from tbmeetroom t where t.id = :NEW.Huiyishi;
- select count(0) into v_usercount from tbsySUSErinfo t where t.userid = :NEW.Creator;
- if roomcnt > 0 then
- select t.name into roomname from tbmeetroom t where t.id = :NEW.Huiyishi;
- end if;
- if roomcnt <= 0 then
- roomname := :NEW.Huiyishi;
- end if;
- if v_usercount > 0 then
- select t.username into v_username from tbsysuserinfo t where t.userid = :NEW.Creator;
- end if;
- --一次性会议
- if :NEW.huiyimoshi = 1 then
- insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,:NEW.Huiyishi,:NEW.Starttime,:NEW.Endtime,substr(:NEW.Createtime,1,10),:NEW.Stoptime,0,:NEW.ecid, :NEW.Id,:NEW.TONGZHIFANGSHI,:NEW.TONGZHISHIJIAN,roomname,:NEW.ZHUTI,:NEW.Meetno,:NEW.Creator,v_username);
- end if;
- --单周会议
- varInt := 0;
- if :NEW.xunhuaimoshi = 1 then
- select ceil(( to_date(:NEW.Stoptime,'yyyy-mm-dd') - next_day(to_date(substr(:NEW.Createtime, 1, 10),'yyyy-mm-dd')-1, ceil(substr(:NEW.Xunhuairiqi,3)))+1 )/7) into varInt from dual;
- OPEN vrec for SELECT to_char(next_day(to_date(substr(:NEW.Createtime,1,10),'yyyy-mm-dd')-1,
- ceil(substr(:NEW.Xunhuairiqi,3)))+1+(rownum-1)*7 , 'yyyy-MM-dd')
- from dual connect by rownum<=varInt ;
- LOOP
- FETCH vrec INTO strOverSql; --入库终止日期
- exit when vrec%notfound;
- --dbms_output.put_line('----+++++单周循环日期++++++-----:'||strOverSql);
- insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,:NEW.Huiyishi,:NEW.Starttime,:NEW.Endtime,substr(:NEW.Createtime,1,10),strOverSql,1,:NEW.ecid,:NEW.Id,:NEW.TONGZHIFANGSHI,:NEW.TONGZHISHIJIAN,roomname,:NEW.ZHUTI,:NEW.Meetno,:NEW.Creator,v_username);
- -- commit;
- end loop;
- end if;
- --每月循环
- varInt := 0;
- if :NEW.xunhuaimoshi = 3 then
- select ceil(months_between(to_date(:NEW.stoptime,'yyyy-mm-dd'),
- to_date(substr(:NEW.createtime, 1, 10),'yyyy-mm-dd'))) into varInt from dual;
- OPEN vrec for SELECT to_char(add_months(to_date((substr(:NEW.createtime,1,8))||(substr(:NEW.Xunhuairiqi,3,4)),'yyyy-MM-dd'),+(rownum-1)), 'yyyy-mm-dd')
- from dual connect by rownum<= ceil(varInt) ;
- LOOP
- FETCH vrec INTO strOverSql; --入库终止日期
- exit when vrec%notfound;
- --dbms_output.put_line('月度时间:'||strOverSql);
- insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,:NEW.Huiyishi,:NEW.Starttime,:NEW.Endtime,substr(:NEW.Createtime,1,10),strOverSql,3,:NEW.ecid,:NEW.Id,:NEW.TONGZHIFANGSHI,:NEW.TONGZHISHIJIAN,roomname,:NEW.ZHUTI,:NEW.Meetno,:NEW.Creator,v_username);
- -- commit;
- end loop;
- end if;
- --季度循环
- varInt := 0;
- if :NEW.xunhuaimoshi = 4 then
- select ceil((to_date(:NEW.stoptime,'yyyy-mm-dd')-to_date(substr(:NEW.createtime, 1, 10),'yyyy-mm-dd'))/90)
- into varInt from dual;
- OPEN vrec for SELECT to_char(add_months(to_date((substr(:NEW.createtime,1,5))||(substr(:NEW.Xunhuairiqi,3,7)),'yyyy-MM-dd'),+(rownum-1)*3), 'yyyy-mm-dd')
- from dual connect by rownum<= ceil(varInt) ;
- LOOP
- FETCH vrec INTO strOverSql; --入库终止日期
- exit when vrec%notfound;
- --dbms_output.put_line('月度时间:'||strOverSql);
- insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,:NEW.Huiyishi,:NEW.Starttime,:NEW.Endtime,substr(:NEW.Createtime,1,10),strOverSql,4,:NEW.ecid,:NEW.Id,:NEW.TONGZHIFANGSHI,:NEW.TONGZHISHIJIAN,roomname,:NEW.ZHUTI,:NEW.Meetno,:NEW.Creator,v_username);
- -- commit;
- end loop;
- end if;
- end if;
- if deleting then
- delete from tbmeetmgrinfo t where t.mid = :OLD.Id;
- end if;
- if updating then
- delete from tbmeetmgrinfo t where t.mid = :OLD.Id;
- select count(0) into roomcnt from tbmeetroom t where t.id = :NEW.Huiyishi;
- if roomcnt > 0 then
- select t.name into roomname from tbmeetroom t where t.id = :NEW.Huiyishi;
- end if;
- if roomcnt <= 0 then
- roomname := :NEW.Huiyishi;
- end if;
- --一次性会议
- if :NEW.huiyimoshi = 1 then
- insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,:NEW.Huiyishi,:NEW.Starttime,:NEW.Endtime,substr(:NEW.Createtime,1,10),:NEW.Stoptime,0,:NEW.ecid, :NEW.Id,:NEW.TONGZHIFANGSHI,:NEW.TONGZHISHIJIAN,roomname,:NEW.ZHUTI,:NEW.Meetno,:NEW.Creator,v_username);
- end if;
- --单周会议
- varInt := 0;
- if :NEW.xunhuaimoshi = 1 then
- select ceil(( to_date(:NEW.Stoptime,'yyyy-mm-dd') - next_day(to_date(substr(:NEW.Createtime, 1, 10),'yyyy-mm-dd')-1, ceil(substr(:NEW.Xunhuairiqi,3)))+1 )/7) into varInt from dual;
- OPEN vrec for SELECT to_char(next_day(to_date(substr(:NEW.Createtime,1,10),'yyyy-mm-dd')-1,
- ceil(substr(:NEW.Xunhuairiqi,3)))+1+(rownum-1)*7 , 'yyyy-MM-dd')
- from dual connect by rownum<=varInt ;
- LOOP
- FETCH vrec INTO strOverSql; --入库终止日期
- exit when vrec%notfound;
- --dbms_output.put_line('----+++++单周循环日期++++++-----:'||strOverSql);
- insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,:NEW.Huiyishi,:NEW.Starttime,:NEW.Endtime,substr(:NEW.Createtime,1,10),strOverSql,1,:NEW.ecid,:NEW.Id,:NEW.TONGZHIFANGSHI,:NEW.TONGZHISHIJIAN,roomname,:NEW.ZHUTI,:NEW.Meetno,:NEW.Creator,v_username);
- -- commit;
- end loop;
- end if;
- --每月循环
- varInt := 0;
- if :NEW.xunhuaimoshi = 3 then
- select ceil(months_between(to_date(:NEW.stoptime,'yyyy-mm-dd'),
- to_date(substr(:NEW.createtime, 1, 10),'yyyy-mm-dd'))) into varInt from dual;
- OPEN vrec for SELECT to_char(add_months(to_date((substr(:NEW.createtime,1,8))||(substr(:NEW.Xunhuairiqi,3,4)),'yyyy-MM-dd'),+(rownum-1)), 'yyyy-mm-dd')
- from dual connect by rownum<= ceil(varInt) ;
- LOOP
- FETCH vrec INTO strOverSql; --入库终止日期
- exit when vrec%notfound;
- --dbms_output.put_line('月度时间:'||strOverSql);
- insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,:NEW.Huiyishi,:NEW.Starttime,:NEW.Endtime,substr(:NEW.Createtime,1,10),strOverSql,3,:NEW.ecid,:NEW.Id,:NEW.TONGZHIFANGSHI,:NEW.TONGZHISHIJIAN,roomname,:NEW.ZHUTI,:NEW.Meetno,:NEW.Creator,v_username);
- -- commit;
- end loop;
- end if;
- --季度循环
- varInt := 0;
- if :NEW.xunhuaimoshi = 4 then
- select ceil((to_date(:NEW.stoptime,'yyyy-mm-dd')-to_date(substr(:NEW.createtime, 1, 10),'yyyy-mm-dd'))/90)
- into varInt from dual;
- OPEN vrec for SELECT to_char(add_months(to_date((substr(:NEW.createtime,1,5))||(substr(:NEW.Xunhuairiqi,3,7)),'yyyy-MM-dd'),+(rownum-1)*3), 'yyyy-mm-dd')
- from dual connect by rownum<= ceil(varInt) ;
- LOOP
- FETCH vrec INTO strOverSql; --入库终止日期
- exit when vrec%notfound;
- --dbms_output.put_line('月度时间:'||strOverSql);
- insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,:NEW.Huiyishi,:NEW.Starttime,:NEW.Endtime,substr(:NEW.Createtime,1,10),strOverSql,4,:NEW.ecid,:NEW.Id,:NEW.TONGZHIFANGSHI,:NEW.TONGZHISHIJIAN,roomname,:NEW.ZHUTI,:NEW.Meetno,:NEW.Creator,v_username);
- -- commit;
- end loop;
- end if;
- end if;
- end;
|
评论暂时关闭