我有一个名为TABLE的表,其中有一个名为MESSAGE的列。该列具有以下值:
returning: -1 -> java.sql.SQLException: ORA-20000: SAMPLETEXTORA-06512
returning: -1 -> java.sql.SQLException: ORA-20000: SAMPLETEXT1ORA-O6512
returning: -1 -> java.sql.SQLException: ORA-01403: NO data availableORA-06512
returning: -1 -> java.sql.SQLException: ORA-20001: errorORA-06512
字符串
我想使用一个Oracle sql查询来解析数据,并获得一个名为Error_code的列,其中包含错误代码,以及一个Error_message,其中包含第一个ORA和第二个ORA之间的消息。
预期结果:
Error_code Error_message
ORA-20000 SAMPLETEXT
ORA-20000 SAMPLETEXT1
ORA-01403 NO data available
ORA-20001: error
型
我使用了以下查询:
SELECT
REGEXP_SUBSTR(message, 'ORA-[0-9]+') AS Error_Code,
REGEXP_SUBSTR(message, '(?<=ORA-[0-9]+: ).*(?<=ORA)', 1, 1, 'n') AS Error_Message
FROM TABLE
型
返回结果:
Error_code Error_message
ORA-20000
ORA-20000
ORA-01403
ORA-20001
型
3条答案
按热度按时间ddarikpa1#
如果它不一定是正则表达式解决方案,旧的
substr + instr
组合在大型数据集上会表现得更好。样本数据:
字符串
查询:
型
ewm0tg9j2#
您可以从**:的最后一次出现开始,到
[^: ]
,并将部分取到最后+$
**,例如字符串
如果列的数据模型在整个表中相同,
2nbm6dog3#
这是一个参考。
对于 Error_Code,使用 match pattern。
字符串
对于 Error_Message,使用 capture pattern。
型