如何使用 oracle sql 命令查找 clob 数据列的特定子部分(实际存储字符)?

Posted

技术标签:

【中文标题】如何使用 oracle sql 命令查找 clob 数据列的特定子部分(实际存储字符)?【英文标题】:How to find particular sub part of the clob data column ( actually characters are stored) using oracle sql command? 【发布时间】:2015-11-04 17:49:27 【问题描述】:

oracle DB表中有一个clob类型的列,存储字符,行数很多。

我需要提取部分 clob 数据,而不是全部数据

例如列数据如下

com.mywebsite.info  information message:  java.io.Filenotfound exception
trace

我只需要提取 java.io.filenotfound 字符串。我尝试在 oracle sql 中使用正则表达式,但找不到获取子字符串的选项。

【问题讨论】:

你要实现的算法是什么?只有一个数据示例使问题无法回答。例如,您想要的所有字符串都位于“消息:”和“异常跟踪”之间吗? 我正在尝试仅提取问题的根本原因,即 filenotfound 而不是整个堆栈跟踪,这将是多行。我要查找的子字符串将位于消息和 java 跟踪字符串之间 用文字陈述找到“根本原因”的算法。我们不知道您的数据。我们不知道我们可以对这些数据的格式做出什么假设。我们甚至无法访问您发布的一个示例字符串。我可以推测“com.mywebsite.info 信息消息:”是一个硬编码值,并且您希望之后的所有内容都到第一个空格。我不知道这种猜测是否正确。 This post 可能有帮助 所以你试过regexp_substr()?你到底尝试了什么? 【参考方案1】:

您可以使用 DBMS_LOB.SUBSTRDBMS_LOB.INSTR 函数 在您的查询中,您只能选择 CLOB 的子部分作为文本,然后对文本执行您需要的操作,就像使用简单文本字段一样

例如:

--create test table from user_tables DDL text
create table test as
select table_name, dbms_metadata.get_ddl('TABLE', table_name) as clob_field
from user_tables

--sample select
 select 
 dbms_lob.substr(clob_field, 17) as sample_first_17_chars
,dbms_lob.substr(clob_field, 6, instr(clob_field,'NUMBER')) as sample_number_text      
  from test
where dbms_lob.instr(clob_field, 'NUMBER') > 0

结果

SAMPLE_FIRST_17_CHARS, SAMPLE_NUMBER_TEXT
CREATE TABLE ",NUMBER
CREATE TABLE ",NUMBER
CREATE TABLE ",NUMBER
CREATE TABLE ",NUMBER

【讨论】:

成功了。如果我正在搜索的特定子部分在 clob 类型的多行中存在,我是否需要添加另一个参数来指定在 clob(字符)的每一行中搜索子字符串,即 dbms_lob.instr(fil, pattern, 100, 3);,这里 sql 仅检查第 3 次出现,但我需要获取子字符串的多次出现并在其旁边显示字符串。我需要编写for循环还是需要在sql中执行程序函数。例如下面的错误 com.mywebsite.info 信息消息:java.io.Filenotfound 异常 以上文件未找到异常在跟踪日志中多次出现,我需要多次拉取文件未找到异常旁边的字符串 它看起来是一个复杂的逻辑,你需要看这篇文章如何做CLOB阅读***.com/questions/11647041/…

以上是关于如何使用 oracle sql 命令查找 clob 数据列的特定子部分(实际存储字符)?的主要内容,如果未能解决你的问题,请参考以下文章

oracle如何导出具有clob字段类型的sql?

oracle 10G数据库如何插入clob字段的值的简单语句sql语句

如何通过sql的insert语句插入大量字符串到oracle的clob字段?

oracle中LOBSEGMENT类型存储的clob的内容过大,如何清除clob字段内容。释放表空间!

在 Oracle DB 的 CLOB 字段中存储文件

JAVA读取Oracle数据库Clob字段转换成String问题