Puoi esaminare una variabile speciale TROVATA di tipo booleano. Dalla documentazione:
FOUND inizia falso all'interno di ogni chiamata di funzione PL / pgSQL. È impostato da ciascuno dei seguenti tipi di dichiarazioni:
Un'istruzione SELECT INTO imposta FOUND true se viene assegnata una riga, false se non viene restituita alcuna riga.
Un'istruzione PERFORM imposta FOUND true se produce (e scarta) una o più righe, false se non viene prodotta alcuna riga.
Le istruzioni UPDATE, INSERT e DELETE impostano FOUND true se almeno una riga è interessata, false se nessuna riga è interessata.
Un'istruzione FETCH imposta FOUND true se restituisce una riga, false se non viene restituita alcuna riga.
Un'istruzione MOVE imposta FOUND true se riposiziona correttamente il cursore, false in caso contrario.
Un'istruzione FOR o FOREACH imposta FOUND true se scorre una o più volte, altrimenti false. TROVATO è impostato in questo modo all'uscita dal loop; all'interno dell'esecuzione del loop, FOUND non viene modificato dall'istruzione loop, sebbene possa essere modificata dall'esecuzione di altre istruzioni all'interno del corpo del loop.
Le istruzioni RETURN QUERY e RETURN QUERY EXECUTE impostano FOUND true se la query restituisce almeno una riga, false se non viene restituita alcuna riga.
Altre istruzioni PL / pgSQL non cambiano lo stato di FOUND. Si noti in particolare che EXECUTE modifica l'output di GET DIAGNOSTICS, ma non cambia FOUND.
TROVATO è una variabile locale all'interno di ciascuna funzione PL / pgSQL; qualsiasi modifica ad esso influisce solo sulla funzione corrente.
select into
che non restituisce dati genererà comunque un'eccezione, giusto?