Как прочитать строку из БД и выполнить как запрос?
Задача: Есть таблица продуктов
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