zoukankan      html  css  js  c++  java
  • PostGIS 存储过程返回类型

    Postgresql存储过程返回值的方式有很多,在此先只记录一下自己用到过的,慢慢拓展

    1、type型,这里geometry可以是任何postgresql支持的类型(integer/text/character varying.....)

    CREATE OR REPLACE FUNCTION test(
        tbl character varying)
      RETURNS geometry AS
    $BODY$  
    declare  
        v_res geometry;--最终结果 
    begin
        return v_res;  
    end;  
    $BODY$
      LANGUAGE plpgsql VOLATILE STRICT
      COST 100;
    ALTER FUNCTION test(character varying)
      OWNER TO postgres;

    2、table型,返回数据集的一种,需要自己定义返回的字段,这里用return query执行select返回

    CREATE OR REPLACE FUNCTION test(
        IN tbl character varying)
      RETURNS TABLE(v_gid integer, v_res geometry) AS
    $BODY$  
    declare  
    begin 
        --执行返回结果
        return query
        select v_uptap_gid as res_uptap_gid,v_uptap_geom as res_uptap_geom ;
    end;  
    $BODY$
      LANGUAGE plpgsql VOLATILE STRICT
      COST 100
      ROWS 1000;
    ALTER FUNCTION test(character varying)
      OWNER TO postgres;

    3、setof table/view型,返回数据集的一种,通常是返回某表查询后的数据

    但是必须是表内已有字段,新增的字段不行(比如我要在返回时标识类型 'select type,a.* from tb a')

    方便的地方在于不用强制定义返回字段('select * from tb' 也可以)

    CREATE OR REPLACE FUNCTION test(
        IN tbl character varying)
      RETURNS SETOF table1 AS
    $BODY$  
    declare  
    begin 
        SELECT * from table1; 
        --或者
        return query select * from table1;
    end;  
    $BODY$
      LANGUAGE plpgsql VOLATILE STRICT
      COST 100
      ROWS 1000;
    ALTER FUNCTION test(character varying)
      OWNER TO postgres;

    3、setof record型,返回数据集的一种,与setof table类似

    不同的是,我setof record可以返回所有字段,供调用的人取字段

    CREATE OR REPLACE FUNCTION test(
        IN tbl character varying)
      RETURNS SETOF record AS
    $BODY$  
    declare  
    r record;
    begin 
        for r in EXECUTE 'select * from tb'  loop
           return next r;
        end loop;
        return;
    end;  
    $BODY$
      LANGUAGE plpgsql VOLATILE STRICT
      COST 100
      ROWS 1000;
    ALTER FUNCTION test(character varying)
      OWNER TO postgres;
    
    --调用
    select * from test('tb')  as member(id int, name text);
  • 相关阅读:
    一日一技:微信开发-自定义菜单
    Redis五种数据结构
    .NET 5 部署在docker上运行
    一日一技:微信开发-发送模板消息
    Redis快速入门及应用
    面试官扎心一问:防止重复请求提交,有什么方案?
    在Windows上安装Docker
    上班摸鱼神器—VSCode 里也可以看股票 & 基金实时数据
    C# Nuget程序集StackExchange.Redis操作Redis 及 Redis 视频资源 及 相关入门指令 牛逼不,全都有
    Mongodb 更新某一条记录 C#
  • 原文地址:https://www.cnblogs.com/giser-s/p/11656004.html
Copyright © 2011-2022 走看看