Я вызываю процедуру с именованным параметром, используя JDBC CallableStatement.
Процедура:
create or replace PROCEDURE VIST_COMP(I_STUDY IN VARCHAR2, I_STARTDATE IN VARCHAR2, I_ENDDATE IN VARCHAR2, I_EMPLOYEE IN VARCHAR2, I_EMPLOYEE_OPTIONAL IN NUMBER, I_SPONSOR IN VARCHAR2, I_SPONSOR_OPTIONAL IN NUMBER, p_rc OUT SYS_REFCURSOR)
AS
o_cursor SYS_REFCURSOR;
sqlqry clob;
BEGIN
//procedure code
END VIST_COMP;
Java-код:
String runSP = "call VIST_COMP(:protocols,:alertStartDate,:alertEndDate,:employee,:employeeOptional,:sponsor,:sponsorOptional, :out_cursor)";
try (Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:localhost:389/oracle", "username", "password");
CallableStatement callableStatement = conn.prepareCall(runSP)) {
callableStatement.setString("protocols","12345");
callableStatement.setString("alertStartDate", "03-Apr-2019");
callableStatement.setString("alertEndDate", "03-Jun-2019");
callableStatement.setString("employee",null);
callableStatement.setInt("employeeOptional",1);
callableStatement.setString("sponsor", "abc");
callableStatement.setInt("sponsorOptional",0);
callableStatement.registerOutParameter("out_cursor", OracleTypes.CURSOR);
// run it
callableStatement.execute();
ResultSet rset = (ResultSet) callableStatement.getObject("out_cursor");
while(rset.next()) {
System.out.println(rset.getString("LABEL_VALUE"));
}
}catch(Exception e) {
e.printStackTrace();
}
Над кодом работает хорошо, и я также получил ResultSet. Но проблема в том, что если я изменю порядок параметров набора, он не работает. Например, если я установил sponsor
выше даты, как показано ниже, выдав ошибку.
callableStatement.setString("protocols","12345");
callableStatement.setString("alertStartDate", "03-Apr-2019");
callableStatement.setString("sponsor", "abc");
callableStatement.setString("alertEndDate", "03-Jun-2019");
callableStatement.setString("employee",null);
callableStatement.setInt("employeeOptional",1);
callableStatement.setInt("sponsorOptional",0);
Ошибка БД
ORA-01858: был найден нечисловой символ, где числовой
ожидается
ORA-06512: в "VIST_COMP", строка 266
Использование пути сборки Java 1.7 (установлен JDK 1.8), Oracle 12c, Ojdbc6.jar.