在PHP中解析Oracle异常错误消息

时间:2014-01-15 10:10:23

标签: php regex oracle parsing exception

我正在尝试打印从Oracle的RAISE_APPLICATION_ERROR方法返回的异常消息。

我可以用

显示该异常消息
$exc->errorInfo[2]

但是,该消息中有一些文本不应该向最终用户显示。 以下是示例异常消息:

  

OCIStmtExecute:ORA-20001:我的错误MESSAGE ORA-06512:at“MYDB.PACKAGE”,第78行ORA-06512:第1行(/tmp/pear/download/PDO_OCI-1.0/oci_statement.c:142)

除了使用preg_replace()解析此文本之外,还有更好的方法吗?

如果不是,你能否建议在正则表达式中使用任何模式。

我有这个工作,但它不是理想的解决方案:

    $parse1 = explode('ORA-', $exc);
    $parse2 = explode(':', $parse1[1]);
    return $parse2[1];

2 个答案:

答案 0 :(得分:2)

我有一个你可以使用的模式。这取决于您希望从错误消息中删除多少。


^.*?ORA-\d*:\s*([^,]*).*$

此正则表达式将产生以下

  

我的错误MESSAGE ORA-06512:at“MYDB.PACKAGE”


^.*?ORA-\d*:\s*([^:]*).*$

此正则表达式将产生以下

  

我的错误MESSAGE ORA-06512


Regex101 Example

答案 1 :(得分:0)

您可以使用:

preg_match('~ORA-[0-9]+: \K.*?(?=ORA-[0-9]+:)~u', $str, $match);
echo $match[0];