2014-10-06 2 views
0

테이블에 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; 
+0

WHERE 절을 명확히 할 수 있습니까? 당신은 (id int, area float)로 face_area를 기술하지만 "face"란을 사용하면 ...? –

+0

@AndrewWolfe 나는 그것을 개정했다. – user3419945

+0

왜 SETOF가 떠 다니는가? 왜 조회 결과를 리턴해야합니까? –

답변

1

이 시도 : 당신은 RETURN 문이 필요

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; 

. 계산 된 영역 값을 보유하고 반환하는 RSLT 변수를 추가했습니다.

+0

감사합니다. 이것이 내가 필요한 것입니다. – user3419945

관련 문제