每次fetch只能得一个值,不能存取所有行记录。
set severoutput on
DECLARE 
CURSOR cur1 is
SELECT test1 ,test2 from  templh order by test2;
v_test1 templh.test1%type;
v_test2 templh.test2%type;
begin   
OPEN CUR1;
FETCH CUR1 INTO v_test1,v_test2 ;
dbms_output.put_line(v_test1.v_test2);
WHILE (CUR1%FOUND) LOOP 
FETCH CUR1 INTO test1 ,test2 ;
dbms_output.put_line(v_test1.v_test2);
END LOOP;
CLOSE CUR1;
end;

解决方案 »

  1.   

    我用了你的代码,发现编译结果有问题:Line # = 1 Column # = 27 Error Text = PLS-00103: 發現了符號 "SET" 當您等待下列事項之一發生時:   ( ; is with    authid as cluster compress order using compiled wrapped    external deterministic parallel_enable pipelined 不知道为什么,声明变量的时候总是报这样的错误,为什么呢?谢谢!!
      

  2.   

    他的代码是在SQL*Plus中用的。
    你要用在哪儿呢?
      

  3.   

    首先定义游标必须在declare段中使用
    Cursor 游标名 is select查询语句
    例如CURSOR cur1 is SELECT test1 ,test2 from  templh order by test2;可以定义一个变量来存放游标取出的值
    如 cc cur1%rowtype;
    然后在fetch子句中用fetch cur1`into cc;
    在下面的引用中可以使用cc.test1来引用该值。
      

  4.   

    是啊楼上讲的对,我还真没看过 cur1 CURSOR 的声明游标的方法,高,实在是高!
      

  5.   

    我是用在存储过程中,不知道在存储过程中怎样定义呢?
    这样写总报错:DECLARE 
    CURSOR cur1 is错误: 發現了符號 "DECLARE" 當您等待下列事項之一發生時:   ( ; is    w
      

  6.   

    首先说明一点,游标不能用作像其它数据类型去定义变量,这样会出错。想达那样效果,只可用包用实现。CREATE OR REPLACE PACKAGE pkg_test
    AS
       TYPE myrctype IS REF CURSOR;
    END pkg_test;
    /DECLARE 
    CUR1  pkg_test.myrctype;
    v_test1 templh.test1%type;
    v_test2 templh.test2%type;
    str varchar2(50);='SELECT test1 ,test2 from  templh order by test2';
    begin   
    OPEN CUR1 for str;
    FETCH CUR1 INTO v_test1,v_test2 ;
    dbms_output.put_line(v_test1.v_test2);
    WHILE (CUR1%FOUND) LOOP 
    FETCH CUR1 INTO test1 ,test2 ;
    dbms_output.put_line(v_test1.v_test2);
    END LOOP;
    CLOSE CUR1;
    end;
    /
      

  7.   

    当然报错,存储过程根本没declare关建字create procedure pro(...)
    is
    --定义部分
    begin
    --语句部分
    end pro;