Ви можете вивчити спеціальну змінну FOUND булевого типу. З документації:
FOUND починається помилковим у межах кожного виклику функції PL / pgSQL. Він встановлюється кожним із наступних типів висловлювань:
Оператор SELECT INTO встановлює значення FOUND true, якщо присвоюється рядок, false, якщо рядок не повертається.
Оператор PERFORM встановлює FOUND true, якщо він створює (і відкидає) один або декілька рядків, false, якщо жоден рядок не створюється.
Операції UPDATE, INSERT та DELETE встановлюють FOUND true, якщо принаймні один рядок зачіпається, false, якщо жодна рядок не впливає.
Оператор FETCH встановлює FOUND true, якщо він повертає рядок, false, якщо жоден рядок не повертається.
Оператор MOVE встановлює FOUND true, якщо він успішно переставляє курсор, в іншому випадку false.
Оператор FOR або FOREACH встановлює значення FOUND true, якщо воно повторюється один чи більше разів, в іншому випадку false. FOUND встановлюється таким чином, коли цикл виходить; всередині виконання циклу FOUND не змінюється оператором циклу, хоча це може бути змінено виконанням інших операторів у тілі циклу.
ЗВЕРНІТЬ ЗАПИТУВАННЯ та ВЗАЄМНУВАННЯ ЗАВДАННЯ ВИКОНАННЯ встановіть FOUND true, якщо запит повертає принаймні один рядок, false, якщо жоден рядок не повертається.
Інші заяви PL / pgSQL не змінюють стан FOUND. Зокрема, зауважте, що EXECUTE змінює вихід GET DIAGNOSTICS, але не змінює FOUND.
FOUND - локальна змінна в межах кожної функції PL / pgSQL; будь-які зміни в ньому впливають лише на поточну функцію.
select into
те, що повертає ніякі дані, все одно призведе до виключення, правда?