Ошибка ORA-12899 при выполнении запроса

1

Я пытаюсь установить строку с одним символом в моем подготовленном заявлении следующим образом:

ps.setString(7, String.valueOf(concretizada));

Но вот что: мой столбец db имеет размер один. И даже если это только один символ, возникает исключение:

java.sql.SQLException: ORA-12899: valor muito grande para a coluna "QPL"."TAB_NEGC"."FL_CONCR" (real: 8, máximo: 1)

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:951)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:513)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:208)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1046)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1336)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3613)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3694)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1354)
    at br.com.reajuste.repositorio.RepositorioTabelaNegociacao.inserirTabela(RepositorioTabelaNegociacao.java:1451)
    at br.com.reajuste.repositorio.RepositorioTabelaNegociacao.inserirTabelaNegociacao(RepositorioTabelaNegociacao.java:855)
    at br.com.reajuste.repositorio.RepositorioTabelaNegociacao.copiarTabelas(RepositorioTabelaNegociacao.java:837)
    at br.com.reajuste.controlador.ControladorReajuste.executarReajuste(ControladorReajuste.java:33)
    at br.com.reajuste.gui.Main.main(Main.java:18)

(Значение слишком велико для столбца)

Как я могу задать символ в качестве параметра в подготовленном выражении?

EDIT: переменная 'concretizada':

String concretizada = "N";
        if (tabelaNegociacao.getConcretizada()) {
            concretizada = "S";
        }
  • 0
    Какова стоимость concretizada ?
  • 0
    Обрежьте () строку и посмотрите. Может быть пробелы в String, вызывающие проблему.
Показать ещё 9 комментариев
Теги:

1 ответ

1

DDL не говорит, что FL_CONCR имеет FL_CONCR 1 символ. В нем говорится, что FL_CONCR имеет FL_CONCR 1 байт.

Символ может принимать несколько байтов в зависимости от того, как он кодируется.

Измените его так:

FL_CONCR VARCHAR2(1 CHAR)

И это должно сработать.

Если вы не хотите повторно создавать таблицу:

ALTER TABLE TAB_NEGC MODIFY(FL_CONCR VARCHAR2(1 CHAR));
  • 0
    Разве нет способа решить эту проблему без изменения определения столбца?
  • 0
    @JoaoVictor К сожалению, нет. Как я уже писал, символ может иметь переменный размер в байтах в зависимости от того, как он закодирован. т.е. UTF-8 может занимать от 1 до 4 байтов для хранения символа.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню