• 建行个人卡不能委付trigger|itpub版主已经版主解决||触发器不能读它问题|


    create or replace trigger NOPAYFREE2
      before insert  on arap_djfb 
      for each row
    declare
      -- local variables here
      pk_bas char(20);
    
    begin
      select distinct bd_cubasdoc.custname
        into pk_bas
        from bd_cubasdoc, arap_djfb, bd_cumandoc
       where bd_cumandoc.pk_cubasdoc = bd_cubasdoc.pk_cubasdoc    
         and  bd_cumandoc.pk_cumandoc=:new.ksbm_cl  
         and :new.fkyhmc is null
         and bd_cubasdoc.freecustflag = 'Y';
         
      if pk_bas is not null then
        raise_application_error(-20001, pk_bas || '是建行个人卡,不能委托中心付款!');
      
      end if;
       exception
      when no_data_found then  
        return;
    
    end NOPAYFREE2;

    目前正常的保存之后update有问题,待优化

    针对加上update就提示找不到的问题,一路的意见:

    不是null,我就不让它触发
    一路-江苏南京  17:26:38
    最好使用函数来转换下再判断
    Sumsen♂  17:26:55
    nvl?
    一路-江苏南京  17:27:16

    Sumsen♂  17:27:33
    里面写:new吗
    一路-江苏南京  17:27:55

    有时候字段虽然看起来没内容,但是值不是null

    下面这样写也是报错,不能读它
    create or replace trigger NOPAYFREE2
      before insert or update  on arap_djfb 
      for each row
    declare
      -- local variables here
      pk_bas char(20);
    
    begin
      select distinct bd_cubasdoc.custname
        into pk_bas
        from bd_cubasdoc,  bd_cumandoc,arap_djfb,arap_djzb
       where bd_cumandoc.pk_cubasdoc = bd_cubasdoc.pk_cubasdoc    
         and  bd_cumandoc.pk_cumandoc=:new.ksbm_cl 
         and arap_djzb.vouchid=:new.vouchid 
         and  arap_djzb.djlxbm='23A1'
         and bd_cubasdoc.freecustflag = 'Y';
      if pk_bas is not null then
        raise_application_error(-20001, pk_bas || '是建行个人卡,不能委托中心付款!');
      
      end if;
       exception
      when no_data_found then  
        return;
    
    end NOPAYFREE2;

    2012.5.13下午更新:刚出差回来,感谢itpub版主ZALBB,少一个from表就ok了

    create or replace trigger NOPAYFREE
      before insert or update on arap_djfb
      for each row
    declare
      -- local variables here
      pk_bas char(20);
     
    begin
      select distinct bd_cubasdoc.custname
        into pk_bas
        from bd_cubasdoc, bd_cumandoc
       where bd_cumandoc.pk_cubasdoc = bd_cubasdoc.pk_cubasdoc   
         and  bd_cumandoc.pk_cumandoc=:new.ksbm_cl  
         and :new.fkyhmc is null
         and bd_cubasdoc.freecustflag = 'Y';
         
      if pk_bas is not null then
        raise_application_error(-20001, pk_bas||'-->账户是建行个人卡,不能使用委托中心付款!请当地行支付。');
     
      end if;
       exception
      when no_data_found then  
        return;
     
    end NOPAYFREE;

    学习总结:触发器写的时候,针对那个表,下面使用select into用法时候from表就不需要引用针对的表

  • 相关阅读:
    自定义Response
    并发编程之进程
    并发编程知识储备
    正则表达式和re模块
    Scrapy框架
    http协议和Chrome抓包工具
    requests库
    Beautifulsoup
    xpath
    Mysql一些操作
  • 原文地址:https://www.cnblogs.com/sumsen/p/2524688.html
Copyright © 2020-2023  润新知