CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  开发

一字段值为null,怎么和另一值null值比较.下面的这个存储过程错在哪?

楼主coolliu(狂风吹)2003-08-03 17:59:52 在 Oracle / 开发 提问

create   or   replace   procedure   cm_p_chxx   IS  
  CURSOR   cursor_jzxx   IS   SELECT   *   FROM   cm_jzxxb;  
    record_result   cm_jzxxb%ROWTYPE;  
    --TYPE   t_cursor_chxx   IS   REF   CURSOR;  
    --cursor_chxx   t_cursor_chxx;  
    v_bhfl   number(10,2);  
    v_chdm   varchar2(6);  
    v_count   INTEGER;  
  BEGIN  
      OPEN   cursor_jzxx;  
      LOOP  
              FETCH   cursor_jzxx   INTO   record_result;  
              EXIT   WHEN   cursor_jzxx%NOTFOUND;  
            --   如果存在有相同仓号的记录则更新,否则插入一条新记录  
              SELECT   COUNT(*)   INTO   v_count  
                FROM   cm_chxxb    
                WHERE   bdxh=record_result.bdxh    
                AND   tlx=record_result.tlx  
                AND   baduan=record_result.baduan    
                AND   bakuai=record_result.bakuai  
                AND   zyc=record_result.zyc;  
             
        --       如果有一条  
            IF   v_count=1   THEN  
                  SELECT   chdm,bhfl   INTO   v_chdm,v_bhfl  
                    FROM   cm_chxxb    
                    WHERE   bdxh=record_result.bdxh    
                    AND   tlx=record_result.tlx  
                    AND   baduan=record_result.baduan    
                    AND   bakuai=record_result.bakuai   AND   zyc=record_result.zyc;  
                    --更新数据  
                    UPDATE   cm_chxxb   SET  
                    --开仓时间  
                    ksSJ=record_result.kcsj   ,  
                    --收仓时间  
                    jssj=record_result.scsj,  
                    --设计方量  
                    sjfl=record_result.sjfl,  
                    --起始高层  
                    qsgc=record_result.qsgc,  
                    --结束高层  
                    jsgc=record_result.jsgc1,  
                    --浇筑方量  
                    bhfl=v_bhfl+record_result.bhfl  
                    WHERE   chdm=v_chdm;  
                    COMMIT;  
                ELSIF   v_count=0   THEN  
                --插入一条新的仓号记录  
                INSERT   INTO   cm_chxxb(qsgc,sjfl,jsgc,baduan,bakuai,bdxh,tlx,zyc,cengh,cfq,kssj,jssj,bhfl)  
                  VALUES  
                (record_result.qsgc,record_result.sjfl,record_result.jsgc1,record_result.baduan,  
                  record_result.bakuai,record_result.bdxh,record_result.tlx,record_result.zyc,  
                  record_result.cengh,record_result.cfq,record_result.kcsj,record_result.scsj,  
                  record_result.bhfl);  
                  COMMIT;  
                  ELSE  
                  dbms_output.put_line('错误');  
                END   IF;  
        END   LOOP;  
        CLOSE   Cursor_Jzxx;  
  end   cm_p_chxx;  
  如果不加上zyc(where里最后一个条件)执行正确.加上zyc后,zyc只要为null(没有值),则选择不出记录. 问题点数:50、回复次数:4Top

1 楼lialin(阿林)回复于 2003-08-03 18:17:26 得分 0

空记录是选择不出来的,如果要选择的话,你可以再加一个OR条件Top

2 楼beckhambobo(beckham)回复于 2003-08-03 18:31:40 得分 50

create   or   replace   procedure   cm_p_chxx   IS  
  CURSOR   cursor_jzxx   IS   SELECT   *   FROM   cm_jzxxb;  
    --record_result   cm_jzxxb%ROWTYPE;  
    --TYPE   t_cursor_chxx   IS   REF   CURSOR;  
    --cursor_chxx   t_cursor_chxx;  
    v_bhfl   number(10,2);  
    v_chdm   varchar2(6);  
    v_count   INTEGER;  
  BEGIN  
    for   v_jzxx   in   cursor_jzxx   loop  
                        --   如果存在有相同仓号的记录则更新,否则插入一条新记录  
      if   v_jzxx.zyc   is   null   then  
      SELECT   COUNT(*)   INTO   v_count  
                FROM   cm_chxxb    
                WHERE   bdxh=v_jzxx.bdxh    
                AND   tlx=v_jzxx.tlx  
                AND   baduan=v_jzxx.baduan    
                AND   bakuai=v_jzxx.bakuai  
                AND   zyc   is   null;  
      else  
          SELECT   COUNT(*)   INTO   v_count  
                FROM   cm_chxxb    
                WHERE   bdxh=v_jzxx.bdxh    
                AND   tlx=v_jzxx.tlx  
                AND   baduan=v_jzxx.baduan    
                AND   bakuai=v_jzxx.bakuai  
                AND   zyc=v_jzxx.zyc;  
      end   if;  
        --       如果有一条  
            IF   v_count=1   THEN  
                if   v_jzxx.zyc   is   null     then  
                  SELECT   chdm,bhfl   INTO   v_chdm,v_bhfl  
                    FROM   cm_chxxb    
                    WHERE   bdxh=v_jzxx.bdxh    
                    AND   tlx=v_jzxx.tlx  
                    AND   baduan=v_jzxx.baduan    
                    AND   bakuai=v_jzxx.bakuai   AND   zyc   is   null;  
                else  
                    SELECT   chdm,bhfl   INTO   v_chdm,v_bhfl  
                    FROM   cm_chxxb    
                    WHERE   bdxh=v_jzxx.bdxh    
                    AND   tlx=v_jzxx.tlx  
                    AND   baduan=v_jzxx.baduan    
                    AND   bakuai=v_jzxx.bakuai   AND   zyc=v_jzxx.zyc;  
                end   if;  
                    --更新数据  
                    UPDATE   cm_chxxb   SET  
                    --开仓时间  
                    ksSJ=record_result.kcsj   ,  
                    --收仓时间  
                    jssj=record_result.scsj,  
                    --设计方量  
                    sjfl=record_result.sjfl,  
                    --起始高层  
                    qsgc=record_result.qsgc,  
                    --结束高层  
                    jsgc=record_result.jsgc1,  
                    --浇筑方量  
                    bhfl=v_bhfl+record_result.bhfl  
                    WHERE   chdm=v_chdm;  
                    COMMIT;  
                ELSIF   v_count=0   THEN  
                --插入一条新的仓号记录  
                INSERT   INTO   cm_chxxb(qsgc,sjfl,jsgc,baduan,bakuai,bdxh,tlx,zyc,cengh,cfq,kssj,jssj,bhfl)  
                  VALUES  
                (record_result.qsgc,record_result.sjfl,record_result.jsgc1,record_result.baduan,  
                  record_result.bakuai,record_result.bdxh,record_result.tlx,record_result.zyc,  
                  record_result.cengh,record_result.cfq,record_result.kcsj,record_result.scsj,  
                  record_result.bhfl);  
                  COMMIT;  
                  ELSE  
                  dbms_output.put_line('错误');  
                END   IF;  
  END   LOOP;    
  end   cm_p_chxx;  
  /  
   
  以上程序,楼主有空作一个优化吧Top

3 楼zhangshunshi(宇轩)回复于 2003-08-04 13:13:37 得分 0

注意:null不等于任何值,只能作判断is   nullTop

4 楼qiyousyc(沈阳棋友)回复于 2003-08-04 15:22:08 得分 0

在没有关闭游标前,COMMIT会自动关闭游标的。Top

相关问题

  • 存储过程取字段值遇到问题
  • 关于存储过程中的输出参数取某字段值
  • 请问:存储过程执行后如何如何获得Identity字段的值
  • 如何给存储过程传递NULL值?
  • 在触发器中怎么把 inserted表里的字段值 以参数形式 传给 一个存储过程 ??
  • dc0001这样的字段值怎么弄,下一个就是dc0002,用存储过程怎么写?
  • 存储过程中如何将视图中的字段的值付给一个变量
  • 在存储过程里有办法取到update这条记录的被更新的这个字段的值吗?
  • 想在存储过程中新增记录,并反回的他的之中的一个字段的值???
  • 能否用一个SQL语句或存储过程修改一个字段中的部分值?

关键词

  • bhfl
  • baduan
  • bdxh
  • bakuai
  • chdm
  • tlx
  • zyc
  • chxxb
  • jzxx
  • record

得分解答快速导航

  • 帖主:coolliu
  • beckhambobo

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo