2012-12-11 5 views
0

나는이 포스트 그레스 데이터베이스에 다음과 같은 기능 :포스트 그레스에 결과가없는 경우 여러 기본값을 반환하는 방법은 무엇입니까?

CREATE OR REPLACE FUNCTION getNearestPoints(float[], float[], float[], float[], int)  
        RETURNS SETOF record AS $$                  
       DECLARE                        
        i INT;                       
        ret RECORD;  
       BEGIN                        
        FOR i IN 1..$5 LOOP                    
         FOR ret IN EXECUTE 'SELECT height, ST_Y(point), ST_X(point) FROM heights     
         WHERE ST_Intersects(ST_MakeEnvelope(' || $1[i] || ',' || $2[i] || ',' || $3[i] || ',' || $4[i] || ', 4326), point)' LOOP 
         RETURN NEXT ret;                   
         END LOOP;                     
        END LOOP;                      
        RETURN;                       
       END;                         
       $$ LANGUAGE plpgsql; 

내가 각 열에 대한 기록에 (예를 들어 (-2000, -181, -181)), 경우 쿼리 반환을 기본 값을 반환 할 행이 없습니다.

레코드와 병합 할 수없는 것 같습니다.

어떻게해야합니까?

답변

1

아무것도 당신이 변수 RET에 값을 할당 할 수RETURN 전에 다음 발견되지 않은 경우 :

... 
if not found then 
    ret = row(-2000::integer, -181::integer, -181::integer); 
    return next ret; 
end if; 

return; 
... 

이 있는지 확인 유형 행에 사용하는 것이 - " : 정수 "는의 것과 같습니다. :

SELECT height, ST_Y(point), ST_X(point) FROM heights 
+0

감사합니다. 그러나 행을 반환하지 않으면 쿼리를 다시 실행하지 않고 결과를 계산하지 않고 어떻게 평가할 수 있습니까? – user1894572

+0

함수 본문 안에서 위의 예제에서 사용 된 변수'found'에서 빌드를 사용할 수 있습니다. 마지막 결과에서 결과가 발견되었는지 여부가 결정됩니다. – Wojtas

+0

고마워요! 그것은 작동합니다. 미안하지만, 그 방법을 보여주기위한 예일뿐입니다. – user1894572

관련 문제