2011-09-06 11 views
6

Devo selezionare in una variabile locale solo se esistono dati.PL/SQL selezionare - se i dati esistono

SELECT column1 INTO local_variable FROM table1 where column2 = <condition>; 

Qui se non ci sono dati corrispondenti alla condizione, ricevo un errore di nessun dato trovato.

Ho bisogno di selezionare nella variabile locale solo se ci sono alcuni dati corrispondenti alla condizione. C'è una semplice domanda che risolverà il mio problema.

risposta

12

Probabilmente il modo migliore è quello di gestire NO_DATA_FOUND

begin 
    SELECT column1 INTO local_variable 
    FROM table1 where column2 = p_val; 
exception 
    when no_data_found then 
    local_variable := null; 
end; 

Inoltre, se si selezionano con il tasto chiave primaria/unico (cioè column2 è unico), allora c'è un trucco che si può fare

SELECT max(column1) INTO local_variable 
    FROM table1 where column2 = p_val; 
+0

Perché max() necessaria? – shawnt00

+0

Non si otterrà no_data_found quando si seleziona max(), si otterrà semplicemente un valore nullo quando non esiste alcuna riga 'dove column2 = p_val'. Quindi questo è solo un trucco che può essere usato per difendersi dall'eccezione no_data_found, anche se credo che sia meglio gestire questa eccezione in modo esplicito. – bpgergo

1

Bene ... eseguire un conteggio prima di effettuare la selezione. O semplicemente gestisci l'eccezione no_data_found.

È possibile aprire un cursore a prendere le righe, fare un conteggio e se è maggiore di 0 poi fare le tue cose con quel disco

Problemi correlati