Actualmente estoy trabajando con Java Stored Procedures en Oracle y estoy viendo un comportamiento extraño al intentar obtener una conexión dentro de mi Java código.java.lang.ArithmeticException al intentar obtener conexión en Oracle 11.2.0.2.0 (64 bit)
Mi Java se empaqueta en un archivo jar y luego se implementa en Oracle utilizando la utilidad de línea de comandos loadjava
. A continuación, se crea un package
en la base de datos que asigna cada método en una clase Java designada a una función PL/SQL mediante especificaciones de llamadas.
Algunas de las columnas con las que estoy trabajando son CLOB
s. En el Java intento de extraer el valor de este CLOB
(asignada en la especificación llamada como oracle.sql.CLOB
) en un String
:
private static String getStringFromCLOB(CLOB clob) throws SQLException {
long length = clob.length();
return clob.getSubString(1, (int) length);
}
Cuando ejecuto el código me sale el siguiente seguimiento de la pila a aparecer en SQL * Plus:
java.lang.ArithmeticException:/by zero
at oracle.jdbc.driver.T2SConnection.<init>(T2SConnection.java:107)
at oracle.jdbc.driver.T2SDriverExtension.getConnection(T2SDriverExtension.java:31)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:481)
at oracle.jdbc.driver.OracleDriver.defaultConnection(OracleDriver.java:505)
at oracle.sql.DatumWithConnection.getPhysicalConnection(DatumWithConnection.java:53)
at oracle.sql.DatumWithConnection.getInternalConnection(DatumWithConnection.java:177)
at oracle.sql.CLOB.getDBAccess(CLOB.java:1383)
at oracle.sql.CLOB.length(CLOB.java:197)
Antes de que yo estaba viendo el mensaje de la Exception
así que envuelve el contenido del método infractor con una try/catch
para que pudiera volcar la traza completa de la System.out
.
Merece la pena señalar que He tenido esto trabajando en Oracle 11.2.0.1.0 (32 bits) pero no está funcionando en Oracle 11.2.0.2.0 (64 bits).
También he tenido otro PL/SQL respaldado por Java function
s trabajando sin ningún problema. Solo aquellos que intentan hacer una conexión fallan.
He echado un vistazo en <ORACLE_HOME>\jdbc\lib
y los frascos, aunque nombrados de la misma manera, parecen ser diferentes en estas dos distribuciones. Los frascos en el directorio son (11.2.0.1.0 y 11.2.0.2.0 tamaño tamaño de muestra):
ojdbc5.jar
(1,950KB | 1,983KB)ojdbc5_g.jar
(3,010KB | 3,271KB)ojdbc5dms.jar
(2,374KB | 2,489KB)ojdbc5dms_g.jar
(3,030KB | 3,291KB)ojdbc6.jar
(2,062KB | 2,102KB)ojdbc6_g.jar
(3,323KB | 3,782KB)ojdbc6dms.jar
(2,594KB | 2,698KB)ojdbc6dms_g.jar
(3,344KB | 3,805KB)simplefan.jar
(20KB | 20KB) < - probablemente el mismo
Los archivos de manifiesto de estos frascos confirmar que están construidos para la versión específica, es decir, 11.2.0.1.0 o 11.2.0.2.0. ¿Es posible que se haya introducido un error en 11.2.0.2.0? ¿O es más probable que sea el usuario, es decir, mi error :-)
Además, ¿dónde vive la clase oracle.jdbc.driver.T2SConnection
?
Cualquier ayuda/orientación muy apreciada. Por favor, avíseme si necesita más información.
parece un error en el controlador, informe a Oracle o intente/capture, ignore ... (o ambos) – bestsss