2017-02-02 71 views
0

我有一個表,其中一個字段是CLOB,它存儲錯誤消息信息。Oracle SQL:從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的結果,因此,使用下面的查詢IM:

select id, dbms_lob.substr(message_error, 4000, 1) AS ERROR_MESSAGE 
    from THE_TABLE; 

我假裝只選擇包含'Caused by ..'字符串的行。我需要的是提取只有以下錯誤信息:

Item not found for Id: 1101505002 

這是可能的,只有一個選擇語句?

由於提前, 最好的問候,

+0

向我們展示您的存儲過程 –

+0

喂,是不是程序,只是一個將用於報告提議的簡單查詢。 –

+0

那麼如果你沒有存儲過程,「PL/SQL輸出」來自哪裏呢? –

回答

0

下面的查詢(替換您的實際表和列名)將提取一行文本,自言Caused by到該行的末尾。如果文本行以Caused by開頭並不重要 - 您只能從這些單詞到行尾獲得所有內容。

如果您需要更短的子字符串,您需要更詳細地解釋它如何被「識別」 - 您如何確定可以省略什麼以及必須返回哪些內容。這是如何劃定的?

select regexp_substr(message, 'Caused by:.*) as caused_line 
from test_data; 

(注意,默認情況通配符.匹配在甲骨文正則表達式的結束行。)

+0

你好, 這樣做的工作,我用以下爲了使clob直接在輸出中可見,而不需要打開所有的clob文件: 'dbms_lob.substr(regexp_substr(message_error,'引起:。* '),4000,1)AS error_message' 謝謝,我不會試圖找到一種方法來從輸出中刪除**引起的:**。 –

相關問題