解决方案 »

  1.   

    你这不是存储过程吧 是function吧 定义一个返回结果集是table类型的type,
      

  2.   

    定义type:create or replace type type_rows as object(
      id       varchar2(10),
      number_1 varchar2(10),
      name     varchar2(50)
    );create or replace type type_table is table of type_rows; 
    创建表:create table tt (
      id varchar2(10),  
      number_1 varchar2(10),
      name varchar2(50)
      );
      
      insert into tt values('1','2','abc');
      insert into tt values('2','3','abcd');
    编写function:create or replace function for_tt return type_table is
      rs type_table := type_table();
      cursor c_find is
        select * from tt;
    begin
      for cc in c_find loop
        rs.extend;
        rs(rs.count) := type_rows(cc.id, cc.number_1, cc.name);
      end loop;
      return rs;
    end;
    测试:SQL> select * from table(for_tt);
     
    ID         NUMBER_1   NAME
    ---------- ---------- --------------------------------------------------
    1          2          abc
    2          3          abcd
     
    SQL> 
      

  3.   

    谢谢,但是我想要的是带参数的。比如上面id ,number,name。可能有多条数据的number是一样的,我是想写一个优化oracle的存储过程。就是当用户查询number=?的时候,就不用去表里面查询了,而是直接返回存储过程中已有的符合这个number值的数据,这样可以提升查询效率。
      

  4.   

    谢谢,但是我想要的是带参数的。比如上面id ,number,name。可能有多条数据的number是一样的,我是想写一个优化oracle的存储过程。就是当用户查询number=?的时候,就不用去表里面查询了,而是直接返回存储过程中已有的符合这个number值的数据,这样可以提升查询效率。我只是举个例子 你当然可以带参数了