【问题标题】:Postgresql plpgsql function syntax errorPostgresql plpgsql 函数语法错误
【发布时间】:2017-12-11 04:29:54
【问题描述】:

我想创建一个返回一组记录的函数,但出现语法错误。查询正在运行,但是当我将其嵌入函数中时出现错误。可以做些什么来返回集合?

错误
错误:“选择”处或附近的语法错误
第 27 行:选择 id、user_id、project_id、record_date、parselid、pars...
________^
********** 错误 **********
错误:“选择”处或附近的语法错误
SQL 状态:42601
字数:832

功能代码

CREATE OR REPLACE FUNCTION getloggeom(
    IN p_lat double precision,
    IN p_lng double precision,
    OUT id integer, 
    OUT user_id bigint, 
    OUT project_id bigint, 
    OUT record_date timestamp without time zone, 
    OUT parselid integer, 
    OUT parselno character varying, 
    OUT adano character varying, 
    OUT ilid integer, 
    OUT ilad character varying, 
    OUT ilceid integer, 
    OUT ilcead character varying, 
    OUT mahallead character varying, 
    OUT mahalleid integer, 
    OUT pafta character varying, 
    OUT nitelik character varying, 
    OUT mevkii character varying, 
    OUT yuzolcum character varying, 
    OUT alan double precision, 
    OUT lat double precision, 
    OUT lng double precision, 
    OUT feature json)
  RETURNS SETOF record AS
$BODY$
    select id, user_id, project_id, record_date, parselid, parselno, adano, ilid, ilad, ilceid, ilcead, mahallead, mahalleid, pafta, nitelik, mevkii, yuzolcum, alan, st_x(st_centroid(st_transform(geom,4326))) as lng, st_y(st_centroid(st_transform(geom,4326))) as lat, (SELECT row_to_json(fc) as data
                     FROM ( SELECT 'FeatureCollection' As type, array_to_json(array_agg(f)) as features
                     FROM ( SELECT 'Feature' as type
                        , ST_AsGeoJSON(st_transform(ST_MakeValid(geom),4326))::json as geometry
                        , row_to_json(( parselid, ilad, ilcead, mahallead, adano, parselno, yuzolcum, st_y(st_centroid(st_transform(geom,4326))), st_x(st_centroid(st_transform(geom,4326))))) As properties
                       FROM log_geom where st_intersects((st_transform(st_setsrid(st_point(p_lng, p_lat), 4326), 500000)),geom ) limit 1)as f )  as fc) as feature  from log_geom where         
        ST_Intersects(
        st_transform(st_setsrid(st_point(p_lng, p_lat), 4326), 500000),geom
    )limit 1;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 1000
  ROWS 1000;

【问题讨论】:

    标签: postgresql plpgsql


    【解决方案1】:

    如果您使用 plpgsql,则必须包括 begin / end statements 并且必须按照 doc 使用 RETURN QUERY ... RETURN;。

    否则,您可以切换到使用SQL 而不是 PLPGSQL,您的函数将照常工作。

    CREATE OR REPLACE FUNCTION getloggeom([...])
      RETURNS SETOF record AS
    $BODY$
        [...]
    $BODY$
      LANGUAGE SQL
      COST 1000
      ROWS 1000;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      相关资源
      最近更新 更多