一:
v_day EMP.day%TYPE := XXXXXXXXXXXXXXX;
如果想赋值 在一个时间范围内 比如说:between '2000-12-02' and '2004-12-30'
具体应该怎么写二,exit when rec%notfound; 跳出循环,
但是我写完一段查询代码,结果是死循环,SQL语句测试过没问题,可以查处时间范围内23条记录
但是存储过程写完 
  fetch rec 
    into v_orgidt,v_actnam,v_upddat,v_clsdat;
  exit when rec%notfound;
  dbms_output.put_line(v_orgidt||v_actnam||v_upddat||v_clsdat);
测试的时候一直就死循环了,不明白问题出在哪了 其中变量每循环一次都有值。麻烦前辈讲解。

解决方案 »

  1.   

    第一个问题不太清楚你是啥意思!
    第二个你的检索数据有多少条?看你的语法没问题!
    要不你换一种写法:
    WHILE c_info%FOUND LOOP
      dbms_output.put_line(v_orgidt ¦ ¦v_actnam ¦ ¦v_upddat ¦ ¦v_clsdat); 
      FETCH REC INTO ...
    END LOOP;
      

  2.   

    第一个,date型的只能是具体一个日期
    除非你用字符型的
      

  3.   

    我试试啊 谢谢day 是 varchar2类型的。
      

  4.   

    回一楼
    我去试试啊 谢谢回二楼
    DAY是 varchar2类型的 我主要不知道怎么写 能把代码发出来参考一下么?
      

  5.   

    回1楼 
    谢谢啊 我去试试回2楼
    DAY 是 VARCHAR2类型的 具体怎么写能发代码出来参考下么?
      

  6.   

    第1个,直接赋值不可能赋一个范围的吧?具体使用时可以看情况使用条件或循环第2个,这段代码看不出什么问题。一般读取游标直接用
    for r in rec
    loop
        dbms_output.put_line(r.orgidt||r.actnam||r.upddat||r.clsdat); 
    end loop;
    不用open,close什么的了
      

  7.   


    一般用fetch的时候要先打开游标的,最后再关闭的,或许就是缺了这步才会死循环的吧
      

  8.   

    第一个是不是在定义游标的时候可以给范围?
     cursor rec is 
        select orgidt,actnam,upddat,clsdat
          from actdat
          where clsdat 
            between '2000-12-02' and '2004-12-30';  --类似这样。第二个还是有些问题,我再试试 呵呵米办法 初学者 总是碰到问题。
      

  9.   

    1.可以考虑用两DATE型来存或用一个字符串来存,自己负责解析
    2.贴完整代码 
      

  10.   

    function q_actdat2(
      v_msg1 out varchar2
    ) return integer is
      v_orgidt actdat.orgidt%TYPE;
      v_actnam actdat.actnam%TYPE;
      v_upddat actdat.upddat%TYPE;
      v_clsdat actdat.clsdat%TYPE;
      cursor rec is 
        select orgidt,actnam,upddat,clsdat
          from actdat
          where clsdat 
            between to_char(to_date('20001202' , 'yyyymmdd'),'yyyy-mm-dd') 
                and to_char(to_date('20041230' , 'yyyymmdd'),'yyyy-mm-dd');
    --SQL语句测试通过
    begin  
      open rec;
      loop
      fetch rec 
        into v_orgidt,v_actnam,v_upddat,v_clsdat;
      exit when rec%notfound;
      dbms_output.put_line(v_orgidt||v_actnam||v_upddat||v_clsdat);
      end loop;
      return 0;
      close rec; 
      exception
      when others then begin
         rollback;
         v_msg1 := sqlerrm;
         dbms_output.put_line('v_msg='||v_msg1);
         return 0;
       end;
      end q_actdat2;
      

  11.   

    为什么最后要两个end
     end; 
     end q_actdat2;
      

  12.   

    LZ拷贝出来的代码,游标没有问题。
    很有可能 select orgidt,actnam,upddat,clsdat 
          from actdat 
          where clsdat 
            between to_char(to_date('20001202' , 'yyyymmdd'),'yyyy-mm-dd') 
                and to_char(to_date('20041230' , 'yyyymmdd'),'yyyy-mm-dd');
    出现在这里
      

  13.   

    回LS  那个查询语句单独执行可以通过查到想要的数据,
    回hautrun 
    这个end; 是对应 when others then begin 
     
    编译没问题 就是死循环,跳不出去。