我有一个表,其中一个字段是CLOB,它存储错误消息信息。
字段CLOB如下:
oracle.retail.sim.common.core.SimServerException: Error processing message! [Inbound: true, MessageType: ItemLocCre, BusinessId: 1101505002]
at oracle.retail.sim.service.mps.SimMessageCommand.buildException(Unknown Source)
at oracle.retail.sim.service.mps.SimMessageProcessCommand.doExecute(Unknown Source)
at oracle.retail.sim.common.core.Command.execute(Unknown Source)
at sun.reflect.GeneratedMethodAccessor273.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
Caused by: oracle.retail.sim.common.core.SimServerException: Item not found for Id: 1101505002
at oracle.retail.sim.server.integration.consumer.itemloc.ItemLocConsumer.buildItemNotFoundException(Unknown Source)
at oracle.retail.sim.server.integration.consumer.itemloc.ItemLocCreateConsumer.handleMessage(Unknown Source)
at oracle.retail.sim.server.integration.consumer.itemloc.ItemLocCreateConsumer.handleMessage(Unknown Source)
at oracle.retail.sim.server.integration.consumer.SimMessageConsumerFactory.consume(Unknown Source)
... 56 more
我试图直接在PL / SQL输出中显示clob的结果,所以我使用以下查询:
select id, dbms_lob.substr(message_error, 4000, 1) AS ERROR_MESSAGE
from THE_TABLE;
我假装只选择包含'由...引起的行。串。我需要的是只提取以下错误信息:
Item not found for Id: 1101505002
只有选择语句可以这样做吗?
提前致谢, 最好的问候,
答案 0 :(得分:0)
以下查询(替换您的实际表名和列名)将提取一行文本,从单词Caused by
到该行的结尾。如果文本行以Caused by
开头并不重要 - 您只能获得从这些单词到行尾的所有内容。
如果你需要一个较短的子串,你需要更详细地解释它是如何被识别的" - 你如何决定可以遗漏什么以及必须返回什么。怎么划分?
select regexp_substr(message, 'Caused by:.*) as caused_line
from test_data;
(请注意,默认情况下,通配符.
不匹配Oracle中正则表达式的行尾。)