代码:
declare
  sp varchar2(10);
  cursor c_sp is
    select sp from t_sp s;
begin
  open c_sp;
  fetch c_sp
    into sp;
  while c_sp %found loop
    fetch c_sp
      into sp;
    dbms_output.put_line('我是游标:' || sp);
  end loop;
  close c_sp;
end;游标建立过程没有报错 输出结果:
我是游标:
我是游标:
我是游标:
我是游标:
我是游标:
我是游标:
我是游标:
我是游标:
---上传图片要搞链接地址?原谅我没搞出来来。表:t_sp是有数据的
为什么输出结果不是‘我是游标:(数数据集合行的值)’
求解?

解决方案 »

  1.   

    你的SP字段是有值的么?
    建议定义变量的时候,变量不要和字段名同名:
    sp varchar2(10);
      

  2.   

    while c_sp %found loop
      fetch c_sp
      into sp;
      dbms_output.put_line('我是游标:' || sp);
      end loop;
    ****************************
    while循环里不用再次获取游标。
      

  3.   


    它输出的结果就是没有值
    我改成这样就报错了
    declare
      t_sp varchar2(50);
      cursor c_sp is
      select into t_sp from t_sp s;
    begin
      open c_sp;
      fetch c_sp
      into t_sp;
      while c_sp %found loop
      fetch c_sp
      into t_sp;
      dbms_output.put_line('我是游标:' || t_sp);
      end loop;
      close c_sp;
    end;
     
    我在申明游标的时候那个查询语句加了into 就错了 
    t_sp的是 肯定是来源表 而表里面肯定是有数据的
    恩 关于不要用sp 我知道了  我习惯了这2个字母 
      

  4.   


    我去掉fetch c_sp
      into sp;
    就报错了  提示:
    pls-00103出现符号"end-of-file"在需要下列只时:
    <an identifier>
    <a double-quoted delimited-identifier>
    符号":"被替换"end-of-line"继续
      

  5.   

    试试这个:
    declare
        sp t_sp.sp%type;
        cursor c_sp is select sp from t_sp;
    begin
        open c_sp;
        loop 
            fetch c_sp into sp;
            exit when c_sp%notfound;
            
            dbms_output.put_line('我是游标:' || sp);
        end loop;
        close c_sp;
    end;
      

  6.   

    declare
      cursor csr_sp is select sp from t_sp;
      row_t_sp csr_sp%type; 
    begin
      open csr_sp;
      for row_t_sp in csr_sp
      loop      
      dbms_output.put_line('我是游标:' || row_t_sp.sp );
      end loop;
      close csr_sp;
    end;
      

  7.   

    恩 谢谢各位 顺便问下
    在oracle中申明游标的时候不可以
    declare
      t_sp varchar2(50);
      cursor c_sp is
      select into t_sp from t_sp s;
    这样? (我这个t_sp的类型有问题)我的意思是y游标中可以申明一个变量 把查询的集合放到里面去吗?第2个问题:
    我把语句写好后没有错误如果用循环 输出则提示缓存区溢出
    我在pl/sql命令窗口中 输出 set serveroutput on size  300000 还是提示超过10000 
    求解
      

  8.   


    declare
        sp t_sp.sp%type;
        cursor c_sp is select sp from t_sp;
    begin
        --加一个这个dbms_output.enable(99999999999999);
        dbms_output.enable(99999999999999);
        open c_sp;
        loop 
            fetch c_sp into sp;
            exit when c_sp%notfound;
            
            dbms_output.put_line('我是游标:' || sp);
        end loop;
        close c_sp;
    end;
      

  9.   

    恩 语法格式我知道了 
    我吧循环去掉就正常输出
    如果我加循环就提示
    输出则提示缓存区溢出。
    9楼的大哥 你的那个
     dbms_output.enable(99999999999999);
    这个不行啊
      

  10.   

    你最开始的代码没什么问题,我自己测试了下,也能出结果,只是发现c_sp %found中间多了个空格