【问题标题】:Parse Oracle Exception Error Message in PHP在 PHP 中解析 Oracle 异常错误消息
【发布时间】:2014-01-15 10:10:23
【问题描述】:

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

我可以用

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

但是,该消息中的某些文本不应显示给最终用户。 这是示例异常消息:

OCIStmtExecute:ORA-20001:我的错误消息 ORA-06512:在“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];

【问题讨论】:

  • 你能告诉我们你期望的输出吗
  • @Gaurav 只是我的错误消息

标签: php regex oracle parsing exception


【解决方案1】:

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


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

这个正则表达式将产生以下结果

我的错误消息 ORA-06512: at "MYDB.PACKAGE"


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

这个正则表达式将产生以下结果

我的错误消息 ORA-06512


Regex101 Example

【讨论】:

  • 我的错误信息可以是任何东西。我不能将它用作 preg_match 的模式。
  • 如果我要进行准确匹配的正则表达式,我需要了解有关这些错误消息的更多信息,哪些部分会发生变化?哪些部分是一致的?
  • 消息将始终在 OCIStmtExecute: ORA-20001: 但 20001 可能会更改之后。
【解决方案2】:

你可以用这个:

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

【讨论】:

  • 我不知道为什么这对我不起作用。如果我向此函数提供 $str 则它不起作用,但如果我将错误消息字符串放在引号而不是 $str 内它会起作用
  • @jCloud:当然$str代表你的错误信息字符串!
  • 我知道。这就是我所说的。我以前从未见过这样的事情。看:如果我使用 preg_match('~ORA-[0-9]+: \K.*?(?=ORA-[0-9]+:)~', $str, $match);它不工作。我将我的错误交给 $str。但是如果我使用 preg_match('~ORA-[0-9]+: \K.*?(?=ORA-[0-9]+:)~', 'OCIStmtExecute: ORA-20001: My error MESSAGE ORA- 06512:在“MYDB.PACKAGE”,第 78 行 ORA-06512:在第 1 行 (/tmp/pear/download/PDO_OCI-1.0/oci_statement.c:142)',$match);它有效,但我需要 $str 是动态的。你懂吗?如果它是动态的(来自变量)它会失败,
  • 如果它是静态的(我手动放置文本代替 $str )它可以工作
  • 尝试使用除$str之外的另一个变量名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 2012-05-08
  • 2023-03-26
相关资源
最近更新 更多