私たちの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にあることを望んでいました。
何か案は?