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;

相关推荐
jnrjian11 小时前
oraasmaudit Oracle ASM
数据库·oracle
A153625511 小时前
WMS 智能仓情系统推荐:如何实现仓库全局可视与数字化管控
运维·数据库·人工智能
又是重名了12 小时前
大数据量导出 优化方案多版 第五版
数据库·优化·导出·大数据量
Data_Journal12 小时前
如何使用 Python 抓取 Google Flights:分步指南
大数据·开发语言·数据库·python·scrapy
深藏bIue12 小时前
PostgreSQL 冻结与死元组回收
数据库·postgresql
滨哥GPT12 小时前
Codex修改数据库后项目启动失败怎么办?Migration、Schema与数据结构排查
数据库·ai编程·开发工具·schema·codex
戴西软件12 小时前
国内有哪些数据轻量化格式转换软件?
数据库·算法·安全·信息可视化·自动化·rpa
λqaq713 小时前
MySQL 数据库基础(2)约束、用户权限、远程连接、外键与 TCP/UDP 理解
linux·数据库·python·tcp/ip·mysql
丰锋ff13 小时前
基于C++11的数据库连接池
数据库
TDengine (老段)13 小时前
TDengine 应用案例 — 工业大数据与智能制造
大数据·数据库·制造·时序数据库·tdengine·涛思数据