Oracle function 触发器

Oracle中判断是否数字function:

  
  
  
  
  1. CREATE OR REPLACE FUNCTION ISNUMBER(MyStr VARCHAR2) RETURN NUMBER   
  2. IS   
  3.   STR VARCHAR2(400);   
  4.   ISNUM NUMBER;   
  5.   NUM NUMBER;   
  6. BEGIN   
  7.      --返回0,不是数字。1,是数字   
  8.      ISNUM:=0;   
  9.      STR:=TRIM(MyStr);   
  10.      --如果输入值为空,就返回不是数字。   
  11.      IF TRIM(STR) IS NOT NULL THEN   
  12.      BEGIN   
  13.           NUM:=TO_NUMBER(STR);   
  14.           ISNUM:=1;   
  15.           EXCEPTION   
  16.           WHEN INVALID_NUMBER THEN   
  17.                NULL;   
  18.           WHEN OTHERS THEN   
  19.                NULL;   
  20.      END;   
  21.      END IF;   
  22.      RETURN ISNUM;   
  23. END;   

触发器:

  
  
  
  
  1. create or replace trigger biufer_tbmeetmgr_CHANGETIME   
  2.  --after插入之后   
  3.  --before 插入之前   
  4.  before insert or update or delete   
  5.   on tbmeetmgr   
  6.  for each row   
  7.      
  8. declare   
  9.           TYPE c_time IS REF CURSOR;  --创建游离标记   
  10.           vrec c_time;   
  11.           varInt number ;   
  12.           strOverSql varchar2(30);   
  13.           roomname varchar2(100);   
  14.           roomcnt number;   
  15.           v_usercount number;   
  16.           roomId varchar2(100); --会议室编号   
  17.           booleanStr varchar2(10); --判断是否数字返回值   
  18.           v_username varchar2(50);   
  19. begin   
  20.   --调用存储过程   
  21.   if inserting then   
  22.     booleanStr := isnumber(:NEW.Huiyishi); --返回0为字符串、1为数字   
  23.     if booleanStr = 1 then   
  24.         roomId := :NEW.Huiyishi;   
  25.         select count(0) into roomcnt from tbmeetroom t where t.id = :NEW.Huiyishi;   
  26.         if roomcnt > 0 then   
  27.           select t.name into roomname from tbmeetroom t where t.id = :NEW.Huiyishi;   
  28.         end if;   
  29.         if roomcnt <= 0 then   
  30.           roomname := :NEW.Huiyishi;   
  31.         end if;   
  32.     end if;   
  33.        
  34.     if booleanStr = 0 then   
  35.         roomId := 0;   
  36.         roomname := :NEW.Huiyishi;   
  37.     end if;   
  38.        
  39.     select count(0) into v_usercount from tbsysuserinfo t where t.userid = :NEW.Creator;   
  40.     if v_usercount > 0 then   
  41.       select t.username into v_username from tbsysuserinfo t where t.userid = :NEW.Creator;   
  42.     end if;   
  43.     --一次性会议   
  44.     if :NEW.huiyimoshi = 1 then   
  45.       insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,roomId,: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);   
  46.     end if;   
  47.        
  48.       
  49.        
  50.     --单周会议   
  51.     varInt := 0;   
  52.     if :NEW.xunhuaimoshi = 1 then   
  53.           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;   
  54.                 OPEN vrec for SELECT to_char(next_day(to_date(substr(:NEW.Createtime,1,10),'yyyy-mm-dd')-1,   
  55.                 ceil(substr(:NEW.Xunhuairiqi,3)))+1+(rownum-1)*7 , 'yyyy-MM-dd')   
  56.                 from dual connect by rownum<=varInt ;     
  57.                   LOOP     
  58.                     FETCH vrec INTO strOverSql;  --入库终止日期   
  59.                     exit when vrec%notfound;   
  60.                     --dbms_output.put_line('----+++++单周循环日期++++++-----:'||strOverSql);   
  61.                     insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,roomId,: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);   
  62.                    -- commit;   
  63.                   end loop;   
  64.             
  65.     end if;   
  66.        
  67.     --每月循环   
  68.     varInt := 0;   
  69.     if :NEW.xunhuaimoshi = 3 then   
  70.     select ceil(months_between(to_date(:NEW.stoptime,'yyyy-mm-dd'),   
  71.                      to_date(substr(:NEW.createtime, 1, 10),'yyyy-mm-dd'))) into varInt from dual;   
  72.          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')   
  73.             from dual connect by rownum<= ceil(varInt) ;   
  74.                LOOP     
  75.                 FETCH vrec INTO strOverSql;  --入库终止日期   
  76.                 exit when vrec%notfound;   
  77.                 --dbms_output.put_line('月度时间:'||strOverSql);   
  78.                 insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,roomId,: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);   
  79.                -- commit;   
  80.                end loop;               
  81.               
  82.     end if;   
  83.        
  84.        
  85.     --季度循环   
  86.     varInt := 0;   
  87.     if :NEW.xunhuaimoshi = 4 then   
  88.     select ceil((to_date(:NEW.stoptime,'yyyy-mm-dd')-to_date(substr(:NEW.createtime, 1, 10),'yyyy-mm-dd'))/90)   
  89.                into varInt from dual;   
  90.          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')   
  91.             from dual connect by rownum<= ceil(varInt) ;   
  92.                LOOP     
  93.                 FETCH vrec INTO strOverSql;  --入库终止日期   
  94.                 exit when vrec%notfound;   
  95.                 --dbms_output.put_line('月度时间:'||strOverSql);   
  96.                 insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,roomId,: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);   
  97.                -- commit;   
  98.                end loop;               
  99.               
  100.     end if;       
  101.        
  102.   end if;    
  103.   if deleting then   
  104.     delete from tbmeetmgrinfo t where t.mid = :OLD.Id;   
  105.   end if;   
  106.   if updating then   
  107.     delete from tbmeetmgrinfo t where t.mid = :OLD.Id;   
  108.     booleanStr := isnumber(:NEW.Huiyishi);   
  109.     if booleanStr = 1 then   
  110.         roomId := :NEW.Huiyishi;   
  111.         select count(0) into roomcnt from tbmeetroom t where t.id = :NEW.Huiyishi;   
  112.         if roomcnt > 0 then   
  113.           select t.name into roomname from tbmeetroom t where t.id = :NEW.Huiyishi;   
  114.         end if;   
  115.         if roomcnt <= 0 then   
  116.           roomname := :NEW.Huiyishi;   
  117.         end if;   
  118.     end if;   
  119.        
  120.     if booleanStr = 0 then   
  121.         roomId := 0;   
  122.         roomname := :NEW.Huiyishi;   
  123.     end if;   
  124.        
  125.     select count(0) into v_usercount from tbsysuserinfo t where t.userid = :NEW.Creator;   
  126.     if v_usercount > 0 then   
  127.       select t.username into v_username from tbsysuserinfo t where t.userid = :NEW.Creator;   
  128.     end if;   
  129.     --一次性会议   
  130.     if :NEW.huiyimoshi = 1 then   
  131.       insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,roomId,: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);   
  132.     end if;   
  133.        
  134.       
  135.        
  136.     --单周会议   
  137.     varInt := 0;   
  138.     if :NEW.xunhuaimoshi = 1 then   
  139.           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;   
  140.                 OPEN vrec for SELECT to_char(next_day(to_date(substr(:NEW.Createtime,1,10),'yyyy-mm-dd')-1,   
  141.                 ceil(substr(:NEW.Xunhuairiqi,3)))+1+(rownum-1)*7 , 'yyyy-MM-dd')   
  142.                 from dual connect by rownum<=varInt ;      
  143.                   LOOP     
  144.                     FETCH vrec INTO strOverSql;  --入库终止日期   
  145.                     exit when vrec%notfound;   
  146.                     --dbms_output.put_line('----+++++单周循环日期++++++-----:'||strOverSql);   
  147.                     insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,roomId,: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);   
  148.                    -- commit;   
  149.                   end loop;   
  150.             
  151.     end if;   
  152.        
  153.     --每月循环   
  154.     varInt := 0;   
  155.     if :NEW.xunhuaimoshi = 3 then   
  156.     select ceil(months_between(to_date(:NEW.stoptime,'yyyy-mm-dd'),   
  157.                      to_date(substr(:NEW.createtime, 1, 10),'yyyy-mm-dd'))) into varInt from dual;   
  158.          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')   
  159.             from dual connect by rownum<= ceil(varInt) ;   
  160.                LOOP     
  161.                 FETCH vrec INTO strOverSql;  --入库终止日期   
  162.                 exit when vrec%notfound;   
  163.                 --dbms_output.put_line('月度时间:'||strOverSql);   
  164.                 insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,roomId,: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);   
  165.                -- commit;   
  166.                end loop;               
  167.               
  168.     end if;   
  169.        
  170.        
  171.     --季度循环   
  172.     varInt := 0;   
  173.     if :NEW.xunhuaimoshi = 4 then   
  174.     select ceil((to_date(:NEW.stoptime,'yyyy-mm-dd')-to_date(substr(:NEW.createtime, 1, 10),'yyyy-mm-dd'))/90)   
  175.                into varInt from dual;   
  176.          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')   
  177.             from dual connect by rownum<= ceil(varInt) ;   
  178.                LOOP     
  179.                 FETCH vrec INTO strOverSql;  --入库终止日期   
  180.                 exit when vrec%notfound;   
  181.                 --dbms_output.put_line('月度时间:'||strOverSql);   
  182.                 insert into tbmeetmgrinfo values(tbmeetmgrinfo_tb_sequence.nextval,roomId,: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);   
  183.                -- commit;   
  184.                end loop;               
  185.               
  186.     end if;       
  187.   end if;   
  188. end;   

你可能感兴趣的:(oracle,触发器,function,职场,休闲)