我曾經在C#中做過這麼廣泛的工作,因爲OldProgrammer建議並且只是捕獲OracleException,然後解析出有趣的消息跟蹤位,而不是搞東西像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;
...
}
請記住,如果你使用OracleClient的數據訪問庫,而不是微軟的一個有可能在演示/屬性命名等細微的差別(我只用過MS,自從我在c#/ oracle中編寫代碼以來,至少已經有8年了,所以,如果某些答案有點模糊,請致歉)
既然我們不知道你的「前端」是什麼,說。只是解析消息的第一行,不是? – OldProgrammer
查看[SQLERRM](https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/sqlerrm_function.htm),該函數僅返回最上面的錯誤消息,而不是完整的堆棧。 –