将表传递给 postgreSQL 函数,执行 select 语句,返回表



我正在从MSSQL过渡到postgreSQL,并且仍在研究过程编程的语法。这个想法是创建一个函数,该函数将表作为输入/参数,针对该输入表执行一系列SELECT语句(没有临时表;SELECT语句将使用 CTE 执行),并RETURN最终表。

输入表将非常简单:

Col_1      Col_2       Col_3
----------------------------
2           5           12  

我想使用输入表中的每个字段来计算一个数字(在本例中,对Col_1Col_2Col_3求和),将其附加到输入表中,并创建一个如下所示的输出表:

Col 1      Col_2       Col_3      Col_4
---------------------------------------
2           5           12        19   

我对代码的尝试:

CREATE OR REPLACE FUNCTION summing_function(input_table)
RETURNS output_table(Col_1 INT, Col_2 INT, Col_3 INT, Col_4 INT) AS
$$
SELECT 
    i.*
    , i."Col_1" + i."Col_2" + i."Col_3" as sum
INTO output_table
FROM input_table i
$$
LANGUAGE SQL;

显然,美元报价之间的一切都是不完整的/错误的。美元引号之间的正确postgreSQL语法是什么?

不能将"表"作为函数参数传递。您可以将表的名称传递给 PL/pgSQL 函数,然后运行动态查询:

CREATE OR REPLACE FUNCTION summing_function(input_table text)
    RETURNS TABLE (col_1 int, col_2 int, col_3 int, col_4 int) AS $$
BEGIN
    RETURN QUERY EXECUTE
        format('SELECT *, col_1 + col_2 + col_3 FROM %I', input_table);
END;
$$ LANGUAGE plpgsql;

相关内容

  • 没有找到相关文章

最新更新