Sorry for not including my error:
Hello all,
I am getting an error "Bigger type length than Maximum" when calling a stored procedure that returns a small result set. I am not working with BLOBs or CLOBs and cannot find anything on the web that addresses my specific situation.
I would greatly appreciate any help available in solving this problem.
Here is my data access object:
package my.app.access;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OracleTypes;
import oracle.jdbc.OracleTypes.*;
import my.app.beans.Person;
import my.app.util.Database;
public class PersonAccess {
public Person getPerson(Person person) throws SQLException, Exception {
Database db = new Database();
Connection con = db.connect();
ResultSet rs;
CallableStatement cs = con
.prepareCall("{call SP_GET_PERSON_BY_USER_ID (?,?)}");
cs.setString(1, person.getUserId());
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
cs.execute(); // ################### ERROR HAPPENS ON THIS LINE
rs = (ResultSet) cs.getObject(2);
if (rs.next() == true) {
person.setId(new Integer(rs.getString("id")).intValue());
person.setFirstName((String) rs.getString("first_name"));
person.setLastname((String) rs.getString("last_name"));
person.setPhoneNumber((String) rs.getString("phone_number"));
person.setEmailAddress((String) rs.getString("email_addr"));
person.setRoleId(new Integer(rs.getInt("role_id")).intValue());
//this.roleName = rs.getString("role_name");
person.setPassword((String) rs.getString("password"));
person.setAgencyId(new Integer(rs.getInt("agency_id")).intValue());
if (rs.getString("account_disabled").equals("1"))
person.setAccountDisabled(true);
if (rs.getString("pwd_change_reqd").equals("0"))
person.setPasswordChangeRequired(false);
}
return person;
}
}
And here is a test object:
package my.app.access;
import my.app.beans.*;
public class testAccess {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
PersonAccess pa = new PersonAccess();
Person person = new Person();
person.setUserId("jrlaughlin");
try {
pa.getPerson(person);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("done");
}
}
And here is the output from this test app
java.sql.SQLException: Bigger type length than Maximum
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
at oracle.jdbc.driver.DatabaseError.check_error(DatabaseError.java:884)
at oracle.jdbc.driver.T4CMAREngine.buffer2Value(T4CMAREngine.java:2230)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB4(T4CMAREngine.java:1146)
at oracle.jdbc.driver.T4CTTIoac.unmarshal(T4CTTIoac.java:215)
at oracle.jdbc.driver.T4C8TTIuds.unmarshal(T4C8TTIuds.java:121)
done
at oracle.jdbc.driver.T4CTTIdcb.receiveCommon(T4CTTIdcb.java:125)
at oracle.jdbc.driver.T4CTTIdcb.receiveFromRefCursor(T4CTTIdcb.java:103)
at oracle.jdbc.driver.T4CResultSetAccessor.unmarshalOneRow(T4CResultSetAccessor.java:165)
at oracle.jdbc.driver.T4CTTIrxd.unmarshal(T4CTTIrxd.java:787)
at oracle.jdbc.driver.T4CTTIrxd.unmarshal(T4CTTIrxd.java:704)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:526)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:179)
at oracle.jdbc.driver.T4CCallableStatement.execute_for_rows(T4CCallableStatement.java:782)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1027)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2887)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:2978)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4102)
at my.app.access.PersonAccess.getPerson(PersonAccess.java:68)
at my.app.access.testAccess.main(testAccess.java:17)
*************************************************
I am only having this problem when using the 10g jdbc driver, 9.2.0.4 and up are fine.
Thanks again.....