Unc*_*ton 5 postgresql procedural-programming function plpgsql
我正在从MSSQL过渡到PostgreSQL,并且仍在研究过程编程的语法。这个想法是创建一个将表作为输入/参数的函数,SELECT针对该输入表执行一系列语句(无临时表;这些SELECT语句将使用CTE执行),以及RETURN最终表。
输入表将非常简单:
Col_1 Col_2 Col_3
----------------------------
2 5 12
Run Code Online (Sandbox Code Playgroud)
我想使用每个字段中输入表,以计算一个数字(在本例中,求和Col_1,Col_2和Col_3),将其追加到输入表,并创建一个输出表显示为这样的:
Col 1 Col_2 Col_3 Col_4
---------------------------------------
2 5 12 19
Run Code Online (Sandbox Code Playgroud)
我的代码尝试:
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;
Run Code Online (Sandbox Code Playgroud)
显然,美元报价之间的所有内容都不完整/错误。美元报价之间的正确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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
938 次 |
| 最近记录: |