zoukankan      html  css  js  c++  java
  • 记录那些删除的伴我成长的触发器

    1,ADDCSUTSAME

    create or replace trigger ADDCSUTSAME
      before insert on bd_cubasdoc
      for each row
    declare
      -- local variables here
      pk_bas  varchar2(200);
      cursor basjob(id varchar2)is
      select custname from bd_cubasdoc
      where custname=id
      and nvl(dr,0)=0
      /*and custname in (select custname from bd_cubasdoc)
      and length(custname)>3*/;
    begin
     open basjob(:new.custname) ;
     loop
       fetch basjob
       into pk_bas;
      exit when basjob%notfound;
      end loop;
       close basjob;
      if pk_bas is not null then
        begin
          raise_application_error(-20001,pk_bas||'客商名称重复,请直接修改已存在客商增行!');
          end;
          end if;
    end ADDCSUTSAME;

    优化v

    create or replace trigger ADDC3
      before insert on bd_cubasdoc
      for each row
    declare
      -- local variables here
      i number(1);
    begin
     select count(1)into i from bd_cubasdoc
    where custname=:new.custname or
          (engname=:new.engname and length(:new.engname)>3) or
          (taxpayerid=:new.taxpayerid and length(:new.taxpayerid)>3);  
      if i>0 or
        regexp_like(:new.custname,'[[:space:]]') 
         then
        begin
          raise_application_error(-20001,'客商已存在或有空格,请在已有客商修改增行!');
          end;
      
          end if;
       
    end;

    2,ADDCUST1A

    create or replace trigger ADDCUST1A
      before INSERT or UPDATE on  BD_CUBASDOC 
      for each row
    declare
      -- local variables here
    begin
      IF regexp_like(:new.custname,'[[:xdigit:]]') or
        regexp_like(:new.custname,'[[:space:]]') 
         then
         raise_application_error(-20001,'注意:客商不能重复,请在原有客商增行!');
     end if;    
    
    end ;

    3,CSpcace_ACCBANK

    create or replace trigger CSpcace_ACCBANK
    before insert or update on bd_accbank  
      for each row
    declare
      -- local variables here
      pk_bas bd_accbank.pk_accbank%type;
     cursor basjob(id varchar2) is 
     select pk_accbank from ncv5.bd_cubasdoc,ncv5.arap_djfb,ncv5.bd_cumandoc,ncv5.bd_accbank
    
            where ncv5.arap_djfb.ksbm_cl = ncv5.bd_cumandoc.pk_cumandoc
             and ncv5.bd_cumandoc.pk_cubasdoc = ncv5.bd_cubasdoc.pk_cubasdoc
             and ncv5.bd_accbank.pk_accbank = ncv5.arap_djfb.skyhzh
             and ncv5.arap_djfb.payflag in ('1', '2')
     and pk_accbank=id;
     
     
     
    begin
     open basjob(:new.pk_accbank);
     loop
       fetch basjob into pk_bas;
       exit when basjob%notfound;
       end loop;
       close basjob;
       
     if regexp_like(:new.bankacc,'[[:space:]]') or
        regexp_like(:new.combineaccnum,'[[:space:]]') or
        regexp_like(:new.unitname,'[[:space:]]') or
       pk_bas is not null
         then
        raise_application_error(-20001,'银行账号、联行号、单位名称中有空格或账号已从网银成功付款!');
      
    end if;
    end;

    优化v-1

    create or replace trigger C_ACCBANK_SPACE
    before insert or update on bd_accbank  
      for each row
    declare
      -- local variables here
      
    begin 
     if regexp_like(:new.bankacc,'[[:space:]]') or
        regexp_like(:new.combineaccnum,'[[:space:]]') or
        regexp_like(:new.unitname,'[[:space:]]') 
         then
        raise_application_error(-20001,'注意:银行账号、联行号或单位名称中有空格!');
     end if;    
    end ;

    优化v-2

    create or replace trigger C_ACCBANK_NET
      before UPDATE on   BD_ACCBANK
      for each row
    declare
      -- local variables here
      pk_bas bd_accbank.pk_accbank%type;
         
     cursor basjob(id varchar2) is 
     select pk_accbank from ncv5.bd_cubasdoc,ncv5.arap_djfb,ncv5.bd_cumandoc,ncv5.bd_accbank
            where ncv5.arap_djfb.ksbm_cl = ncv5.bd_cumandoc.pk_cumandoc
             and ncv5.bd_cumandoc.pk_cubasdoc = ncv5.bd_cubasdoc.pk_cubasdoc
             and ncv5.bd_accbank.pk_accbank = ncv5.arap_djfb.skyhzh
             and ncv5.arap_djfb.payflag in ('1', '2')
             and pk_accbank=id; 
     
    begin
     open basjob(:new.pk_accbank);
     loop
       fetch basjob into pk_bas;
       exit when basjob%notfound;
       end loop;
       close basjob;
     if pk_bas is not null then
      /* if :new.bankacc<>:old.bankacc or
         :new.unitname<>:old.unitname*/
        if utl_match.edit_distance_similarity(:old.bankacc,:new.bankacc)<'90' or
           utl_match.edit_distance_similarity(:old.unitname,:new.unitname)<'70'
         then
       raise_application_error(-20001,'注意:账户已成功付款,不能修改账号或单位名称!');
       end if;
       end if;
    end;

    4,delbd_custbank

    create or replace trigger delbd_custbank
    
      before delete on bd_custbank
    
      for each row
    
    declare
    
      -- local variables here
    
      pk_bas char(20);
    
      cursor basjob(id char) is
    
        select pk_custbank
    
          from ncv5.bd_custbank /*目标数据库表*/
    
         where pk_custbank = id
    
           and nvl(dr, 0) = 0
            and pk_custbank not in
           (select bd_custbank.pk_custbank from ncv5.arap_djfb, ncv5.bd_accbank,ncv5.bd_custbank
    where bd_accbank.pk_accbank = arap_djfb.skyhzh
    and  bd_accbank.pk_accbank=bd_custbank.pk_accbank);
    
    begin
    
      /*判断数据是否在目标数据库存在*/
    
      open basjob(:old.pk_custbank);
    
      loop
    
        fetch basjob
    
          into pk_bas;
          /*dbms_output.put_line('pa_bas:'||pk_bas);*/
        exit when basjob%notfound;
    
      end loop;
    
      close basjob;
    
      /******************************/
    
      if pk_bas is not null then
    
        begin
    
          delete ncv5.bd_custbank /*目标数据库表*/
    
          where pk_custbank = :old.pk_custbank;
    
        end;
    
      end if;
    
    end delbd_custbank;

    5,delbd_custbanknet

    create or replace trigger delbd_custbanknet
       before delete or update on bd_custbank
      for each row
    declare
      -- local variables here
      pk_bas char(20);
      cursor basjob(id char) is
        select pk_custbank
          from ncv5.bd_custbank /*目标数据库表*/
         where pk_custbank = id
           and nvl(dr, 0) = 0
           and pk_custbank in
           (select bd_custbank.pk_custbank from ncv5.arap_djfb, ncv5.bd_accbank,ncv5.bd_custbank
    where bd_accbank.pk_accbank = arap_djfb.skyhzh
    and  bd_accbank.pk_accbank=bd_custbank.pk_accbank);
    begin
      /*判断数据是否在目标数据库存在*/
      open basjob(:old.pk_custbank);
      loop
        fetch basjob
          into pk_bas;
        exit when basjob%notfound;
      end loop;
      close basjob;
      /******************************/
    
      if pk_bas is not null then
        begin
           raise_application_error(-20001, :old.account||'已从网银付款,不能修改或删行,请取消!');
        end;
      end if;
    end delbd_custbanknet;

    4,5优化v

    create or replace trigger S_DELETE_CUSTBANK
    
      before delete on bd_custbank
    
      for each row
    
    declare
    
      -- local variables here
    
      pk_bas char(20);
    
      cursor basjob(id char) is
      
        select pk_custbank
        
          from ncv5.bd_custbank /*目标数据库表*/
        
         where pk_custbank = id
              
           and nvl(dr, 0) = 0
           and pk_custbank not in
               (select bd_custbank.pk_custbank
                  from ncv5.arap_djfb, ncv5.bd_accbank, ncv5.bd_custbank
                 where bd_accbank.pk_accbank = arap_djfb.skyhzh
                   and bd_accbank.pk_accbank = bd_custbank.pk_accbank);
    
    begin
    
      /*判断数据是否在目标数据库存在*/
    
      open basjob(:old.pk_custbank);
    
      loop
      
        fetch basjob
        
          into pk_bas;
        /*dbms_output.put_line('pa_bas:'||pk_bas);*/
        exit when basjob%notfound;
      
      end loop;
    
      close basjob;
    
      /******************************/
    
      if pk_bas is not null then
      
        begin
        
          delete ncv5.bd_custbank /*目标数据库表*/
          
           where pk_custbank = :old.pk_custbank;
        
        end;
      else
        raise_application_error(-20001,
                                :old.account || '已从网银付款,不能修改或删行,请取消!');
      
      end if;
    end S_DELETE_CUSTBANK;

    6,UPDCUSTNET

    create or replace trigger UPDCUSTNET
    
      before update on bd_cubasdoc
    
      for each row
    
    declare
    
      -- local variables here
    
       pk_bas char(20);
    
       pk_custname varchar2(200);
    
      /*查询目标公司是否存在基本档案*/
    
      cursor basjob(id char) is
    
        select pk_cubasdoc,custname
    
          from ncv5.bd_cubasdoc /*目标数据库表*/
    
           where pk_cubasdoc = id
    
           and nvl(dr, 0) = 0
    
           and  pk_cubasdoc  in
    
           (select bd_cubasdoc.pk_cubasdoc from ncv5.bd_cubasdoc,ncv5.arap_djfb,ncv5.bd_cumandoc
    
            where arap_djfb.ksbm_cl = bd_cumandoc.pk_cumandoc
    
             and bd_cumandoc.pk_cubasdoc = bd_cubasdoc.pk_cubasdoc
             and arap_djfb.payflag in ('1', '2'));
    
    begin
    
       open basjob(:new.pk_cubasdoc);
    
      loop
        fetch basjob
          into pk_bas,pk_custname;
    
        exit when basjob%notfound;
    
      end loop;
    
      close basjob;
    
      --raise_application_error(-20001,:new.pk_cubasdoc);
    
      --raise_application_error(-20001,:new.custname);
    
      --raise_application_error(-20001,pk_custname);
    
      --dbms_output.put_line(:new.pk_cubasdoc);
    
      if pk_bas is not null  then
    
        if  utl_match.edit_distance_similarity(pk_custname,:new.custname)<'50' then
    
        begin
    
          raise_application_error(-20001,pk_custname||'已从网银付款,且支付状态为‘支付成功’或‘支付中’,不能修改名称,请取消!(若实际支付失败或退回,请联系集团进行更改)');
    
        end;
        end if;
      end if;
    end UPDCUSTNET;

    优化v:

    create or replace trigger UPDCUSTALL
      before update on bd_cubasdoc
      for each row
    
    declare
      netpk number(1);
    begin
      --将从网银付款客商写入变量netname
      select count(distinct pk_cubasdoc) 
        into netpk
        from ncv5.arap_djfb, ncv5.bd_cumandoc
       where arap_djfb.ksbm_cl = bd_cumandoc.pk_cumandoc
         and bd_cumandoc.pk_cubasdoc = :new.pk_cubasdoc
         and arap_djfb.payflag in ('1', '2');
    
      --找到已从网银付款客商   
      if netpk >'0' then
        if utl_match.edit_distance_similarity(:old.custname, :new.custname) < '70' then
          raise_application_error(-20001, '已成功付款,不可任意修改');
        end if;
        --没有从网银付款客商
      else
        if utl_match.edit_distance_similarity(:old.custname, :new.custname) < '50' then
          raise_application_error(-20001, '不可任意修改,请新增客商');
        end if;
      
      end if;
    end;
  • 相关阅读:
    从C,C++,JAVA和C#看String库的发展(一)----C语言和C++篇
    Intent----android中的伟大邮差
    一步一步掌握线程机制(五)---等待与通知机制
    一步一步掌握线程机制(四)---同步方法和同步块
    一步一步掌握线程机制(三)---synchronized和volatile的使用
    利用单例模式解决全局访问问题
    一步一步掌握java的线程机制(二)----Thread的生命周期
    一步一步掌握java的线程机制(一)----创建线程
    如何快速学会android的四大基础----Service篇
    前端工程师必备实用网站
  • 原文地址:https://www.cnblogs.com/sumsen/p/2799228.html
Copyright © 2011-2022 走看看