Вы можете объединить EXECUTE FORMAT
и условие IF
, используя GET DIAGNOSTICS
Вот пример, который вы можете использовать повторно с минимальными изменениями. Я передал имя таблицы, используя идентификатор %I
и параметризованный аргумент ($1
) для employee_id
.Это безопасно для SQL-инъекций. LIMIT 1
используется, так как нас интересует, существует ли хотя бы одна строка.Это повысит производительность запросов и будет эквивалентно (или эффективно) использованию EXISTS
для огромных наборов данных с несколькими совпадающими строками.
DO $$
DECLARE
some_table TEXT := 'employees';
m_emp_id INT := 100;
cnt INT;
BEGIN
EXECUTE format ('select 1
from %I where employee_id
= $1 LIMIT 1',some_table ) USING m_emp_id ;
GET DIAGNOSTICS cnt = ROW_COUNT;
IF cnt > 0
THEN
RAISE NOTICE 'FOUND';
ELSE
RAISE NOTICE 'NOT FOUND';
END IF;
END
$$;
Результат
NOTICE: FOUND
DO