Могу ли я использовать функции в качестве данных для столбца?

#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 в postges EXECUTE

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;