#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 в строку.