ОШИБКА java.sql.SQLException: ORA-01722: недопустимое число при выполнении подготовленной инструкции для изменения последовательности

#java #oracle #jdbc #prepared-statement #ora-01722

#java #Oracle #jdbc #подготовленная инструкция #ora-01722

Вопрос:

 sqlStmt = new StringBuffer("  ALTER SEQUENCE "  );  
                    sqlStmt.append( ServerContext.getSchemaName() );
                    sqlStmt.append("SEQ_EDCD_TRACE_NUM");
                    sqlStmt.append( " INCREMENT BY " );
                    sqlStmt.append( " ? " );
pstmt.setLong(1, incval);
pstmt.execute();
  

Комментарии:

1. какой тип incval ?

2. Я надеюсь, вы понимаете, что будет делать эта команда SQL, а именно изменять размер приращения последовательности для каждого будущего вызова NEXT_VAL (и не увеличивать текущее значение один раз). Я несколько раз видел, что люди неправильно использовали эту инструкцию, а затем в течение нескольких часов заканчивались числа. Это не только привело к остановке приложения. Также не осталось достаточно большого диапазона чисел (без уже используемого числа).

Ответ №1:

Вы не можете использовать переменные привязки с DDL, такие как ALTER SEQUENCE . Вам придется выполнить конкатенацию incval со строкой.

Не должно быть никакого риска SQL-инъекции, если incval это int или long .

Комментарии:

1. спасибо, Люк.. это сработало путем объединения incval в строку.