首页 > 解决方案 > 如何将记录/行传递给函数

问题描述

我试图了解如何在 postgresql 中将行/记录作为函数的参数传递,我发现这个已经存在的问题How to pass a table or rows to a function in Postgresql? 所选答案很好地解释了如何使用 array_agg() 函数将表作为参数传递。

在这种情况下,函数的参数是表类型的数组,并且数组的每个元素与行和数组元素的每个字段匹配,可以使用 . 表示法,匹配一行的列。

答案中没有解释的是如何只传递一个记录/行作为参数,我的想法是传递一个 tablename%ROWTYPE 类型的变量,然后使用 . 符号来访问记录的每个字段,如下所示:variable.field1、variable.field2 等等。

这个对吗?如果不是,我如何将具有表行类型的记录作为参数传递给函数?

标签: postgresqlplpgsql

解决方案


该函数应接受与您的表相同类型的参数。这是一个返回布尔值的示例,您可以使用它来过滤表(类似于where子句,但这只是一个示例)

CREATE FUNCTION isvisible(p_row myTable)  RETURNS BOOLEAN
AS $BODY$
  select p_row.myCol = 'whatever';
$BODY$ 
LANGUAGE sql IMMUTABLE;

select * from myTable  t where t.isvisible;
select * from myTable  t where isvisible(t);
select * from myTable  t where isvisible(t.*);

推荐阅读