尝试执行select for update语句然后执行插入或更新时,我遇到了一个奇怪的问题.我得到一个ORA-01461例外.只有在使用最新的ojdbc驱动程序(12.1.0.2)时才会发生这种情况,而在较旧的驱动程序中它可以正常工作(12.1.0.1).
更具体地说,最新的驱动程序似乎在主键字符长度(限制为32个字符)中有某种限制,尽管相应的列声明超过32个字符.复制问题的示例代码如下:
CREATE TABLE "TEST_TABLE" (
"TEST_ID" VARCHAR2(40 CHAR) NOT NULL ENABLE,
"TEST_COMMENT" VARCHAR2(200 CHAR),
CONSTRAINT "TEST_TABLE_PK" PRIMARY KEY ("TEST_ID")
);
Run Code Online (Sandbox Code Playgroud)
还有一些java:
public class DemoUpdatableResultSet {
private static final String DB_URL = "jdbc:oracle:thin:@xxxx:1521/xxxxx";
private static final String DB_USER = "xxx";
private static final String DB_PASS = "xxx";
public static Connection getConnection() throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
return conn;
}
public static void main(String[] args) {
final String …Run Code Online (Sandbox Code Playgroud) 我有一个perl脚本,它将文本文件中的记录插入到我们的数据库中.每当记录具有像"RODR_Í_GUEZ"这样的多字节字符时.我收到错误ORA-01461,但是我没有接近4000字符从varchar2切换到long
设置:
$ENV{NLS_CHARACTERSET} = 'AL32UTF8';
Run Code Online (Sandbox Code Playgroud)
在连接之前似乎没有帮助.
使用java客户端(SQuirreL SQL)并手动编写INSERT INTO语句插入记录就好了,所以我确定不是数据库的配置方式.
有什么想法吗?
我有一个Oracle表,其中的列类型为“ SYS.XMLTYPE”,并且存储过程正在执行插入操作:
(简洁版本):
PROCEDURE InsertXML
(
pXMLData IN LONG
)
IS
BEGIN
INSERT INTO MY_TABLE (XML_DATA) VALUES(pXMLData);
END InsertXML;
Run Code Online (Sandbox Code Playgroud)
我从C#代码中以“ OracleType.LongVarChar” 类型调用此sp 。
现在的问题是:如果xml的字符数少于4000个,则一切工作正常,但是如果使用的XML字符数超过4000个,则会出现以下错误:
ORA-20000: ORA-01461: can bind a LONG value only for insert into a LONG column
Run Code Online (Sandbox Code Playgroud)
我该如何处理?Thx 4个答案