私はこれをC#で広範囲に実行していましたが、OldProgrammerがオラクルの例外を推奨し、トラップするだけで、面白かったメッセージトレースのビットを解析して、 DBMS_PIPE.PUT_MESSAGEは...戻ってクライアントに
を長いエラーメッセージを送信したいと私は周りにその古いコードのいずれかを持っていないが、それはこのようなものだった:私もそれを思い出す
try{
//code here that calls oracle, could explode
}catch(System.Data.OracleException oex){
string[] bits = oex.Message.Split('\n');
if(bits.Length < 0 && bits[0].Contains(':'))
MessageBox.Show(bits[0].Substring(bits[0].IndexOf(':') + 2));
else
MessageBox.Show(oex.Message);
}
a numerical argument to RAISE_APPLICATION_ERRORを渡すと、OracleExceptionの.Code
プロパティが変更され、そしてそれは、フロントエンドでの素敵なメッセージを置くために使用することができます
switch(oex.Code){
case 123456:
MessageBox.Show("First name is too long");
break;
case 234567:
MessageBox.Show("Last name is too long");
break;
...
}
では、Microsoftの1のではなく、OracleClientのデータアクセスライブラリを使用する場合の命名プレゼンテーション/プロパティなどに若干の違いがあるかもしれないことを覚えておいてください(私は今まで使用しますMS、そして私がコードを書いてから8年以上経ちましたが、この回答のいくつかがあいまいであれば謝ります)
「フロントエンド」が何であるか分かりません言う。メッセージの最初の行を解析するだけです。 – OldProgrammer
[SQLERRM](https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/sqlerrm_function.htm)を参照すると、この関数は完全なスタックではなく、最上位のエラー・メッセージのみを返します。 –