0

postgres-database に次の機能があります。

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))。

レコードとの合体は不可能のようです。

どうすればこれを行うことができますか?

4

1 に答える 1

1

何も見つからなかった場合は、RETURNの前に変数retに値を割り当てることができます。

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

return;
...

row - "::integer" で使用される型が の型と同じであることを確認してください:

SELECT height, ST_Y(point), ST_X(point)  FROM heights
于 2012-12-11T12:37:39.233 に答える