2017-08-16 10 views
0

raise_application_errorメッセージを手順から単独で送信するにはどうすればよいですか?フロントエンドにのみRaise_application_errorメッセージを送信するにはどうすればよいですか?

ORA-20343: ERROR - FIRST_NAME IS MISSING and LAST_NAME IS MISSING 
ORA-06512: at "quality.pkg_quality_check", line 113 
ORA-06512: at line 28 

エラーメッセージの最初の行のみを送信します。メッセージの次の2行を避けるには?

ありがとうございます。

+4

「フロントエンド」が何であるか分かりません言う。メッセージの最初の行を解析するだけです。 – OldProgrammer

+0

[SQLERRM](https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/sqlerrm_function.htm)を参照すると、この関数は完全なスタックではなく、最上位のエラー・メッセージのみを返します。 –

答えて

0

私はこれを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年以上経ちましたが、この回答のいくつかがあいまいであれば謝ります)

関連する問題