试了一下,好象确实会提示太长了可以用类似如下的来解决下:
INSERT INTO t1 SELECT SUBSTR(t2.f1,1,5) FROM t2 WHERE LENGTH(trim(t2.f1))<=5;

解决方案 »

  1.   


    SQL> desc t1;
    Name Type    Nullable Default Comments 
    ---- ------- -------- ------- -------- 
    F1   CHAR(5) Y                         
     
    SQL> desc t2;
    Name Type     Nullable Default Comments 
    ---- -------- -------- ------- -------- 
    F1   CHAR(15) Y                         
     
    SQL> SELECT * FROM t2;
     
    F1
    ---------------
    12345677
    1234
     
    SQL> insert into t1 SELECT * FROM t2 WHERE length(trim(t2.f1))<=5;
     
    insert into t1 SELECT * FROM t2 WHERE length(trim(t2.f1))<=5
     
    ORA-12899: value too large for column "WK"."T1"."F1" (actual: 15, maximum: 5)
     
    SQL> INSERT INTO t1 SELECT SUBSTR(t2.f1,1,5) FROM t2 WHERE LENGTH(trim(t2.f1))<=5;
     
    1 row inserted
      

  2.   

    length取的是字符长度,而不是字节长度,比如“一二ABC”这个字符串的length的结果是5,实际占用字节是大于5的,如果你的数据库字符类型是VARCHAR2(5),那么就会报出长度错误。
      

  3.   

    楼主可以把length改成lengthb来实现计算字节长度的目的。