zoukankan      html  css  js  c++  java
  • oracle 触发器number判断空值,:NEW赋值,for each row,sql变量引号,to_date,to_char

    1.number类型在库中可能存在null这种数据

      判断是否为空时要用如下:

      IF(nvl(:NEW.BACAH,0) <>0)

     不能用IF(BACAH IS NOT NULL)

    2.

      2.1 、取值时,需要到:NEW中取,有时也要到:OLD中取,具体情况具体分析

             赋值如红色

             1.SELECT B38_CODE INTO code FROM TEMP WHERE BAC_BACAW=:NEW.BACAW AND BAC_BACAE=:NEW.BACAE;

              变量赋值

              2.temp:==:NEW.BACAE

      2.2、 FOR EACH ROW代表一条一条数据执行

          create or replace TRIGGER TR_BAC
          BEFORE  INSERT OR UPDATE
          ON BAC_BACK
          FOR EACH ROW
          DECLARE

    3. sql语句放入变量中,并执行,注意引号的运用

    sql_temp := 'UPDATE b38_back SET '||code||'='||:NEW.BACAH || ' WHERE B0110= '''||:NEW.B0110||''' AND  TO_CHAR (B38Z0,''YYYYMM'') = TO_CHAR(TO_DATE('''||:NEW.BACZ0||'''),''YYYY'')||''01''';    

    execute immediate sql_temp;

    number型一个引号,varchar2三个引号,看例子分析一下,很简单,为啥yyyymm是俩个引号,因为时间执行的sql时yyyy要放入到’yyyy‘中,所以俩个引号,同理'''||:NEW.B0110||'''也要是’1000‘,这种格式,第一个引号与前面的引号相连,后面俩个空1000左右俩个引号

    4.  TO_CHAR 与   TO_DATE的使用,如3,

    TO_CHAR (B38Z0,''YYYYMM'') = TO_CHAR(TO_DATE('''||:NEW.BACZ0||'''),''YYYY'')||''01''';  

    注意如下: 要将变量转为date类型,不然会出现to_char('01-1月-15',‘yyyy’)出错

  • 相关阅读:
    Java堆和优先队列
    JAVA取数两个数组交集,考虑重复和不重复元素
    Java策略模式
    Java设计模式迭代器
    Java 模板模式
    java图片缩放与裁剪
    Java桥接模式
    Java集合实现
    Java Mybatis实现主从同步
    Java组合模式
  • 原文地址:https://www.cnblogs.com/beijingstruggle/p/5014860.html
Copyright © 2011-2022 走看看