Calling an Oracle Stored Procedure from Java

I call an Oracle stored function using a thin driver JDBC.
Below is the code.

class testSP 
{ 
  public static void main (String args []) 
                     throws SQLException, ClassNotFoundException 
  { 
      String driver_class = "oracle.jdbc.driver.OracleDriver"; 
      String connect_string = "jdbc:oracle:thin:@xxx.xx.xx.xx:1521:xxxx"; 

      Connection conn; 

      Class.forName(driver_class); 
      conn = DriverManager.getConnection(connect_string, "xxxx", "xxxx"); 

      // OracleCallableStatement ocs = 
      //    (OracleCallableStatement)conn.prepareCall(
      //        "{? = call acpks_stmt_gen.fn_stmt_gen(?,?,?,?,?,?)}");
      CallableStatement ocs = 
         conn.prepareCall(
            "{? = call acpks_stmt_gen.fn_stmt_gen(?,?,?,?,?,?)}");

      ocs.registerOutParameter(1, java.sql.Types.ARRAY);

      ocs.setString(2, "144000014");
      ocs.setString(3, "RET");
      ocs.setString(4, "N");
      ocs.setString(5, "3");
      ocs.setNull(6, java.sql.Types.DATE) ;
      ocs.setNull(7, java.sql.Types.DATE);



      ocs.executeUpdate(); 

     // java.sql.ResultSet rs2 = (java.sql.ResultSet) ocs.getResultSet();

  }

}

When I call this, I get an exception by following

Exception in thread "main" java.sql.SQLException: ORA-03115: unsupported network datatype or representation

I am using the thin driver ojdbc6.jarprovided by Oracle.
and I use it in my class.

Thank.

+3
source share
1 answer

Try

  ocs.setString(6, "") ;
  ocs.setString(7, "");

instead

  ocs.setNull(6, java.sql.Types.DATE);
  ocs.setNull(7, java.sql.Types.DATE);

using the fact that in Oracle the empty string is the same as NULL.

In my current project, I ran into similar issues with NULL that could be solved this way. (Yes, it's elegant)

+4
source

Source: https://habr.com/ru/post/1763955/


All Articles