PostgreSQL 函数以列名作为参数

问题描述 投票:0回答:1

我有一个表格

tab1
,有四列
col1
col2
col3
col4

我想创建一个像

f4(a)
这样的函数,其中
a
由用户定义,如果用户输入
select f4(col1)
,他会得到列
tab1.col1

有什么方法可以在 PostgreSQL 中创建这样的函数吗?

postgresql function arguments dynamic-sql
1个回答
2
投票

没有明显的理由使函数的问题变得复杂。简单地说:

SELECT col1 FROM tab1;

要实现您的要求,您需要动态 SQL,因为 SQL 不允许参数化 标识符 - 或除之外的任何内容:

CREATE OR REPLACE FUNCTION f4(_col text)
  RETURNS TABLE (col_x text)
  LANGUAGE plpgsql AS
$func$
BEGIN
   RETURN QUERY EXECUTE 
   format('SELECT %I FROM tab1', _col);
END
$func$;

致电:

SELECT * FROM f4('col1');

进一步阅读:

© www.soinside.com 2019 - 2024. All rights reserved.