我目前正在学习postgresql
并且有一个noob问题。如果我有这样一个简单的表:
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
这表明区域功能正在运行但它只使用表中的第一个条目而不是相应的行。我究竟做错了什么。提前致谢!
答案 0 :(得分:3)
CREATE OR REPLACE FUNCTION Area(integer, integer)
RETURNS int AS $area$
declare
area int;
BEGIN
SELECT ($1 * $2) into area ;
return area ;
END;
$area$ LANGUAGE plpgsql;
然后查询:
select width, length, area(width, length) from rectangle;
答案 1 :(得分:1)
在您的函数中,您将从表中的一个未确定的行中获取值。有必要将参数传递给函数
create or replace function area (
width int, length int
) returns int as $area$
select width * length;
$area$ language sql;
它可以是简单的SQL。
答案 2 :(得分:0)
效率更高:
CREATE OR REPLACE FUNCTION Area(integer, integer)
RETURNS int AS
$body$
BEGIN
return ($1 * $2) ;
END;
$body$
LANGUAGE plpgsql
IMMUTABLE;
原因: