我想要一个用 PL/pgSQL 编写的函数,它接受“行集合”之类的参数,我的意思是我需要将类似字典的结构传递给该函数。
伪代码:
function_name({key1:val1,key2:val2, key3:val3 [, ...] })
怎么做?
使用现代 PostgreSQL,您可以简化这样的函数。
测试设置:
CREATE TABLE tbl1 (id int, value text);
在这种情况下不需要显式创建类型(如果该类型基于表行),它会为每个表隐式创建。
功能:
CREATE FUNCTION f_insert_rows_into_tbl1(tbl1[])
RETURNS void
LANGUAGE sql AS
$func$
INSERT INTO tbl1 -- rare case where it's safe to omit target columns
SELECT *
FROM unnest($1) sub;
$func$;
由于复合行类型是子查询中唯一的列,因此它将在外部分解SELECT
自动地。
由于输入类型是由表行定义的,因此这是可以安全地省略目标列的极少数情况之一。INSERT
命令。事实上,甚至可能建议 - 与表定义未来可能发生的更改保持同步。
Call:
SELECT f_insert_rows_into_tbl1('{"(1,foo)","(2,bar)"}');
请注意行数组的输入语法!如果您不确定正确的语法,请参阅:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)