Вызов хранимой процедуры Oracle из Java - PullRequest
3 голосов
/ 09 сентября 2010

Я вызываю хранимую функцию Oracle, используя тонкий драйвер JDBC.
Ниже приведен код.

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();

  }

}

Когда я вызываю это, я получаю исключение следующим образом

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

Я использую тонкий драйвер ojdbc6.jar, предоставляемый Oracle.это в моем классе пути.

Спасибо.

1 Ответ

4 голосов
/ 09 сентября 2010

Попробуйте

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

вместо

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

с учетом того факта, что в Oracle пустая строка совпадает с NULL.

В моем текущем проекте я столкнулся с похожими проблемами с NULL, которые можно было бы решить таким образом. (Да, это плохо)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...