我用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 中的字符串就是完整的。。
    */
      

  3.   

    刚才上面少写了个括号
    应该是
    v_ListDataList := DBMS_LOB.SUBSTR(v_ListDataList , DBMS_LOB.GETLENGTH(v_ListDataList), 1 );