zoukankan      html  css  js  c++  java
  • postgres 输出数据集的自定义函数

    定义一个可输出数据集自定义函数有多种方法

    1,先定义结构,再使用结构输出结果

    CREATE TYPE compfoo AS (f1 int, f2 text);
    
    CREATE FUNCTION getfoo() RETURNS SETOF compfoo AS $$
        SELECT fooid, fooname FROM foo
    $$ LANGUAGE SQL;

    2,直接在return中定义表结构

    CREATE FUNCTION sum_n_product_with_tab (x int)
    RETURNS TABLE(sum int, product int) AS $$
        SELECT $1 + tab.y, $1 * tab.y FROM tab;
    $$ LANGUAGE SQL;

    3,return定义为record,在定义输出参数

    CREATE FUNCTION sum_n_product_with_tab (x int, OUT sum int, OUT product int)
    RETURNS SETOF record
    AS $$
        SELECT $1 + tab.y, $1 * tab.y FROM tab;
    $$ LANGUAGE SQL;

    主要为以上三种基础情况,再说下基于以上的高频的写法。

    基于逻辑需要,表结构需要拼接字符串,这时函数内的数据集是使用 execute 获取的,直接使用execute runsql;  是不能通过调用函数获取最后的结果的。可以这么玩。

    CREATE TYPE compfoo AS (f1 int, f2 text);
    
    create function func1(x int4) 
    returns setof compfoo as $BODY$
    declare row_index compfoo ;
    declare runstr text;
    .....
    begin
    
    ....
    
    for row_index in execute runstr loop
    return next row_index;
    end loop;
    
    end
    $BODY$

    来解读下,先定义输出结构。在函数内使用 for in 循环输出结果。这样才能将通过调用函数返回结果。

    注:变量 row_index 需要在 declare 声明变量时定义,不然会报“ for  附近有异常”的错误。

    转载注明出处:https://www.cnblogs.com/jackicalSong/

    以下截图为以上逻辑写出的来的。。

    方便他人,成就自己!

  • 相关阅读:
    docker常用命令
    centos7安装docker
    windows程序自启动的几种方法(三)系统配置文件
    判断操作系统的类型
    浏览器插件 Browser Helper Object(BHO) 二
    dbf文件结构
    ICE开发中遇到的问题 (一)
    window程序自启动的几种方法(四)
    使用ICE遇到的编译问题
    浏览器插件 Browser Helper Object(BHO) 一
  • 原文地址:https://www.cnblogs.com/jackicalSong/p/9852008.html
Copyright © 2011-2022 走看看