当我尝试查询对象时,我最终得到以下错误:
ORA-01461: can bind a LONG value only for insert into a LONG column
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我解决问题的原因和解决方案吗?
Kir*_*ran 178
varchar2列也可能发生这种情况.通过JDBC简单地使用PreparedStatements可以很好地重现这一点
因此,如上所述,类型或超出列宽可能是错误的.
另请注意,由于varchar2允许最大4k字符,因此双字节字符的实际限制为2k
希望这可以帮助
Tom*_*Żuk 33
当在SQL语句中尝试使用长度超过4000字节的varchar变量时,会发生此错误.PL/SQL允许varchars最多32767字节,但数据库表和SQL语言的限制是4000.您不能使用SQL在SQL语句中无法识别的PL/SQL变量; 正如消息所解释的那样,一个例外是直接插入到长型列中.
create table test (v varchar2(10), c clob);
declare
shortStr varchar2(10) := '0123456789';
longStr1 varchar2(10000) := shortStr;
longStr2 varchar2(10000);
begin
for i in 1 .. 10000
loop
longStr2 := longStr2 || 'X';
end loop;
-- The following results in ORA-01461
insert into test(v, c) values(longStr2, longStr2);
-- This is OK; the actual length matters, not the declared one
insert into test(v, c) values(longStr1, longStr1);
-- This works, too (a direct insert into a clob column)
insert into test(v, c) values(shortStr, longStr2);
-- ORA-01461 again: You can't use longStr2 in an SQL function!
insert into test(v, c) values(shortStr, substr(longStr2, 1, 4000));
end;
Run Code Online (Sandbox Code Playgroud)
Mar*_*bak 14
好吧,既然你没有显示任何代码,我会在这里做一些假设.
基于ORA-1461错误,您似乎在select语句中指定了LONG数据类型?你试图将它绑定到输出变量?是对的吗?错误很简单.您只能将LONG值绑定到LONG列中.
不知道还有什么可说的.错误是相当不言自明的.
通常,从LONG数据类型转移到CLOB是个好主意.CLOB受到更好的支持,而LONG数据类型实际上只是为了向后兼容.
希望有所帮助.
我和我的同事发现了以下内容:
当我们使用Microsoft .NET Oracle驱动程序连接到oracle数据库(System.Data.OracleClient.OracleConnection)时
我们尝试使用数据库参数将长度在2000到4000个字符之间的字符串插入到CLOB或NCLOB字段中
oraCommand.CommandText = "INSERT INTO MY_TABLE (NCLOB_COLUMN) VALUES (:PARAMETER1)";
// Add string-parameters with different lengths
// oraCommand.Parameters.Add("PARAMETER1", new string(' ', 1900)); // ok
oraCommand.Parameters.Add("PARAMETER1", new string(' ', 2500)); // Exception
//oraCommand.Parameters.Add("PARAMETER1", new string(' ', 4100)); // ok
oraCommand.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
我们多年前在微软公司为这个漏洞开了一张票,但它还没有修好.
小智 5
仅当将其插入到Long列中时,才会出现此ORA-01461。绑定长字符串以将其插入VARCHAR2列时,可能会发生此错误,最常见的情况是在存在多字节(意味着单个字符在oracle中可能占用一个以上字节空间)字符转换问题时发生。
如果数据库是UTF-8,则由于每个字符最多占用3个字节,因此将3的转换应用于校验,因此实际上限制为使用1333个字符插入varchar2(4000)。
另一个解决方案是将数据类型从varchar2(4000)更改为CLOB。
| 归档时间: |
|
| 查看次数: |
245223 次 |
| 最近记录: |