2015-12-04 35 views
6

Ho una procedura scritta in Oracle. Purtroppo non posso mostrare il suo codice. Da qualche parte all'interno è selezionato dove l'esecuzione si è arrestata a causa dell'assenza di dati richiesti. Sembra che questoDifferenza tra chiamata oracle ed esecuzione nel contesto del lancio degli errori

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

Così, quando io chiamo questa procedura come questa (in sqldeveloper)

execute some_package.some_procedure('CODE'); 

getta

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. 

Ma quando io lo chiamo come questo

call some_package.some_procedure('CODE'); 

si blocca a Lo stesso posto (come posso suggerire dal risultato, memorizzato in DB), ma non fa eccezione.

some_package.some_procedure('CODE') succeeded. 

Cosa succede? E perché c'è una tale differenza?

risposta

12

NO_DATA_FOUND comportamento di eccezione è speciale. Viene gestito per impostazione predefinita nel contesto SQL ma non in PL/SQL. In SQL nessun dato trovato non è considerato come un errore, accade sempre che non ci siano dati che soddisfano determinate condizioni.

CALL è un comando SQL mentre EXEC è un collegamento per BEGIN <code> END; che è PL/SQL.