Ошибка в чтении оракула Sql функций в Java - PullRequest
0 голосов
/ 18 мая 2018

Я хочу вызывать функции Oracle Sql, используя java.Но я получаю сообщение об ошибке

java.sql.SQLException: отсутствует индекс IN или OUT в индексе :: 4

Может ли какой-либо орган помочь мне в этом?

Ниже приведены инструкции для чтения Oracle SQL Function.

DECLARE
  ID VARCHAR2(10);
  date1 DATE;
  output PL/SQL RECORD;
BEGIN
 ID := '1234';
  date1  := to_date('2018-05-15','yyyy-MM-dd');
  output := Function1(
    ID   => I_EMPL_ID,
    date1  => I_BALANCE_DATE
  );
END;

Ниже приведен код, который я использовал в java для вызова функции:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MMM-yy");

 Date now = new java.sql.Date(simpleDateFormat.parse("17-MAY-18").getTime());

 CallableStatement cstmt = con.prepareCall("{? = call Function1(?,?,?)}");

               cstmt.setString(1, "1234");
               cstmt.setDate(2, now);
               cstmt.registerOutParameter(3, Types.ROWID);
               cstmt.execute();

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

java.sql.SQLException: отсутствует индекс IN или OUT в индексе :: 4

Кто-нибудь может мне помочь по этому поводу?

1 Ответ

0 голосов
/ 18 мая 2018
CallableStatement cstmt = con.prepareCall("{? = call Function1(?,?,?)}");

Имеет 4 ? параметров привязки.

                                            ^                  ^ ^ ^
                                            1                  2 3 4

Первое - это возвращаемое значение из функции, а второй, третий и четвертый - аргументы функции.

cstmt.registerOutParameter( 1, Types.ROWID );
cstmt.setString( 2, "1234" );
cstmt.setDate(   3, now );
cstmt.setInteger(4, 0 );       // Or whatever type the 3rd function argument has.
cstmt.execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...