通过ref游标返回
搜索"结果集"

解决方案 »

  1.   

    注意,我说的是不使用游标,在SQLserver过程中就可以承认类似select * from xxx的语句,而在Oracle的过程中却不承认
      

  2.   

    那谁能给我举个返回多条记录的过程呢?用游标也可以,但是那种一条一条fetch的我知道。
      

  3.   

    SQL> create or replace type myobjectype as object (x int,y date,z varchar2(50));
      2  /
     
    Type created.
     
    SQL> create or replace type mytabletype as table of myobjectype
      2  /
     
    Type created.
     
    --创建可以返回纪录集的函数(不传入表名参数)
    SQL> create or replace function testrerecordnotabname (tableid in number)
      2  return mytabletype
      3  as
      4    l_data mytabletype :=mytabletype();
      5  begin
      6    for i in (select * from a where id>=tableid)  loop
      7      l_data.extend;
      8      l_data(l_data.count) := myobjectype(i.id,i.doctime,i.name);
      9      exit when i.id = 62;
     10    end loop;  
     11    return l_data;     
     12  end;   
     13  /
     
    Function created.
      

  4.   

    上面就是不用游标,用了记录对象实现下面是一个用游标返回记录集的过程:CREATE OR REPLACE PACKAGE pkg_test
    AS
       TYPE myrctype IS REF CURSOR;   PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);
    END pkg_test;
    /CREATE OR REPLACE PACKAGE BODY pkg_test
    AS
       PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)
       IS
          sqlstr   VARCHAR2 (500);
       BEGIN
          IF p_id = 0 THEN
             OPEN p_rc FOR
                SELECT ID, NAME, sex, address, postcode, birthday
                  FROM student;
          ELSE
             sqlstr :=
                'select id,name,sex,address,postcode,birthday
               from student where id=:w_id';
             OPEN p_rc FOR sqlstr USING p_id;
          END IF;
       END get;
    END pkg_test;
    /