Postgresql自定义函数—表名作为函数参数

  • 函数传递表名和另外一个参数示例

CREATE OR REPLACE FUNCTION some_f(_tbl text, col text, OUT result bool)

  LANGUAGE plpgsql AS

$func$

BEGIN

   EXECUTE format('SELECT (EXISTS (SELECT FROM %s WHERE b = $1))', _tbl,col) using col INTO result;

END

$func$;

函数调用:

test=# select some_f('test','test');         --这里只传递了2个参数

 some_f

--------

 t

(1 row)

使用using子句给format函数传递参数($1),这里是数字‘壹’。%s的含义,见第四部分说明

  • 表名作为参数,返回表中记录数

CREATE OR REPLACE FUNCTION get_table_info(tablenames text)

RETURNS int AS $$

DECLARE

    rowcount int;

BEGIN

        EXECUTE format('SELECT count(*) FROM %I', tablenames) INTO rowcount;

                  return rowcount;

END

$$ LANGUAGE plpgsql;

函数调用:

test=# select get_table_info('test');

 get_table_info

----------------

              2

(1 row)

  • 表名作为参数,返回表中记录值

CREATE OR REPLACE FUNCTION get_table_info(tablenames text)

RETURNS table(a int,b varchar) AS $$

DECLARE

    rowcount int;

BEGIN

        return query EXECUTE format('SELECT * FROM %I', tablenames);

END

$$ LANGUAGE plpgsql;

函数调用:

test=# select get_table_info('test');

 get_table_info

----------------

 (10,test)

 (1,testtest)

这种调用方式,返回表的数据,作为元组形式

或者

test=# select * from get_table_info('test');

 a  |    b    

----+----------

 10 | test

  1 | testtest

(2 rows)

这种调用方式,返回表的数据同正常查询结果的返回

  • 几个注意问题
  1. Out参数,在调用时,不需要在调用时传递
  2. 当需要返回table类型时,可以使用return query或者return next
  3. Format函数参数的说明:

%I is equivalent to quote_ident, and %L is equivalent to quote_nullable. The format function can be used in conjunction with the USING clause:

EXECUTE format('UPDATE tbl SET %I = $1 WHERE key = $2', colname) USING newvalue, keyvalue;

相关推荐

  1. Postgresql定义函数作为函数参数

    2024-02-07 12:10:02       56 阅读
  2. 作业40 定义函数

    2024-02-07 12:10:02       29 阅读
  3. c++ 函数作为参数

    2024-02-07 12:10:02       31 阅读
  4. C语言如何将多维数组作为函数参数

    2024-02-07 12:10:02       29 阅读
  5. go interface{} 作为函数参数

    2024-02-07 12:10:02       29 阅读
  6. 【Go】通道作为函数参数

    2024-02-07 12:10:02       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-07 12:10:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-07 12:10:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-07 12:10:02       82 阅读
  4. Python语言-面向对象

    2024-02-07 12:10:02       91 阅读

热门阅读

  1. postgresql 初始化驱动支持高可用配置

    2024-02-07 12:10:02       42 阅读
  2. Leetcode 377 组合总和 Ⅳ

    2024-02-07 12:10:02       46 阅读
  3. k8s-sercret

    2024-02-07 12:10:02       48 阅读
  4. linux系统非关系型数据库memcached

    2024-02-07 12:10:02       53 阅读
  5. 机器学习——流形学习

    2024-02-07 12:10:02       52 阅读
  6. 基于设计模式,实现分布式锁的资源管理

    2024-02-07 12:10:02       49 阅读
  7. gem5学习(18):ARM DVFS建模——ARM DVFS modelling

    2024-02-07 12:10:02       40 阅读
  8. layui

    layui

    2024-02-07 12:10:02      58 阅读
  9. 闭包在实际开发中的运用

    2024-02-07 12:10:02       56 阅读