我是新手,正在学习oracle,我这里遇到一个ieguanyu程序包游标的问题,
一段代码看不明白,请大家解惑,先谢谢啦。SQL> CREATE OR REPLACE PACKAGE BODY cur_pack AS
 CURSOR ord_cur(vcode VARCHAR2)
 RETURN order_master%ROWTYPE IS 
 SELECT * FROM order_master WHERE VENCODE=vcode;
 PROCEDURE ord_pro(vcode VARCHAR2) IS
   or_rec order_master%ROWTYPE;
 BEGIN
  OPEN ord_cur(vcode); 
  LOOP
    FETCH ord_cur INTO or_rec;
    EXIT WHEN ord_cur%NOTFOUND;
    DBMS_OUTPUT.PUT_LIne(’返回的值为' || or_rec.orderno);
  END LOOP;
 END ord_pro;
END cur_pack;
主要是就是输出这句话,
DBMS_OUTPUT.PUT_LIne(’返回的值为' || or_rec.orderno);
为什么返回的值是or_rec.orderno 而不是 or_rec。
or_rec.orderno不是行中的一列么?

RETURN order_master%ROWTYPE
不是应该返回一个对象,一整行么?不知道我有没有阐述清楚问题,请大家帮忙解答,再次感谢,在线等待。

解决方案 »

  1.   

    CREATE OR REPLACE PACKAGE BODY cur_pack AS
      --声明一个游标,游标的行类型为order_master%ROWTYPE
      CURSOR ord_cur(vcode VARCHAR2) RETURN order_master%ROWTYPE IS
        SELECT * FROM order_master WHERE VENCODE = vcode;
      --声明一个存储过程,有一个入参vcode  
      PROCEDURE ord_pro(vcode VARCHAR2) IS
        --声明一个order_master表行类型变量or_rec
        or_rec order_master%ROWTYPE;
      BEGIN
        --将存储过程的入参vcode作为游标参数传给游标并打开游标
        OPEN ord_cur(vcode);
        --游标循环
        LOOP
          --取一行赋值给or_rec
          FETCH ord_cur
            INTO or_rec;
          --如果游标已没有记录退出循环
          EXIT WHEN ord_cur%NOTFOUND;
          --打印一行中的一列orderno值到屏幕     
          DBMS_OUTPUT.PUT_LIne('返回的值为' || or_rec.orderno);
        END LOOP;
      END ord_pro;
    END cur_pack;