使用派生列自动拆分大列
我们的表有一个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
);
答案 0 :(得分:0)
我同意这不是正确方法的评论。您应该找出UI或驱动程序中的内容,或阻止您正确检索CLOB
的内容。
如果客户确实只关心CLOB
中的前4000个字符(尽管我不知道为什么客户会想要这么做),他们可以这样做:
select dbms_lob.substr( mylob, 4000, 1 ) ...
我认为您不应该将SUBSTRB
与CLOBs
一起使用,因为它们是字符数据。如果第4000个字符为2个字节宽,会发生什么情况?它会被损坏。