我正在从MSSQL过渡到postgreSQL,并且仍在编写程序编程的语法。我们的想法是创建一个将表作为输入/参数的函数,对该输入表执行一系列SELECT
语句(无临时表; SELECT
语句将与CTE一起执行) ,和RETURN
决赛桌。
输入表非常简单:
Col_1 Col_2 Col_3
----------------------------
2 5 12
我想使用输入表中的每个字段来计算一个数字(在此示例中,汇总Col_1
,Col_2
和Col_3
),将其附加到输入table,并创建一个如下所示的输出表:
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语法?
答案 0 :(得分:0)
您不能将“表”作为函数参数传递。您可以将表名传递给PL / pgSQL函数,然后运行dynamic query:
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;