Oracle 12c 中 varchar2 的扩展长度

Posted

技术标签:

【中文标题】Oracle 12c 中 varchar2 的扩展长度【英文标题】:Extended length for varchar2 in Oracle 12c 【发布时间】:2015-05-07 00:26:54 【问题描述】:

我认为我应该在我的 Java 应用程序中提供新的扩展 varchar2 限制。这是我到目前为止所做的:

    根据推荐的程序将 MAX_STRING_SIZE 更改为 EXTENDED。 将相关列扩展到 32767 个字符。 运行程序。

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 库中)。

【问题讨论】:

您在数据库中使用了哪个字符集?在 UTF8 Latin 1 字符被扩展并且总大小增加。示例:您将看到字符串长度为 32 个字符,但使用 UTF8 编码时,长度增加到 34 个字符。请确认此设置并提供表格描述+行更新示例。 我设法进一步挖掘了错误消息的原因,并最终得到了 ora-24920 错误。我正在使用 sqldeveloper 和其他基于 java 的工具,所以在我看来问题是 java 或 jdbc 相关的,而不是 sql。它很可能与这个线程有关 link 【参考方案1】:

您必须使用 12c 中的 JDBC 驱动程序。

【讨论】:

以上是关于Oracle 12c 中 varchar2 的扩展长度的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 12C 新特性之扩展数据类型(extended data type)

Oracle 19c对VARCHAR2的限制

Oracle 19c对VARCHAR2的限制

使用 12c 客户端截断的存储过程 OUTPUT VARCHAR2 值

mysql与oracle 长度区别

Oracle 12c 数据默认值