CLOBに含まれている複数行のフィールドで2行を照合しようとしています。ここで私が何をしようとしています何の例です:PL SQL内の複数行モード正規表現を使用した複数行にわたる一致
SELECT MULTI_LINE_TXT,
REGEXP_COUNT(MULTI_LINE_TXT, '^EVENT TYPE ID: 1$', 1, 'm') AS ID_1_CNT, --Works as expected
REGEXP_COUNT(MULTI_LINE_TXT, '^EVENT TYPE ID: 1$^Port3$', 1, 'm') AS PORT_3_ID_1_CNT --Does not work how I am hoping
FROM (SELECT 'EVENT TYPE ID: 1' || CHR(10) || 'Port3' || CHR(10) || 'EVENT TYPE ID: 2' || CHR(10) || 'Port3' || CHR(10) ||
'EVENT TYPE ID: 1' || CHR(10) || 'Port3' || CHR(10) || 'EVENT TYPE ID: 2' || CHR(10) || 'Port3' || CHR(10) ||
'EVENT TYPE ID: 1' || CHR(10) || 'Port4' || CHR(10) || 'EVENT TYPE ID: 2' || CHR(10) || 'Port4' AS MULTI_LINE_TXT
FROM DUAL)
出力例:
ROW | MULTI_LINE_TXT | ID_1_CNT | PORT_3_ID_1_CNT
---------------------------------------------------------------
1 | EVENT TYPE ID: 1 | 3 | 0
| Port3 | |
| EVENT TYPE ID: 2 | |
| Port3 | |
| EVENT TYPE ID: 1 | |
| Port3 | |
| EVENT TYPE ID: 2 | |
| Port3 | |
| EVENT TYPE ID: 1 | |
| Port4 | |
| EVENT TYPE ID: 2 | |
| Port4 | |
私が持っている最初の正規表現:
REGEXP_COUNT(MULTI_LINE_TXT, '^EVENT TYPE ID: 1$', 1, 'm') AS ID_1_CNT
カウントEVENT TYPE ID: 1
の事件のすべて予想通り。私が持っている問題は、次の行も参照しない限り、このイベントがどのポートに対応しているのかわかりません。
私はこのような何かやって次の行参照しようとしました:
REGEXP_COUNT(MULTI_LINE_TXT, '^EVENT TYPE ID: 1$^Port3$', 1, 'm') AS PORT_3_ID_1_CNT
をしかし、あなたは私の出力例で見ることができるように、それは私が期待していますように動作するようには思えないし、それは常に数を返します0の場合、2のカウントを期待しています。
誰かが私が間違っていることを知っていますか、これを解決しようとする可能性がある別の方法でしょうか?ありがとうございました!