2012-12-11 51 views
0

我有一個Postgres數據庫以下功能:如何在postgres中找不到結果時返回多個默認值?

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

如果發現沒有那麼之前RETURN可以賦值給變量RET

... 
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

相關問題