我正在尝试拆分一个包含超过32K字符的行的巨大CLOB。
我试着用这个
SELECT REGEXP_SUBSTR(file_cont, '[^'||chr(10)||']+', 1, LEVEL) AS substr
from data_tab where interface = 'Historical'
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(file_cont, '[^'||chr(10)||']+')) + 1
表 * data_tab * 包含一些以管道作为分隔符的文件。列 * file_cont * 是一个clob,其中包含我们感兴趣的文件。然而,当我尝试执行上述查询时,它看起来像是一个无限循环。
仅供参考,CLOB包含600多行。
我想做的是将clob一行一行地拆分为不同的CLOB。您知道一个查询可以显示此结果而不会陷入无限循环吗?
编辑:文件大小为22MB。
先谢谢你。
3条答案
按热度按时间jum4pzuy1#
我有一个特殊的包用于split和PCRE正则表达式:https://github.com/xtender/XT_REGEXP
您可以在https://github.com/xtender/XT_REGEXP/blob/master/xt_regexp.pck中找到此函数
因此,您可以使用以下流水线函数:
或者以这个代码为例。
clob_table只是一个
table of clob
:https://github.com/xtender/XT_REGEXP/blob/master/types.sql
更新:修复了长匹配的错误:返回varchar2的dbms_lob.substr替换为返回clob的substr(clob)。
piztneat2#
可以使用PL/SQL函数读取并拆分值:
如果数据类型为:
然后函数:
对于示例数据:
然后输出:
是:
| 价值|长度|
| - ------|- ------|
| 啊啊啊啊啊|四万|
| BBBBBBBB|四万|
| 中国|四万|
| 日|四万|
4zcjmb1e3#
您可以在纯SQL中执行此操作,首先将数据转换为
xmltype
,然后使用xmltable
提取行: