create or replace procedure GETLIST
(in_wblb in varchar2) AS
 out_fgbh varchar2(10);
 out_wjmc varchar2(100);
 out_wbnr long;
BEGIN
   Select fgbh,wjmc,wbnr into out_fgbh,out_wjmc,out_wbnr from zcfgxx where yxbz='1' and wblb=in_wblb order by fwrq desc;
END;用PLSQL Developer运行时会出错...请问一下我该怎么样才能返回多行(所有行)的值?帮帮忙

解决方案 »

  1.   

    各位高手帮帮忙...小弟初学ORACLE...求个返回多行的查询过程...谢谢...
      

  2.   

    返回结果集,要用ref cursor
      

  3.   

    我的建议是将你的查询放到临时表中,当该存储过程执行完后对临时表进行查询。
    create or replace procedure GETLIST
    (in_wblb in varchar2) AS
     out_fgbh varchar2(10);
     out_wjmc varchar2(100);
     out_wbnr long;
    BEGIN
       insert into tmp_zcfgxx
       Select fgbh,wjmc,wbnr from zcfgxx where yxbz='1' and wblb=in_wblb order by fwrq desc;
    END;
      

  4.   

    CREATE OR REPLACE PACKAGE Createcursor AS
      type results is ref cursor;
     END;
    create or replace procedure GETLIST
    (in_wblb in varchar2,) 
    AS
     out_fgbh varchar2(10);
     out_wjmc varchar2(100);
     out_wbnr long;
     Ccursor   Createcursor.results 
     v_sql    varchar2(2000);
    BEGIN
       v_sql :='Select fgbh,wjmc,wbnr '|| 
               'from zcfgxx where  yxbz='1' '|| 
               'and wblb=in_wblb order by fwrq desc';
      open Ccursor for v_sql;
      fetch Ccursor into out_fgbh ,out_wjmc , out_wbnr ;
    END;
    大概是這樣做了,我沒測試呀!你自己試試辦吧!
      

  5.   

    Select fgbh,wjmc,wbnr into out_fgbh,out_wjmc,out_wbnr from zcfgxx where yxbz='1' and wblb=in_wblb order by fwrq desc;
    你这个结果多与一行,肯定报错.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;
    /
      

  6.   

    to cenlmmx(学海无涯苦作舟):
      你写的这个包,如何调用,能举个例子吗?谢谢。
      

  7.   

    用ref cursor呀。先定义一个包然后再包中声明一个ref cursor再在包体中调用一定可以。我试过。