Możesz sprawdzić specjalną zmienną FOUND typu boolean. Z dokumentacji:
FOUND zaczyna fałsz w każdym wywołaniu funkcji PL / pgSQL. Ustawia go każdy z następujących typów instrukcji:
Instrukcja SELECT INTO ustawia ZNALEZIONO true, jeśli wiersz jest przypisany, false, jeśli żaden wiersz nie jest zwracany.
Instrukcja PERFORM ustawia ZNALEZIONĄ wartość true, jeśli produkuje (i odrzuca) jeden lub więcej wierszy, fałsz, jeśli żaden wiersz nie jest generowany.
Instrukcje UPDATE, INSERT i DELETE ustawiają FUNDACJA na true, jeśli ma to wpływ na co najmniej jeden wiersz, false, jeśli nie ma to wpływu na żaden wiersz.
Instrukcja FETCH ustawia ZNALEZIONĄ wartość true, jeśli zwraca wiersz, fałsz, jeśli żaden wiersz nie jest zwracany.
Instrukcja MOVE ustawia ZNALEZIONO wartość true, jeśli z powodzeniem zmienia położenie kursora, w przeciwnym razie wartość false.
Instrukcja FOR lub FOREACH ustawia ZNALEZIONĄ wartość true, jeśli iteruje jeden lub więcej razy, w przeciwnym razie fałsz. FOUND jest ustawiany w ten sposób, gdy pętla wychodzi; wewnątrz wykonywania pętli FOUND nie jest modyfikowany przez instrukcję pętli, chociaż może zostać zmieniony przez wykonanie innych instrukcji w treści pętli.
RETURN QUERY i RETURN QUERY EXECUTE instrukcje ustawione FUNDACJA true, jeśli zapytanie zwraca co najmniej jeden wiersz, false, jeśli żaden wiersz nie jest zwracany.
Inne instrukcje PL / pgSQL nie zmieniają stanu FUNDACJI. W szczególności zauważ, że EXECUTE zmienia dane wyjściowe GET DIAGNOSTICS, ale nie zmienia FOUND.
FOUND jest lokalną zmienną w ramach każdej funkcji PL / pgSQL; wszelkie zmiany w nim wpływają tylko na bieżącą funkcję.
select into
że nie zwraca żadnych danych, nadal spowoduje wyjątek, prawda?