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;

相关推荐
hasty几秒前
Origin 校验不是身份认证:MySQL MCP Server 漏洞给 AI 平台的警告
数据库·mysql·安全
梦想平凡1 小时前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
凤山老林1 小时前
Spring Boot 整合 Flowable 的企业级落地指南
数据库·spring boot·后端·flowable·工作流
企业数字化笔记1 小时前
AI写的系统出现504怎么办?接口超时和数据库慢查询排查
数据库·后端
2601_962218612 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法
Wang's Blog2 小时前
Java框架快速入门:Spring Security+OAuth2之用户注册与唯一性校验实现
java·数据库·spring
跨境生态圈3 小时前
2026谷歌SEO快速排名深度解析:合规起量、避坑指南与实战落地策略
数据库·人工智能·爬虫·搜索引擎·chatgpt
JavaPub-rodert3 小时前
Docker 安装 MySQL 完整教程:从零部署数据库,到生产环境持久化配置
数据库·mysql·docker
隔窗听雨眠3 小时前
MySQL整库迁移至KaiwuDB完全指南:从数据类型映射到生产切换的系统性实践
数据库·mysql
xhbh6663 小时前
中小企业 Redis 运维,如何安全归档 RDB、AOF 备份文件?
运维·数据库·缓存·数据备份·文件备份·同步备份·号码备份