在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]
困扰好久了,一直没找到是哪的问题。看到这篇文章的,如能停留一下目光。真的会非常感谢