Расширенная длина для varchar2 в Oracle 12c

Я подумал, что должен указать новые расширенные ограничения varchar2 в своем приложении Java. Вот что я сделал до сих пор:

  1. MAX_STRING_SIZE изменен на EXTENDED в соответствии с рекомендуемой процедурой.
  2. Расширен рассматриваемый столбец до 32767 символов.
  3. Запустил программу.

Вызов Java ResultSet.updateString( str, idx ) работает нормально, но когда я прихожу к ResultSet.updateRow(), я получаю исключение Java, ссылающееся на ошибку Oracle:

java.sql.SQLException: ORA-01461: может привязать значение LONG только для вставки в столбец LONG

Полный стек ошибок (или, по крайней мере, часть, которая не относится к моему коду) выглядит следующим образом:

java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:173)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1030)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:194)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:947)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1222)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3381)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3462)
at oracle.jdbc.driver.UpdatableResultSet.executeUpdateRow(UpdatableResultSet.java:3317)
at oracle.jdbc.driver.UpdatableResultSet.updateRow(UpdatableResultSet.java:2281)

Насколько я понимаю, так и должно быть. Но либо я забыл что-то фундаментальное, либо это должно быть ошибка (возможно, в библиотеке jdbc).


person Roald Andresen    schedule 07.05.2015    source источник
comment
какой набор символов вы используете в своей базе данных? в UTF8 символы Latin 1 расширены, а общий размер увеличен. Пример: вы увидите, что длина строки составляет 32 символа, но при кодировании с использованием UTF8 размер увеличивается до 34 символов. Подтвердите эту настройку и предоставьте описание таблицы и пример обновления строки.   -  person Daniel Vukasovich    schedule 07.05.2015
comment
Мне удалось углубиться в причины сообщения об ошибке, и в итоге я получил ошибку ora-24920. Я использую sqldeveloper и другие инструменты на основе Java, поэтому мне кажется, что проблема связана с java или jdbc, а не с sql. Скорее всего, это связано с этим потоком ссылка   -  person Roald Andresen    schedule 07.05.2015


Ответы (1)


Вы должны использовать драйвер JDBC из версии 12c.

person Jean de Lavarene    schedule 22.05.2015