将table传递给postgreSQL函数,执行select语句,returntable
Pass table to postgreSQL function, execute select statement, return table
我正在从 MSSQL 过渡到 postgreSQL,并且仍在研究过程编程的语法。这个想法是创建一个函数,它将 table 作为 input/parameter,针对此输入 table 执行一系列 SELECT
语句(没有临时 table s;SELECT
语句将与 CTE 一起执行)和 RETURN
最后的 table。
输入 table 会非常简单:
Col_1 Col_2 Col_3
----------------------------
2 5 12
我想使用输入 table 中的每个字段来计算一个数字(在本例中,求和 Col_1
、Col_2
和 Col_3
) ,将其附加到输入 table,并创建如下显示的输出 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;
显然美元报价之间的所有内容都是 incomplete/wrong。美元引号之间的 piece 的正确 postgreSQL 语法是什么?
您不能将 "table" 作为函数参数传递。您 可以 将 table 的名称传递给 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;
我正在从 MSSQL 过渡到 postgreSQL,并且仍在研究过程编程的语法。这个想法是创建一个函数,它将 table 作为 input/parameter,针对此输入 table 执行一系列 SELECT
语句(没有临时 table s;SELECT
语句将与 CTE 一起执行)和 RETURN
最后的 table。
输入 table 会非常简单:
Col_1 Col_2 Col_3
----------------------------
2 5 12
我想使用输入 table 中的每个字段来计算一个数字(在本例中,求和 Col_1
、Col_2
和 Col_3
) ,将其附加到输入 table,并创建如下显示的输出 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;
显然美元报价之间的所有内容都是 incomplete/wrong。美元引号之间的 piece 的正确 postgreSQL 语法是什么?
您不能将 "table" 作为函数参数传递。您 可以 将 table 的名称传递给 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;