使用派生(虚拟)列拆分CLOB列

时间:2019-02-08 20:51:53

标签: oracle plsql

使用派生列自动拆分大列

我们的表有一个CLOB列。问题在于,每当UI或任何应用程序尝试提取此列时,都必须首先将其拆分为较小的块(因为Oracle将VARCHAR2限制为4000)。

使用虚拟(派生)列将CLOB列自动拆分为4k段是否有意义(如下所示)。

因此-如果仅需要前4个字符,则任何应用程序都可以简单地查询seg_1。或seg_1 + seg_2,依此类推。 (假设这里的数据只有8k)

create table code_text2 
( 
      text_clob    clob,
      seg_1        varchar2 (4000 byte) generated always as (substrb
                               (text_clob, 1, 4000)) virtual,
      seg_2        varchar2 (4000 byte) generated always as (substrb (text_clob, 4001, 4000)) virtual 
); 

1 个答案:

答案 0 :(得分:0)

我同意这不是正确方法的评论。您应该找出UI或驱动程序中的内容,或阻止您正确检索CLOB的内容。

如果客户确实只关心CLOB中的前4000个字符(尽管我不知道为什么客户会想要这么做),他们可以这样做:

select dbms_lob.substr( mylob, 4000, 1 ) ...

我认为您不应该将SUBSTRBCLOBs一起使用,因为它们是字符数据。如果第4000个字符为2个字节宽,会发生什么情况?它会被损坏。