Как прочитать строку из БД и выполнить как запрос?

Задача: Есть таблица продуктов

CREATE TABLE Products (
    productId UUID NOT NULL,
    name VARCHAR(256) NOT NULL,
    price NUMERIC(16, 6) NOT NULL,
    shop VARCHAR(256) NOT NULL,
    PRIMARY KEY(productId)
);

и таблица в которой хранятся фильтры к продуктам

CREATE TABLE Filters (
    sqlQuery VARCHAR(2096) NOT NULL
);

поле sqlQuery хранит sql запрос для выборки продуктов, который представляет собой select * from Products where какое-то сложное условие.

Необходимо найти все фильтры, которым соответствует хотя бы один продукт имя которого находится в заданном массиве.

Что не получается: попытался решить задачу одним динамическим запросом

select * from Filters
    where exists (
        /*Вот тут хотелось бы обратиться к полю Filters.sqlQuery и выполнить его как запрос*/
    );

Но собственно не знаю как сделать то, что описано в комментарии запроса выше.

UPD

решил использовать подход описанный в одной из ссылок в комментариях:
1.Создаем параметризованный запрос

select * from Filters where existProductsForFilter(?, Filters.sqlQuery)

2.И реализуем процедуру existProductsForFilter:

CREATE FUNCTION existProductsForFilter(
          productNames VARCHAR(256)[], filterQuery VARCHAR(2096))
    RETURNS BOOLEAN
    LANGUAGE plpgsql
    AS $BODY$
BEGIN
    RETURN EXISTS (
        SELECT * FROM EXECUTE filterQuery AS P
            WHERE P.category = ANY(productCategories)
    );
END;
$BODY$;

Но создать эту процедуру не получается - выскакиает ошибка
ERROR: ОШИБКА: ошибка синтаксиса (примерное положение: "EXECUTE")
LINE 7: WITH P AS EXECUTE filterQuery


Ответы (0 шт):