oracle pl/sql 代码 包头:
    create or replace package pkg_test is
      type t_test IS RECORD(
        list_id  number,
        dept     varchar2,
        name     varchar2,
        age      number,
        level    number,
        address  varchar2);      type tab_test is table of t_test index by binary_integer;      procedure          p_get_data_test(dept         in  varchar2,
                                         age          in  number,
                                         enter_date   in  varchar2,
                                         end_date     in  varchar2,
                                         report_data  out tab_test);    end pkg_test;    包体:
    create or replace package pkg_test is
      procedure          p_get_data_test(dept         in  varchar2,
                                         age          in  number,
                                         enter_date   in  varchar2,
                                         end_date     in  varchar2,
                                         report_data  out tab_test) as
        cursor c_get_data is
          select list_id, '', name, age, -1, address
            from t_user
            where 1= 1;  
        m_t_test    t_test;
        m_tab_test  tab_test;
        m_dept      varchar2(20);
        m_level     number := -1;
        m_list_id   number := 0;
        m_count     number := 0;
      begin
        open c_get_data;
        fetch c_get_data into m_t_test;
        exit when c_get_data%notfound;
        loop
          m_list_id := m_t_test.list_id;
          m_dept := p_get_dept(m_list_id);
          m_level := p_get_level(m_list_id);
          m_t_test.dept := m_dept;
          m_t_test.level := m_level;
          m_tab_test(m_count) := m_t_test;
          m_count := m_count + 1;
        end loop;
        close c_get_data;
      end p_get_data_test;
    end pkg_test;  
请教  在java中该如何调用这个方法并获取返回值呢?

解决方案 »

  1.   


      stmt =(CallableStatement )conn.prepareCall("call pkg_test.p_get_data_test(?, ?, ?, ?, ?)");
      stmt.setString(1, "1011001");
      stmt.setInt(2, 25);
      stmt.setString(3, "2009-09-01");
      stmt.setString(4, "2009-09-30");
      stmt.registerOutParameter(4,OracleTypes.CURSOR);
      stmt.execute();
      ResultSet  Rs=(ResultSet)stmt.getObject(4);
    程序报错  哪位大大给指点指点,非常感谢!
      

  2.   

    额  java代码中有一个明显的错误是我写错了  最后一个参数应该是第五个 不是第四个
    这个是手误  真实的程序没有这个错误
      

  3.   

    ResultSet  rs=stmt.executeQuery();汗是这个吧
      

  4.   

    ResultSet  Rs=(ResultSet)stmt.getObject(4);
    为什么要转成 ResultSet 呢,stmt.getObject()出来的不可能是 ResultSet 吧
      

  5.   

    看来我把问题描述的复杂了....
    最根本的问题是
    在java中如何获取返回值为table of record 的存储过程的结果
      

  6.   


    向上转型和向下转型   java继承   java的基础知识需要加强
      

  7.   


    呵呵 这个是获取select的结果集  但是我是要获取存储过程的返回值
      

  8.   

    你确定你的conn.prepareCall("call pkg_test.p_get_data_test(?, ?, ?, ?, ?)");
    是这么写吗?
    如果是 那就是参数写错了
      

  9.   

    stmt =(CallableStatement )conn.prepareCall("{call pkg_test.p_get_data_test(?, ?, ?, ?, ?)}");
    这样试试