ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORA-01461

ORA-01461

原创 Linux操作系统 作者:perfychi 时间:2013-04-28 11:41:59 0 删除 编辑
From:  http://lzfhope.blog.163.com/blog/static/6363992200911854940860/

   环境oracle 10g r2,windows
      ora-01461的标准说明是:
      ORA-01461 can bind a LONG value on
ly for insert into a LONG column
Cause: An attempt was made to insert a value from a LONG datatype into another datatype. This is not allowed.
      Action: Do not try to insert LONG datatypes into other types of columns.
      ----------------------
      翻译为中文就是不能把Long类型数据绑定到非long列中,很直白吧!
      
      一般的情况,咱们不说,就说一种特殊的情况,还是举个例子最好说明。    
      使用关键字values插入大于8000的varchar2。


 SQL> create table test_lob(OperationTime date,Sqls clob);

Table created

SQL>
SQL> Declare
  2    vx Varchar2(32767);
  3  Begin
  4    For i In 1..3000 Loop
  5      vx:=vx||'0123456789';
  6    End Loop;
  7    Insert Into test_lob Values(Sysdate,vx);
  8  End;
  9  /

PL/SQL procedure successfully completed

SQL> commit;

Commit complete

另外一种写法使用子查询.

SQL> Declare
  2    vx Varchar2(32767);
  3  Begin
  4    For i In 1..3000 Loop
  5      vx:=vx||'0123456789';
  6    End Loop;
  7    --Insert Into test_lob Values(Sysdate,vx);
  8    Insert Into test_lob
  9        Select Sysdate,vx From dual;
 10  End;
 11  /

Declare
  vx Varchar2(32767);
Begin
  For i In 1..3000 Loop
    vx:=vx||'0123456789';
  End Loop;
  --Insert Into test_lob Values(Sysdate,vx);
  Insert Into test_lob
      Select Sysdate,vx From dual;
End;

ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值
ORA-06512: 在 line 8

      以上两个插入方法的差别在于语法不一样,前者是利用关键字values一条条插入,后面是使用子查询的方式插入。
      无需要问为什么--事实就是这么回事。
      从以上二种写法的差异来看,可以得出以下结论:
      1)当用关键字values插入单条的时候,pl/sql可以把varchar2当作VARCHAR2插入到CLOB。
      2)但用子查询的时候,超过8000的varchar2变量会被转化为LONG类型返回
      之所以,有这样的情况出现,是因为oracle导致的,oracle大概现在只能这么处理。当超长的VARCHAR2出现在select列表中的时候,是当作CLOB存储还是LONG列来存储,这是涉及到很多地方的,修改起来不太方便。 

       还有关于程序bug的。
       http://lzfhope.blog.163.com/blog/static/63639922009427114510786/ 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27042095/viewspace-759473/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: ORA-01461
请登录后发表评论 登录
全部评论

注册时间:2012-06-06

  • 博文量
    484
  • 访问量
    2975437