2012-04-02 79 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

你为什么不测试它?比你知道的。而一个VIEW只是一个硬编码的SELECT。 – 2012-04-02 10:09:38

回答

1

在视图定义中使用函数是很好的。唯一的约束 - 你应该总是给一个实际上是函数调用的列提供一个明确的名字,否则PostgreSQL不知道如何呈现一个视图定义。

不过,您不能从视图内引用视图。相反,您可以创建2个视图,然后您可以从外部视图引用内部视图。另一种方法是使用WITH construct,我发现它非常方便并且使用很多。

请注意,该视图只是一个服务器存储的SQL,并且每次查询视图时都会为每行调用函数。为了获得一些性能改进,你可能想要定义你的函数为IMMUTABLE or as STABLE

我同意弗兰克 - 继续并测试您的观点。

相关问题