ORA-01461问题的对比测试
昨天生产环境有个严重问题,报了ora-01461的错误,这个问题看似应该是开发那边的问题,但dba这边也得提供一些信息,自己模拟测试了一把。
为问题的排查也提供了一些帮助。
这个问题可以使用一下场景来对比测试。
–》场景 #1
使用关键字values来插入。
using key word “values” to
insert.
SQL> Declare
vx
Varchar2(32767);
Begin
For i
In 1..3000 Loop
vx:=vx||’0123456789′;
End
Loop;
dbms_output.put_line(‘length:’||length(vx));
Insert Into test_lob
Values(Sysdate,vx);
End;
/
length:30000
PL/SQL procedure successfully
completed.
–》场景 #2
使用子查询来插入,如果变量值大于4000,就会自动把变量分成两部分作为long data type来插入。
Using subquery to insert,
variable values larger than 4000 will divided into parts for long datatype.
SQL> Declare
vx
Varchar2(32767);
Begin
For i In 1..400 Loop
vx:=vx||’0123456789′;
End Loop;
vx:=vx||’.’;
–Insert
Into test_lob Values(Sysdate,vx);
dbms_output.put_line(‘length:’||length(vx));
Insert Into test_lob
Select
Sysdate,vx From dual;
End;
/
length:4001
Declare
*
ERROR at line 1:
ORA-01461: can bind a LONG value
only for insert into a LONG column
ORA-06512: at line 10
📌 本文来自作者的 ITPUB 技术博客存档(2014 年),原文链接:https://blog.itpub.net/23718752/viewspace-1100740/
