如何像从存储过程中返回像普通查询一样的结果集?

解决方案 »

  1.   

    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;
    /
      

  2.   

    create type t_var is varray(10) of number;
    /
    create procedure p_var(p_v in out t_var)
    as
    begin
    for i in 1..10 loop
    p_v.extend;
    p_v(i):=i;
    dbms_output.put_line(p_v(i));
    end loop;
    end;
    /
    SQL> set serveroutput on
    SQL> 
    SQL> declare
      2  v_var t_var:=t_var();
      3  begin
      4  p_var(v_var);
      5  end;
      6  /
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10PL/SQL procedure successfully completed