Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从限制为32kb的Oracle数据库中读取长时间的CLOB_Sql_Oracle_Clob_Large Data - Fatal编程技术网

Sql 从限制为32kb的Oracle数据库中读取长时间的CLOB

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的限制更高。我尝试了一些方法,其中之一

我试图从旧Oracle数据库(9.2版)中提取LONG类型的单元格内容。问题是,其中一些单元格的内容超过30000个字符,并在选择时被截断。我缺乏DBA技能,因此我有两个问题:

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

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

  • 首先,我创建了临时表并插入了一些我知道超过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;
    

    因此,即使我尝试将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;