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;

相关推荐
不会就选b3 小时前
MySQL之视图
数据库·mysql
>no problem<3 小时前
基于cola5.0的基础设施层的多数据库切换方案思路
数据库·spring boot·mybatisplus·cola5.0·数据库迁移适配
OceanBase数据库官方博客3 小时前
OceanBase 赋能央国企:从发电到用电的全链路业务承载
数据库·oceanbase
瀚高PG实验室4 小时前
pgsql-ogr-fdw
数据库·postgresql·瀚高数据库·highgo
IvorySQL4 小时前
PostgreSQL 技术日报 (6月5日)|PG19 Beta1 上线,PGConf.PL 2026开启征稿
数据库·postgresql·区块链
abcy0712135 小时前
pycharm python sqlalchemy mysql增删改查实例csdn
数据库·oracle
无风听海5 小时前
IndexedDB 深度指南 浏览器中的事务型对象数据库
前端·数据库
咋吃都不胖lyh6 小时前
langgraph基础示例
数据库
网管NO.16 小时前
子查询进阶|EXISTS/IN/ANY/ALL,优化查询效率
数据库·sql
云服务器租用费用7 小时前
2026年腾讯云OpenClaw(Clawdbot)+Skills云上部署及Windows本地集成轻松入门
运维·服务器·数据库·windows·云计算·腾讯云