读取LONGs作为来自Oracle数据库的CLOB限制为32kb

时间:2014-05-14 12:41:23

标签: sql oracle clob large-data

我正在尝试从旧的Oracle数据库(版本9.2)中提取类型为LONG的单元格中的内容。麻烦的是,其中一些单元格的内容超过30,000个字符,并在选择时被截断。我的DBA技能缺乏,所以我有两个问题:

  1. 是否可以将大于30,000个字符(32kb?)的内容插入LONG类型的单元格中?如果答案是否定的,请忽略我的第二个问题,因为这意味着数据必须在插入时被截断并且现在已损坏。

  2. 如果可以插入超过32kb,那么问题是如何读回所有内容?我已经尝试将LONG转换为CLOB,因为我已经读过CLOB的限制更高。我尝试了一些方法,其中一个是在Oracle中创建一个临时表,并使用TO_LOB函数将LONG单元格中的数据填充到CLOB:

  3. 首先,我创建了临时表并插入了一些我知道超过32kb的测试单元:

    CREATE GLOBAL TEMPORARY TABLE temp_table(
    time TIMESTAMP WITH LOCAL TIME ZONE,
    text CLOB
    )
    ON COMMIT DELETE ROWS;
    
    
    INSERT INTO temp_table (
     time ,
     text
    ) 
    SELECT 
    sysdate ,
    TO_LOB(DOC_CONTENT)
    
    FROM DOCUMENTS 
    
    WHERE DOC_ID = '123456'
    AND ROWNUM <= 1;
    

    然后我读出了生成的CLOB的长度,总是得到30,000

    SELECT 
     gt.text
    INTO
     v_clob
    FROM temp_table gt;
    
    dbms_output.put_line('Size: '||dbms_lob.getlength(v_clob));
    
    COMMIT;
    
    END;
    

    因此即使我尝试将LONG转换为CLOB,内容仍然被截断为30,000个字符。还有另一种方法来获得整个&#39;内容超出LONG,或者在最初插入时丢失了?感谢

0 个答案:

没有答案