【发布时间】:2019-02-08 20:51:53
【问题描述】:
使用派生列自动拆分大列
我们的表有一个 CLOB 列。问题是每当 UI 或任何应用程序尝试提取此列时,必须首先将其拆分为更小的块(因为 Oracle 将 VARCHAR2 限制为 4000)。
使用Virtual (Derived) 列自动将CLOB 列拆分为4k 段是否有意义(如下所示)。
因此 - 如果任何应用程序只需要前 4k 个字符,它都可以简单地查询 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
);
【问题讨论】:
-
首先在 PL SQL VARCHAR2 中最大大小是 32767 字节,然后 PL SQL 允许通过其自身(CLOB 类型)来处理 clob。最后在 jdbc 中你有 java.sql.Clob。为什么要拆分 text_clob?
-
这让我觉得这可能是问题的错误解决方案。我能想到的每个流行客户端(Java、.Net、Python 等)都有可以处理来自数据库的 clob 的驱动程序。您不必将其拼凑成 varchars
-
您使用的是什么版本的 Oracle?如果您使用的是 Oracle 12.1 或更高版本,您可以将
max_string_size设置为EXTENDED以获取 32k 字符串而不是 4000 字节字符串。 docs.oracle.com/database/121/REFRN/…