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

Java 如何使用oracle sql命令查找clob数据列的特定子部分(实际上存储了字符)?,java,regex,oracle,Java,Regex,Oracle,如何查找clob数据列的特定子部分?实际上,字符是使用oracle sql命令存储的 oracle DB表中有一个clob类型的列,它存储字符和许多行 我需要提取clob数据的一部分,而不是整个数据 例如,列数据如下所示 com.mywebsite.info information message: java.io.Filenotfound exception trace 我只需要提取java.io.filenotfound字符串。我尝试在oracle sql中使用正则表达式,但找不到获取

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

oracle DB表中有一个clob类型的列,它存储字符和许多行

我需要提取clob数据的一部分,而不是整个数据

例如,列数据如下所示

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

您可以使用DBMS\u LOB.SUBSTR和DBMS\u 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

您想要实现的算法是什么?只有一个数据的例子使得这个问题无法回答。您想要的所有字符串是否都位于message:和exception trace之间?例如,我试图只提取问题的根本原因filenotfound,而不是整个堆栈跟踪,我要查找的子字符串将位于message和java trace stringState之间,即查找根本原因的算法。我们不知道你的数据。我们不知道我们可以对这些数据的格式做出什么样的假设。我们甚至无法访问您发布的一个以上的示例字符串。我可以推测com.mywebsite.info信息消息:是一个硬编码的值,您需要在第一个空格之前的所有内容。我不知道这种猜测是否正确。可能有帮助,所以您尝试了regexp\u substr?你到底试了什么?成功了。如果我正在搜索的特定子部分在clob类型的多行中,我是否需要添加另一个参数来指定在每行clob字符中搜索子字符串,即dbms_lob.instrfil,pattern,100,3;,这里sql只检查第三次出现,但我需要获得子字符串的多次出现,并在其旁边显示字符串。我需要为循环编写代码还是需要在sql中使用过程函数。例如下面的错误com.mywebsite.info信息消息:java.io.Filenotfound exception上面的文件notfound exception在跟踪日志中多次出现,我需要拉取文件notfound exception旁边的字符串,多次它看起来是一个复杂的逻辑,你需要看看这篇文章如何进行CLOB读取