ORA-01461: can bind a LONG value only for insert into a LONG column-Occurs when querying

前端 未结 15 1752
野的像风
野的像风 2020-11-30 02:44

When I try to query objects, I end up with following error:

ORA-01461: can bind a LONG value only for insert into a LONG column

Could someo

15条回答
  •  自闭症患者
    2020-11-30 03:22

    This error occurs when one attempts to use a varchar variable longer than 4000 bytes in an SQL statement. PL/SQL allows varchars up to 32767 bytes, but the limit for database tables and SQL language is 4000. You can't use PL/SQL variables that SQL doesn't recognize in SQL statements; an exception, as the message explains, is a direct insert into a long-type column.

    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;
    

提交回复
热议问题