2015-12-04 3 views
6

Ich habe einige Verfahren in Oracle geschrieben. Leider kann ich seinen Code nicht zeigen. Irgendwo in diesem Bereich wird ausgewählt, wo die Ausführung aufgrund fehlender erforderlicher Daten abgestürzt ist. Es sieht aus wie diesesUnterschied zwischen Orakel Aufruf und Ausführung im Zusammenhang mit Fehler werfen

select value into l_value 
     from config 
     where code = upper(p_code); 

Also, wenn ich dieses Verfahren wie folgt aufrufen (in sqldeveloper)

execute some_package.some_procedure('CODE'); 

es

Error report - 
ORA-01403: no data found 
ORA-06512: at "XXXXXXXXXXXXXXXXXXX", line 111 
ORA-06512: at "XXXXXXXXXXXXXXXXXXX", line 111 
ORA-06512: at line 1 
01403. 00000 - "no data found" 
*Cause: No data was found from the objects. 
*Action: There was no data from the objects which may be due to end of fetch. 

wirft Aber wenn ich es wie diese

call some_package.some_procedure('CODE'); 
nennen

es stürzt bei th ab Der gleiche Ort (wie ich aus dem Ergebnis vorschlagen kann, in DB gespeichert), aber es wirft keine Ausnahme.

some_package.some_procedure('CODE') succeeded. 

Was passiert? Und warum gibt es einen solchen Unterschied?

Antwort

12

NO_DATA_FOUND Ausnahmeverhalten ist speziell. Es wird standardmäßig im SQL-Kontext behandelt, nicht jedoch in PL/SQL. In SQL werden keine gefundenen Daten nicht als Fehler betrachtet, sondern immer dann, wenn keine Daten vorliegen, die bestimmte Bedingungen erfüllen.

CALL ist SQL-Befehl, während EXEC eine Verknüpfung für BEGIN <code> END; ist, die PL/SQL ist.

Verwandte Themen