2017-08-16 3 views
0

Wie kann die Nachricht raise_application_error allein von der Prozedur gesendet werden?Wie kann Raise_application_error nur an das Frontend gesendet werden?

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 

Ich möchte nur die erste Zeile der Fehlermeldung senden. Wie vermeidet man die nächsten zwei Zeilen der Nachricht?

Vielen Dank im Voraus.

+4

Da wir nicht wissen, was Ihr "Front-End" ist, schwer sagen. Einfach die erste Zeile der Nachricht auslesen, nein? – OldProgrammer

+0

Werfen Sie einen Blick auf [SQLERRM] (https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/sqlerrm_function.htm), diese Funktion gibt nur die oberste Fehlermeldung zurück, nicht den vollständigen Stapel. –

Antwort

0

Ich habe dies ausgiebig in C# getan, und es war immer einfacher zu tun, wie OldProgrammer empfiehlt und nur die OracleException abfangen und dann das Bit der Nachricht Trace, die interessant war, aussortieren, anstatt mit Sachen herumzualbern wie DBMS_PIPE.PUT_MESSAGE Nachrichten langwierige Fehler an den Client ...

ich jede um diesen alten Code nicht habe zurück zu senden, aber es war so etwas wie diese:

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); 

} 

ich erinnere mich auch, dass Sie könnten a numerical argument to RAISE_APPLICATION_ERROR übergeben und es würde die .Code Eigenschaft der OracleException ändern, und die verwendet werden könnten nette Nachrichten im vorderen Ende zu setzen:

switch(oex.Code){ 
    case 123456: 
    MessageBox.Show("First name is too long"); 
    break; 
    case 234567: 
    MessageBox.Show("Last name is too long"); 
    break; 
... 
} 

Denken Sie daran, dass es möglicherweise leichte Unterschiede in der Präsentation/Eigenschaft seine Benennung etc, wenn Sie OracleClient Datenzugriffsbibliothek verwenden, anstatt Microsoft ein (ich immer nur verwendet MS, und es ist mindestens 8 Jahre her, seit ich Code in C# geschrieben habe/Oracle-Paar so Entschuldigungen, wenn einige dieser Antwort ein wenig unscharf ist)

Verwandte Themen