我该如何修改这个pl / pgsql函数?

时间:2014-10-06 14:54:13

标签: postgresql

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

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;

1 个答案:

答案 0 :(得分: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变量中添加了保存计算区域值并返回它。