max(syrq) 
如果满足条件的所有的记录的syrq值都是null,那么max(syrq) 的值也是null

解决方案 »

  1.   

    对,现在不是这个字段为null的问题,而是在有些时候,根本就没有满足该条件的纪录,如何才能处理?谢谢
      

  2.   

    只需要能够正常的得到sdate的值,现在运行的情况时,半天没有反应,也没有执行任何一次循环。估计是变量赋值存在问题。
      

  3.   

    select count(*)  num into num from sy_bg_m where sbid = id and bglb >= 'a' and bglb <= 'z';
    上面这句中的where sbid = id 其中id是一个变量,是不是要用引号引起来?是不是改成下面这种?
    where sbid = ''' || id || '''
      

  4.   

    你之前的写法可以的.
    另外,
    EXIT WHEN c_Students%NOTFOUND;
    应该写在
    FETCH c_Students INTO id;
    之后吧,先判断游标是否到底,再执行LOOP内的逻辑.
    还有,缺少COMMIT.
      

  5.   

    DECLARE
      id      VARCHAR2(32);
      Name    VARCHAR2(100);
      sdate   varchar2(20);
      ddate   date;
      V_Count binary_integer; --新加入  CURSOR c_Students IS
        select a.sbid
          from sb_register_info_m a, sb_logicequipment b
         where a.ljsbid = b.id
           and b.deleteflag = '0'
           and b.sblxid like '3%'
         order by a.sbid;
    BEGIN  OPEN c_Students;
      LOOP
      
        FETCH c_Students
          INTO id;
        select Count(*)
          into V_Count
          from sy_bg_m
         where sbid = id
           and bglb >= 'a'
           and bglb <= 'z'; --新加入
        If V_Count = 1 Then
          --新加入
          select max(syrq) syrq
            into sdate
            from sy_bg_m
           where sbid = id
             and bglb >= 'a'
             and bglb <= 'z';
          if sdate is null then
            sdate := '2004-12-31';
          end if;
          sdate := substr(sdate, 1, 10);
          insert into T_SBSJ
            (S_SBID, D_SYSJ)
          VALUES
            (id, TO_DATE(sdate, 'YYYY-MM-DD'));
        End if; --新加入
      
        EXIT WHEN c_Students%NOTFOUND;
      
      END LOOP;
      CLOSE c_Students;
    END;