【发布时间】:2014-10-01 17:10:18
【问题描述】:
我目前正在学习 postgresql 并且有一个菜鸟问题。如果我有一个像这样的简单表格:
CREATE TABLE rectangle
(
width int,
length int
);
还有这样的功能:
CREATE OR REPLACE FUNCTION Area()
RETURNS int AS $area$
declare
area int;
BEGIN
SELECT (width*length) into area FROM rectangle;
return area ;
END;
$area$ LANGUAGE plpgsql;
我这样称呼它:
select width, length, area() from rectangle;
我得到这样的结果:
width | length | area
-------------------------
2 | 3 | 6
4 | 3 | 6
5 | 2 | 6
这表明 area 函数正在工作,但它只使用表中的第一个条目,而不是相应的行。我究竟做错了什么。提前致谢!
【问题讨论】:
-
您假设该函数将“知道”它在一行中,因此使用该行。
Not true.该函数独立于行,您必须将行中的值“传递”到该函数中。虽然这可能只是一个简单的示例,但您不需要为此使用函数,您应该直接在查询中使用 (width*length) -
我明白我做错了什么。所以一般来说最好为函数发送
pk并添加WHERE -
你为什么使用
select width,length,(length*width) as area from rectangle>> ??这不是实施Function的好情况 -
"一般来说..." mmm,
not really,下面的示例函数都从长度或宽度的任何物理实现中“抽象”了面积计算,因此该函数可用于任何相关情况。如果您基于 PK 的功能,则该功能只能在一种情况下使用。另请注意,在下面的示例函数中,它们不需要使用select,因为您传递了已经选择的长度和宽度。传递一个 pk 需要另一个选择,这不是很好。
标签: sql function postgresql parameters