如何使用单个参数将多个值传递给 PostgreSQL 函数?
Jan 10, 2025 am 06:33 AM在 PostgreSQL 函数中通过单个参数传递多个值
本指南演示如何使用单个参数有效地将多个值传递给 PostgreSQL 函数,重点关注 VARIADIC
类型并提供优化策略。
利用VARIADIC
参数
PostgreSQL 的 VARIADIC
类型提供了一种简洁的解决方案,用于处理单个参数中的多个输入值。 让我们调整一个示例函数:
CREATE OR REPLACE FUNCTION test(VARIADIC int[]) RETURNS TABLE (job_id int, job_reference int, job_job_title text, job_status text) AS $$ BEGIN RETURN QUERY SELECT j.id, j.reference, j.job_title, ltrim(right(j.status, -2)) AS status -- Optimized string trimming FROM jobs j JOIN company c ON j.id = c.id WHERE c.active AND NOT c.delete_flag AND NOT j.delete_flag AND (j.id = ANY() OR '{<b>-1</b>}'::int[] = ) ORDER BY j.job_title; END; $$ LANGUAGE plpgsql;
登录后复制
此修改后的函数接受整数数组 (int[]
) 作为输入。 VARIADIC
关键字使函数能够接受可变数量的整数参数,并自动将它们转换为数组。
使用 VARIADIC
进行函数调用
可以使用数组直接调用该函数:
SELECT * FROM test(<b>VARIADIC</b> '{1, 2, 3}'::int[]);
登录后复制
这在功能上等同于:
SELECT * FROM test(1, 2, 3);
登录后复制
性能增强和最佳实践
高效字符串修剪: 对于 PostgreSQL 9.1 及更高版本,与 right()
相比,使用带有负长度 (right(j.status, -2)
) 的 substring()
可以提供更快、更干净的方法来删除前导字符。
数据类型注意事项: 如果 DeleteFlag
表示布尔值,则使用 boolean
数据类型比 text
更高效且语义更正确。 避免在 WHERE
子句中的列名周围使用不必要的双引号。
精简功能(SQL实现)
为了增强可读性和潜在的性能提升,请考虑纯 SQL 实现:
CREATE OR REPLACE FUNCTION f_test(VARIADIC int[]) RETURNS TABLE (id int, reference int, job_title text, status text) AS $func$ SELECT j.id, j.reference, j.job_title , ltrim(right(j.status, -2)) AS status FROM job j JOIN company c ON j.id = c.id WHERE c.active AND NOT c.delete_flag AND NOT j.delete_flag AND (j.id = ANY() OR '{-1}'::int[] = ) ORDER BY j.job_title $func$ LANGUAGE sql;
登录后复制
这个简化版本实现了相同的功能,但更加简洁。 请记住调整表和列名称以匹配您的特定架构。
以上是如何使用单个参数将多个值传递给 PostgreSQL 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章
两个点博物馆:邦格荒地地点指南
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章
两个点博物馆:邦格荒地地点指南
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器)
