我用DBMS_LOB包里的GETLENGTH()函数获取CLOB类型的长度,, 最大只返回了 18341 数值... 但实际上我的字符串不至这么多的,我跟踪看过,,字符串被截断了,,怎么会事啊...???????? 其他向DBMS_LOB.SUBSTR()函数都没有截断..... 不可能 GETLENGTH() 的最大上限值就是18341 吧????????????  

解决方案 »

  1.   

    不可能上限是18341,应该是你的代码错误,看看下面的:
    CREATE TABLE aaa(a CLOB);
    INSERT INTO aaa VALUES('1234567890');
    SELECT dbms_lob.getlength(a) FROM aaa;
    DECLARE
      l_v VARCHAR2(4000); 
    BEGIN
      FOR i IN 1..15 LOOP
       UPDATE aaa SET a=a||a;
      END LOOP;
    END;
    /
    SELECT dbms_lob.getlength(a) FROM aaa;
    --返回327680
      

  2.   

    PROCEDURE PROC_NAME 

      v_MainDataList IN VARCHAR2 DEFAULT NULL , 
      IN_ListDataList IN CLOB DEFAULT NULL , 
      ...... 
      ...... 

    AS 
      v_ListDataList :CLOB; 
    BEGIN 
      v_ListDataList := DBMS_LOB.SUBSTR(v_ListDataList , DBMS_LOB.GETLENGTH(v_ListDataList) , 1 ); 
      INSERT TESTAAA (A) VALUES (v_ListDataList); 
      COMMIT; 
    END; /*如果 
    v_ListDataList := DBMS_LOB.SUBSTR(v_ListDataList , DBMS_LOB.GETLENGTH(v_ListDataList , 1 ); 
    换成 
    v_ListDataList := DBMS_LOB.SUBSTR(v_ListDataList , 30000 , 1 ); 
    保存在TESTAAA 表 A 中的字符串就是完整的。。 
    */