2014-10-06 53 views
0

我想有一个PostgreSQL扩展函数,它可以首先检查表中是否有一行face_area(face int,area float),如果没有,则计算并插入表中。返回应该是area(float),输入应该是face(int)。我在下面写了一个函数,但结果只能是float,我该如何修改函数让返回的结果只是一个浮点数?我该如何修改这个pl/pgsql函数?

CREATE FUNCTION get_area (face integer) RETURNS setof float AS $$ 
BEGIN 
RETURN query SELECT area FROM face_area WHERE face_area.face=$1; 
IF NOT FOUND THEN 
    INSERT INTO face_area VALUES ($1,calc_area($1)); 
END IF;   
END; 
$$ LANGUAGE plpgsql; 

select get_area(1); 
select * from face_area; 
+0

你能澄清WHERE子句吗?你将face_area描述为(id int,area float),但使用列“face”...? – 2014-10-06 14:58:15

+0

@AndrewWolfe我修改了它。 – user3419945 2014-10-06 14:59:51

+0

另外,为什么SETOF浮动?为什么你需要返回查询结果? – 2014-10-06 15:10:39

回答

1

试试这个:

CREATE or replace FUNCTION get_area (face integer) RETURNS float AS $$ 
DECLARE 
     RSLT float; 
BEGIN 
SELECT area into rslt FROM face_area WHERE face_area.face=$1; 
IF NOT FOUND THEN 
    rslt := calc_area ($1); 
    INSERT INTO face_area VALUES ($1,rslt); 
END IF; 
return rslt; 
END; 
$$ LANGUAGE plpgsql; 

你需要有一个return语句。我在RSLT变量中添加了计算区域值并返回它。

+0

谢谢,这是我需要的。 – user3419945 2014-10-06 15:51:17