从Oracle CLOB列中提取各种字符串模式作为单独的记录[已关闭]

mkh04yzy  于 2023-06-22  发布在  Oracle
关注(0)|答案(1)|浏览(100)
    • 已关闭**,此问题需要更focused。目前不接受答复。
    • 想改善这个问题吗?* * 更新问题,使其仅通过editing this post关注一个问题。

7天前关闭
这篇文章是编辑并提交审查7天前.
Improve this question
在Oracle数据库中,以下文本存储在多行CLOB列中(块大小为8192)。我想检查内容中是否存在不区分大小写的模式“error”和“failed to”。对于找到的每个模式,必须将模式和跟随模式直到其行结束的字符串提取为单独的记录。
my_table:
| 国际自然资源研究所|类型,类型|lnr| my_clob_field|
| - -----|- -----|- -----|- -----|
| 一二三四|一个|1| dbi:Oracle:DB01,用户,错误:运行脚本时出错。更多详情请参见报告。线程数(每个进程)无限进程(每个用户)16384警告:无法使用rsync:rsync在容器中不可用错误:复制文件时出错:设备上没有剩余空间错误:无法复制/opt/tdl。删除/opt/. kube/config_0426236信息:已与用户连接宣告有一个ORA-04063:包体“ABC #”有错误消息ORA-06508:PL/SQL:找不到正在调用的程序单元:"ABC #"curl:(7)无法连接到www.example.com端口123:远程主机拒绝尝试的连接操作。example.com信息附件:无INFO Attachement: none |
| 一二三四|一个|2|目录./abc不为空。DFT 2023 918188:错误目录./abc无法删除|
预期结果:
| 国际自然资源研究所|提取字符串|
| - -----|- -----|
| 一二三四|错误:运行脚本时发生错误。更多详情请参见报告|
| 一二三四|错误:复制文件时出错:设备上没有剩余空间|
| 一二三四|错误:无法复制/opt/tdl。|
| 一二三四|无法连接到www.example.com端口123:远程主机拒绝尝试的连接操作。example.com port 123: A remote host refused an attempted connect operation.|
| 一二三四|错误目录./abc无法删除|
我尝试了以下方法,但不太奏效:

SELECT
  DBMS_LOB.SUBSTR(REGEXP_SUBSTR(my_clob_field, '(error.*$)|(failed to .*$)', 1, 1, 'im'), 4000, 1) AS extracted_string
FROM
  my_table
WHERE type IN ('A','B')
CONNECT BY
  REGEXP_SUBSTR(my_clob_field, '(error.*$)|(failed to .*$)', 1, LEVEL, 'im') IS NOT NULL
  AND PRIOR SYS_GUID() IS NOT NULL
  AND PRIOR my_clob_field = my_clob_field

注意:my_table的主键由三列组成(IDNR、TYPE、LNR)。此外,应该评估整个CLOB内容,而不仅仅是前4000个字符。正则表达式本身并不是问题的焦点。
高度赞赏任何有用的建议,如何使它作为一个sql语句工作。

pbossiut

pbossiut1#

您有多个捕获组,因此只需将它们编译为一个。

(ORA-\d+:.*$|java\..*\exception:.*$|error:.*$|^.*no such file.*$|^.*cannot create .*$|failed to .*$|access.*denied.*$)

相关问题