postgresql - 如何将记录/行传递给函数
问题描述
我试图了解如何在 postgresql 中将行/记录作为函数的参数传递,我发现这个已经存在的问题How to pass a table or rows to a function in Postgresql? 所选答案很好地解释了如何使用 array_agg() 函数将表作为参数传递。
在这种情况下,函数的参数是表类型的数组,并且数组的每个元素与行和数组元素的每个字段匹配,可以使用 . 表示法,匹配一行的列。
答案中没有解释的是如何只传递一个记录/行作为参数,我的想法是传递一个 tablename%ROWTYPE 类型的变量,然后使用 . 符号来访问记录的每个字段,如下所示:variable.field1、variable.field2 等等。
这个对吗?如果不是,我如何将具有表行类型的记录作为参数传递给函数?
解决方案
该函数应接受与您的表相同类型的参数。这是一个返回布尔值的示例,您可以使用它来过滤表(类似于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.*);
推荐阅读
- multithreading - Celery 什么时候会开始新的工人?
- python - 为什么 datetime.now(datetime.timezone.utc) 和 datetime.datetime.utcnow() 之间的区别
- javascript - 使用 Javascript 更改音频 PlaybackRate 和下载?
- php - 单击单选按钮时将值传递给隐藏的输入
- javascript - 使用 Javascript 从 HTML 表单添加数字,无需提交或刷新
- javascript - d3动画地图:放大后,动画开始时如何正确投影点?
- ios - 将枚举转换为其名称的字符串
- javascript - Vue URL Route 未在状态更新,但在浏览器中更新
- docker - 如何在 openjdk docker 镜像中安装 sqlcmd?
- firebase - 如何在 Flutter 中取消 StreamBuilder 的订阅?