java - 执行查询时出现ORA-12899错误

标签 java oracle

我正在尝试在我准备好的语句中设置一个包含一个字符的字符串,如下所示:

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

但事情是这样的:我的数据库列的大小为 1。即使它只是一个字符,也会引发异常:

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)

(值对于列来说太大)

如何在准备好的语句中将字符设置为参数?

编辑:我的“具体”变量:

String concretizada = "N";
        if (tabelaNegociacao.getConcretizada()) {
            concretizada = "S";
        }

最佳答案

DDL 并未说明 FL_CONCR 的长度为 1 个字符。它表示 FL_CONCR 的长度为 1 字节

一个字符可以占用多个字节,具体取决于它的编码方式。

将其更改为:

FL_CONCR VARCHAR2(1 CHAR)

它应该可以工作。

如果您不想重新创建表:

ALTER TABLE TAB_NEGC MODIFY(FL_CONCR VARCHAR2(1 CHAR));

关于java - 执行查询时出现ORA-12899错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25452761/

相关文章:

java - JSSE 是否使用 PrivateKeyEntry 中的证书作为信任 anchor ?

sql - 计算整个表的哈希值的最快方法

sql - 在子查询之间的ORACLE join语句中选择顶部记录

java - 如何为 jdbc odbc 驱动程序设置获取大小

oracle - 在 Oracle 12c R2 中,LogMiner 是否支持长度超过 30 个字符的表/列名称?

java - HashMap 到 ArrayList 内存不足

java - 使用 Mockito : Matching multiple arguments in a private static method?

java - 如何执行从 JFileChooser 到包含文件夹的 JList 的拖放操作

java - 线程 "main"java.lang.UnsatisfiedLinkError 3 中的异常

sql - 需要优化一个超过 200,000 条记录的简单循环