2012-04-02 6 views
0

Мне нужна функция вызова в представлении для разрешения виртуального столбца. Вычисление зависит от данных в фактической строке и не требует многократного выбора данных. Это верно?? И как бонус, возможна ли функция вызова в другом?Как вызвать функцию в представлении

CREATE VIEW my_view AS SELECT c.column1,c.columns2,... my_function(c) FROM my_table c 

CREATE VIEW my_view AS SELECT c.money, c.quantity,... my_ratio_function(c.money,c.quantity,select sum_all_pays(my_view)) FROM my_table c 

примечание. Я здесь, потому что, когда искал, не могу найти это. Если у вас есть другие идеи, поставьте его. Вторая команда не уверена, что это правильно.

+0

Почему бы вам не проверить его? Чем вы это знаете. И ПРОСМОТР - это просто жестко запрограммированный SELECT. –

ответ

1

Это хорошо, чтобы использовать функции в определении представления. Единственное ограничение - вы всегда должны указывать явное имя столбцу, который на самом деле является вызовом функции, иначе PostgreSQL не знает, как представить определение представления.

Тем не менее, вы не можете ссылаться на представление изнутри представления. Вместо этого вы можете создать 2 представления, затем вы можете ссылаться на внутреннюю часть из внешнего вида. Другой подход - использовать WITH construct, который я считаю очень удобным и много использую.

Обратите внимание: этот вид представляет собой только SQL-сервер, и функции будут вызываться для каждой строки каждый раз, когда вы будете запрашивать представление. Чтобы получить некоторые улучшения производительности, вы можете определить свои функции как IMMUTABLE or as STABLE.

И я согласен с Фрэнком - пройдите и проверьте свои взгляды.

Смежные вопросы