我们的 C++ 程序使用 Oracle 和 OCI 来完成它的数据库工作。有时,用户会触发约束冲突,我们会检测到它,然后显示来自 OCIErrorGet 的错误消息。OCIErrorGet 返回如下字符串:
ORA-02292: integrity constraint (MYSCHEMA.CC_MYCONSTRAINT) violated - child record found
ORA-06512: at line 5
我正在寻找从 Oracle 错误中提取“MYSCHEMA.CC_MYCONSTRAINT”的最简洁方法。知道约束的名称,我可以显示更好的错误消息(如果我们的代码可以访问约束名称,它可以查找非常有意义的错误消息)。
我可以使用正则表达式或其他东西并假设 Oracle 消息永远不会改变,但这对我来说似乎有点脆弱。或者我可以查找特定的 ORA 代码,然后抓取括号之间的任何文本。但我希望 OCI 有一种更简洁/更健壮的方式,如果约束失败,可以在不诉诸硬编码字符串操作的情况下找出失败约束的实际名称。
有任何想法吗?