Sie können eine spezielle Variable FOUND vom Typ Boolean untersuchen. Aus der Dokumentation:
FOUND fängt bei jedem PL / pgSQL-Funktionsaufruf mit false an. Es wird von jedem der folgenden Anweisungstypen festgelegt:
Eine SELECT INTO-Anweisung setzt FOUND auf true, wenn eine Zeile zugewiesen ist, und auf false, wenn keine Zeile zurückgegeben wird.
Eine PERFORM-Anweisung setzt FOUND auf true, wenn sie eine oder mehrere Zeilen erzeugt (und verwirft), false, wenn keine Zeile erzeugt wird.
UPDATE-, INSERT- und DELETE-Anweisungen setzen FOUND auf true, wenn mindestens eine Zeile betroffen ist, false, wenn keine Zeile betroffen ist.
Eine FETCH-Anweisung setzt FOUND auf true, wenn eine Zeile zurückgegeben wird, und auf false, wenn keine Zeile zurückgegeben wird.
Eine MOVE-Anweisung setzt FOUND auf true, wenn der Cursor erfolgreich neu positioniert wurde, andernfalls auf false.
Eine FOR- oder FOREACH-Anweisung setzt FOUND auf true, wenn sie einmal oder mehrmals wiederholt wird, andernfalls auf false. FOUND wird beim Verlassen der Schleife auf diese Weise eingestellt. Während der Ausführung der Schleife wird FOUND von der Anweisung loop nicht geändert, obwohl dies möglicherweise durch die Ausführung anderer Anweisungen innerhalb des Schleifenkörpers geändert wird.
Die Anweisungen RETURN QUERY und RETURN QUERY EXECUTE setzen FOUND auf true, wenn die Abfrage mindestens eine Zeile zurückgibt, und auf false, wenn keine Zeile zurückgegeben wird.
Andere PL / pgSQL-Anweisungen ändern den Status von FOUND nicht. Beachten Sie insbesondere, dass EXECUTE die Ausgabe von GET DIAGNOSTICS ändert, jedoch nicht FOUND.
FOUND ist eine lokale Variable in jeder PL / pgSQL-Funktion. Änderungen daran wirken sich nur auf die aktuelle Funktion aus.
select into
wenn keine Daten zurückgegeben werden, wird trotzdem eine Ausnahme ausgelöst, oder?