Sql 从限制为32kb的Oracle数据库中读取长时间的CLOB
我试图从旧Oracle数据库(9.2版)中提取LONG类型的单元格内容。问题是,其中一些单元格的内容超过30000个字符,并在选择时被截断。我缺乏DBA技能,因此我有两个问题:Sql 从限制为32kb的Oracle数据库中读取长时间的CLOB,sql,oracle,clob,large-data,Sql,Oracle,Clob,Large Data,我试图从旧Oracle数据库(9.2版)中提取LONG类型的单元格内容。问题是,其中一些单元格的内容超过30000个字符,并在选择时被截断。我缺乏DBA技能,因此我有两个问题: 是否可以将大于30000个字符(32kb?)的内容插入到LONG类型的单元格中?如果答案是否定的,请忽略我的第二个问题,因为这意味着数据必须在插入时被截断,并且现在已损坏 如果可以插入超过32kb的内容,那么问题是如何读回所有内容?我曾尝试将LONG转换为CLOB,因为我读到CLOB的限制更高。我尝试了一些方法,其中之一
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;
因此,即使我尝试将long转换为clob,内容仍然被截断为30000个字符。是否有其他方法可以从长文档中获取“全部”内容,或者在最初插入时已丢失?感谢可能会提供有关长列长度的信息,但不推荐使用;CLOB可以大得多。转换并没有避免32KB的限制。如果您的代码报告的
LONG
和CLOB
长度为30000,那么很遗憾,插入时它看起来一定被截断了。您知道它是如何插入的吗?它是暂时保存在varchar2
中还是作为varchar2处理的,这可以解释32KB的大小,因为这是PL/SQL中该数据类型的最大大小?谢谢大家的回复。我尝试了很多方法,结果发现最初的DB所有者插入了这些“文档内容”,每个文档的字符限制为30k,但当文档大于30k时,将它们分成几行。我所要做的就是把它们“缝合”在一起。不知道他们为什么要限制在3万。反正解决了。
SELECT
gt.text
INTO
v_clob
FROM temp_table gt;
dbms_output.put_line('Size: '||dbms_lob.getlength(v_clob));
COMMIT;
END;