2017-08-16 41 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 

我想只發送錯誤消息的第一行。如何避免接下來的兩行消息?

在此先感謝。

+4

既然我們不知道你的「前端」是什麼,說。只是解析消息的第一行,不是? – OldProgrammer

+0

查看[SQLERRM](https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/sqlerrm_function.htm),該函數僅返回最上面的錯誤消息,而不是完整的堆棧。 –

回答

0

我曾經在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年了,所以,如果某些答案有點模糊,請致歉)

相關問題