【问题标题】:PostgreSQL function taking column name as argument以列名作为参数的 PostgreSQL 函数
【发布时间】:2021-07-30 19:33:01
【问题描述】:

我有一张表tab1,有四列col1col2col3col4

我想创建一个类似f4(a) 的函数,其中a 由用户定义,如果用户键入select f4(col1),他将获得tab1.col1 列。

有没有办法在 PostgreSQL 中创建这样的函数?

【问题讨论】:

  • 问题是广泛的。如果您遇到特定问题,而不仅仅是需求转储,您应该尝试一些方法并返回。提示:您可以查询pg_attribute 并加入pg_class 并可能加入pg_namespace。而且你应该考虑如何处理这种情况,当不止一个表有一个名为函数输入的列时。
  • 那么你有答案了吗?

标签: postgresql function arguments dynamic-sql


【解决方案1】:

真的没有充分的理由在这里用函数使事情复杂化。
你应该怎么做:

SELECT col1 FROM tab1;

你的要求:

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');

您需要动态 SQL,因为 SQL 不允许参数化标识符。

进一步阅读:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 2011-12-18
    • 2020-02-10
    • 1970-01-01
    • 2021-06-24
    • 2021-12-13
    • 1970-01-01
    相关资源
    最近更新 更多