ORA-01461问题的对比测试

时间:2022-05-04
本文章向大家介绍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