#sql #database #postgresql
#sql #База данных #postgresql
Вопрос:
Я хотел бы создать таблицу, содержащую формулы. Этим формулам будет передан некоторый идентификатор, на основе которого я хотел бы, чтобы они выполняли запрос SELECT для определенной таблицы, вычисляли значение ДВОЙНОЙ ТОЧНОСТИ из результатов запроса и возвращали значение (базовый запрос всегда один и тот же, но способ, которым эти функции обрабатывают значения, отличается).
Эти функции будут предопределены, они не должны быть анонимными.
Здесь два вопроса:
- возможна ли такая функция с plpgsql?
- как мне создать такую таблицу? Какие данные должен содержать столбец, чтобы я мог помещать туда функции?
UPD
https://postgrespro.ru/docs/postgresql/9.6/plpgsql-statements?lang=en Я нашел решение типа EXECUTE <string> USING <parameters>
, так что формула может быть сохранена как VARCHAR, и может быть только одна функция, которая принимает VARCHAR в качестве формулы.
Если это сработает, я опубликую это как ответ.
Комментарии:
1. Какой диалект SQL вы используете? IIRC нет
USING
в postgesEXECUTE
2. @wildplasser
USING
существует вplpgsql
формеEXECUTE
, о чем говорит @winwin .3. Нет, у вас не может быть функции, которая выполняет то, что вы хотите, в качестве столбца. Есть сгенерированные столбцы, но они работают только со значениями в строке. Чтобы сделать то, что вы хотите, вам нужно будет создать триггерную функцию и триггер, который вызывает соответствующую таблицу.
Ответ №1:
Такая таблица называется представлением:
CREATE VIEW myview AS
SELECT id,
column1,
myfunc1(id) AS column2,
myfunc2(id) AS column3
FROM mytable;