我正在尝试打印从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];
答案 0 :(得分:2)
我有一个你可以使用的模式。这取决于您希望从错误消息中删除多少。
^.*?ORA-\d*:\s*([^,]*).*$
此正则表达式将产生以下
我的错误MESSAGE ORA-06512:at“MYDB.PACKAGE”
^.*?ORA-\d*:\s*([^:]*).*$
此正则表达式将产生以下
我的错误MESSAGE ORA-06512
答案 1 :(得分:0)
您可以使用:
preg_match('~ORA-[0-9]+: \K.*?(?=ORA-[0-9]+:)~u', $str, $match);
echo $match[0];