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)