Oralce11g创建过程,Java调用问题

在11gz中创建了一个过程,由Java调用,中间老是报这个错:[code="java"]java.sql.SQLException: 类型长度大于最大值[/code]
大家可不可以帮忙看看?使用的是ojbdc14.jar,网上有文章说,是驱动问题,可是换了ojdbc5.jar、ojdbc6.jar都试过,也还是有这个问题。
谢谢各位了。

程序所要实现的功能是这样的:
编写一个过程,输入部门号,返回该部门下所有员工的信息,并用Java调用。
数据在emp表中

Oracle11g创建存储过程代码如下:
[code="java"]
--建包
create or replace package t_pac_page as
--定义一个名为test_cursor的游标
type test_cursor is ref cursor;
end t_pac_page;
/

--建过程
create or replace procedure t_page
(p_deptno in number,p_cursor out t_pac_page.test_cursor) is
begin
open p_cursor for select * from emp where deptno=p_deptno;
end t_page;
/

[/code]

Java调用过程的代码如下:
[code="java"]
public static void main(String[] args)
{
Connection conn = null;
CallableStatement stmt = null;

    try
    {
        Class.forName(className);
        conn = DriverManager.getConnection(url, user, password);
        String sql = "{call t_page(?,?)}";

        stmt = conn.prepareCall(sql);
        stmt.setInt(1, 10);
        stmt.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
        stmt.execute();

        ResultSet rs = (ResultSet)stmt.getObject(2);
        while(rs.next())
        {
            System.out.println(rs.getInt(1) + " " + rs.getInt(2) + " " + rs.getInt(3));
        }

        stmt.close();
        conn.close();

        System.out.println("........");
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        try
        {
            if (stmt != null)
                stmt.close();
            if (conn != null)
                conn.close();
        }
        catch (Exception e)
        {
        }
    };
}

[/code]

这两行是没问题的,使用全局变量中定义好的className、url、user、password
[code="java"]
Class.forName(className);

conn = DriverManager.getConnection(url, user, password);

[/code]
执行后,就报后边这个错:
[code="java"]
java.sql.SQLException: 类型长度大于最大值
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)
at oracle.jdbc.driver.DatabaseError.check_error(DatabaseError.java:885)
at oracle.jdbc.driver.T4CMAREngine.buffer2Value(T4CMAREngine.java:2231)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB2(T4CMAREngine.java:1048)
at oracle.jdbc.driver.T4CTTIdcb.receiveCommon(T4CTTIdcb.java:112)
at oracle.jdbc.driver.T4CTTIdcb.receiveFromRefCursor(T4CTTIdcb.java:104)
at oracle.jdbc.driver.T4CResultSetAccessor.unmarshalOneRow(T4CResultSetAccessor.java:165)
at oracle.jdbc.driver.T4CTTIrxd.unmarshal(T4CTTIrxd.java:788)
at oracle.jdbc.driver.T4CTTIrxd.unmarshal(T4CTTIrxd.java:705)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:527)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:180)
at oracle.jdbc.driver.T4CCallableStatement.execute_for_rows(T4CCallableStatement.java:783)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1028)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2888)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:2979)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4103)
at com.uu.test.oracle.test.PageTest.main(PageTest.java:37)
[/code]

困扰好久了,一直没找到是哪的问题。看到这篇文章的,如能停留一下目光。真的会非常感谢

驱动问题

首先,第20行有两个错误:
System.out.println(rs.getInt(1) + " " + rs.getInt(2) + " " + rs.getInt(3));
应该改为:
System.out.println(rs.getInt(1) + " " + rs.getString(2) + " " + rs.getStirng(3));
因为emp表中第二个字段ename 是varchar2(10),第三个字段job是varchar2(9),所以在结果集中应该用getString获得。
你的pl/sql存储过程应该没问题,运行程序之前一定要确保oracle驱动已经导入了,我改了一下你程序中的第20行就没问题了
运行的结果是这个:
7782 CLARK MANAGER
7839 KING PRESIDENT
7934 MILLER CLERK
........

我用的就是odbc6.jar,改了,第20行后就正常运行了,应该不是驱动的问题。

2楼说的对
System.out.println(rs.getInt(1) + " " + rs.getInt(2) + " " + rs.getInt(3)); 这这个问题 超过int最大值了