테이블에 face_area (face int, area float)에 행이 있는지 먼저 확인할 수있는 PostgreSQL 확장 기능을 갖고 싶습니다. 아무 것도 없으면 계산하고 테이블에 삽입하십시오. 리턴 값은 영역 (float)이어야하고, 입력은면 (int)이어야합니다. 아래에 함수를 작성했지만 그 결과는 setof float가 될 수 있습니다. 반환하는 결과가 단 하나의 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;
WHERE 절을 명확히 할 수 있습니까? 당신은 (id int, area float)로 face_area를 기술하지만 "face"란을 사용하면 ...? –
@AndrewWolfe 나는 그것을 개정했다. – user3419945
왜 SETOF가 떠 다니는가? 왜 조회 결과를 리턴해야합니까? –