0

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

与记录合并似乎是不可能的。

我怎样才能做到这一点?

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 回答