表名:test_1
列名:num(number),name(varchar2),sex(char),major(varchar2)建立过程:
CREATE OR REPLACE PACKAGE pkg_test
AS
   TYPE myrctype IS REF CURSOR;
END pkg_test;
/CREATE PROCEDURE PRO_SLE(INPUT1 in integer,INPUT2 in VARCHAR2,p_rc out pkg_test.myrctype)
AS
begin
open p_rc for 'SELECT * FROM TEST WHERE AA='||INPUT1||' AND instr(BB,'||INPUT2||')>0';
end;
/
执行过程:
declare
v_num TEST_1.num%type;
v_name test_1.name%type;
v_sex test_1.sex%type;
v_major test_1.major%type;
v_rc pkg_test.myrctype;
begin
PRO_SLE(1,'1',v_rc);
loop
fetch v_rc into v_num,v_name,v_sex,v_major;
exit when v_rc%notfound;
dbms_output.put_line(v_num||v_name||v_sex||v_major);
end loop;
end;

解决方案 »

  1.   

    请问package是什么??为什么有的例子给出的 是一个package ,和一个 body ,里面含有一个procdure此外,我用java无法得到这些结果.CallableStatement toesUp = conn.prepareCall(
              "{ ? = call PROC_TEST() }");
          toesUp.registerOutParameter(1, Types.OTHER);
          toesUp.execute();
          ResultSet rs = (ResultSet) toesUp.getObject(1);java.sql.SQLException: 无效的列类型
    -------------------------------------
    我的所有代码:
    CREATE OR REPLACE PACKAGE PKG_TEST
    IS
    TYPE T_CURSOR IS REF CURSOR;   PROCEDURE PROC_TEST(C_CURSOR OUT T_CURSOR);
    END;CREATE OR REPLACE PACKAGE BODY PKG_TEST
    IS PROCEDURE PROC_TEST(C_CURSOR OUT T_CURSOR)
       IS
       V_CURSOR T_CURSOR; 
       BEGIN
          OPEN V_CURSOR FOR 
                select * from T_USER;
               C_CURSOR := V_CURSOR;
       END;
    END;---------------
    还望各位有经验的高手指教一番,谢谢