I am currently working with Java Stored Procedures in Oracle and I see strange behavior when trying to get a connection in my Java code.
My Java is packaged in a jar file and then deployed to Oracle using the loadjava command-line loadjava . Then, A package is created in the database, which maps each method in a particular Java class to the PL / SQL function using call specifications.
Some of the columns I'm working with are CLOB s. In Java, I'm trying to extract the value of this CLOB (displayed in the call spec as oracle.sql.CLOB ) in String :
private static String getStringFromCLOB(CLOB clob) throws SQLException { long length = clob.length(); return clob.getSubString(1, (int) length); }
When I run this code, I get the following stack trace in 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)
Before I just saw the Exception message, I wrapped the contents of the abusive method with try / catch so that I could dump the full stack trace to System.out .
It is worth noting that I worked on Oracle 11.2.0.1.0 (32 bits), but it does not work on Oracle 11.2.0.2.0 (64bit) .
I also had work with PL / SQL function with Java support without any problems. Only those who try to make a connection do not work.
I looked at <ORACLE_HOME>\jdbc\lib , and the banks, although they called the same thing, seem to be different in the two distributions. Banks in the directory: (size 11.2.0.1.0 and size 11.2.0.2.0):
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,062 KB | 2,102 KB)ojdbc6_g.jar (3,323KB | 3,782KB)ojdbc6dms.jar (2,594KB | 2,698KB)ojdbc6dms_g.jar (3,344KB | 3,805KB)simplefan.jar (20KB | 20KB) <- probably the same
The manifest files of these cans confirm that they are created for a specific version, that is, 11.2.0.1.0 or 11.2.0.2.0. Is it possible that the error was introduced in 11.2.0.2.0? Or, most likely, this is a user, that is mine, an error :-)
Also, where does the oracle.jdbc.driver.T2SConnection class live?
Any help / guidance is greatly appreciated. Please let me know if you need more information.