+ -
当前位置:首页 → 问答吧 → 如何获取游标的每条记录

如何获取游标的每条记录

时间:2011-12-06

来源:互联网

在存储过程中创建一游标,游标里保存的是某一用户的订单,我想通过输入用户ID就能获取该用户的订单,如果用游标实现?(出参定义为数组?)

作者: sunny62520   发布时间: 2011-12-06

SQL code
DECLARE
  TYPE INFO IS RECORD(
    BNAME  BOOK.BOOK_NAME%TYPE,
    WRITER BOOK.WRITER%TYPE,
    PRICE  BOOK.PRICE%TYPE);
  RES INFO;
  CURSOR C_INFO(P IN NUMBER DEFAULT 30) IS
    SELECT DISTINCT BOOK_NAME, WRITER, PRICE FROM BOOK WHERE PRICE > P;
BEGIN
  OPEN C_INFO(35);
  LOOP
    
    FETCH C_INFO
      INTO RES;
    DBMS_OUTPUT.PUT('ÊéÃû: ' || RES.BNAME||' ');
    DBMS_OUTPUT.PUT('×÷Õß: ' || RES.WRITER||' ');
    DBMS_OUTPUT.PUT_LINE('¼Û¸ñ: ' || RES.PRICE||' ');
    EXIT WHEN C_INFO%NOTFOUND;
  END LOOP;
  CLOSE C_INFO;
END;

供参考

作者: yinan9   发布时间: 2011-12-06

引用 1 楼 yinan9 的回复:

SQL code
DECLARE
TYPE INFO IS RECORD(
BNAME BOOK.BOOK_NAME%TYPE,
WRITER BOOK.WRITER%TYPE,
PRICE BOOK.PRICE%TYPE);
RES INFO;
CURSOR C_INFO(P IN NUMBER DEFAULT 30) IS
SELECT DI……


我想的是,在一个存储过程中创建游标,然后这个存储过程有out的参数,out的就是查询的每条记录,然后调用这个存储过程就能过的返回的参数,,,请问这样该怎么做?是得返回数组吗?

作者: sunny62520   发布时间: 2011-12-06

引用 2 楼 sunny62520 的回复:

引用 1 楼 yinan9 的回复:

一般不做返回,为什么不能在整个procedure中完成呢?

作者: yinan9   发布时间: 2011-12-06

可以写一个自定义包,自定义一个复合变量。
然后在写相关的procedure时候,定义你的参数为你自定义的复合变量类型。
这样就可以存储游标的返回值了。

作者: yinan9   发布时间: 2011-12-06

SQL code
--创建类型

create or replace package mytest is

  -- Author  : ADMINISTRATOR
  -- Created : 2008-5-13 11:19:28
  -- Purpose : test
 
TYPE record_type IS RECORD(
      code   VARCHAR2(18),
      p_name VARCHAR2(16));

TYPE ref_cur_type IS REF CURSOR;
end mytest;

CREATE OR REPLACE TYPE table_type IS TABLE OF record_type;

--创建过程

CREATE OR REPLACE PROCEDURE testproc( v_ref_cur out mytest.ref_cur_type) IS

   v_record record_type;

   v_table table_type := table_type();

BEGIN
   FOR i IN 1 .. 9 LOOP
      v_record := NEW record_type(''45212319830810435'' || i, ''侯廷文'' || i);
      v_table.EXTEND;
      v_table(i) := v_record;
   END LOOP;

   OPEN v_ref_cur FOR
      SELECT * FROM TABLE(CAST(v_table AS table_type));

END testproc;

作者: yinan9   发布时间: 2011-12-06