如何编写带子函数的PL/pgSQL代码块实现三数求和与求平均(已完成求和)
PL/pgSQL实现三数求和与平均值的嵌套子函数方案
你可以在PL/pgSQL的代码块(如匿名DO块或自定义函数)中定义嵌套子函数,以下是完整的实现示例,包含已完成的求和子函数和新增的平均值子函数:
DO $$ DECLARE -- 嵌套求和子函数:计算三个数的总和 FUNCTION sum_three(a NUMERIC, b NUMERIC, c NUMERIC) RETURNS NUMERIC LANGUAGE plpgsql AS $$ BEGIN RETURN a + b + c; END; $$; -- 嵌套平均值子函数:调用求和子函数计算平均值 FUNCTION avg_three(a NUMERIC, b NUMERIC, c NUMERIC) RETURNS NUMERIC LANGUAGE plpgsql AS $$ BEGIN -- 使用3.0而非3,确保浮点运算避免整数除法取整 RETURN sum_three(a, b, c) / 3.0; END; $$; v_total NUMERIC; v_average NUMERIC; BEGIN -- 测试调用:传入任意三个数值 v_total := sum_three(5, 15, 25); v_average := avg_three(5, 15, 25); -- 输出计算结果 RAISE NOTICE '三个数的总和:%', v_total; RAISE NOTICE '三个数的平均值:%', v_average; END $$;
关键说明:
- PL/pgSQL允许在代码块的
DECLARE段定义嵌套子函数,这类子函数仅在当前代码块内部可见和使用 - 平均值子函数直接复用求和子函数的逻辑,避免重复计算,同时保证结果一致性
- 除以
3.0而非整数3是为了触发浮点运算,防止输入整数时出现截断取整的问题(例如6/3=2,6/3.0=2.0)
如果需要将逻辑封装为可外部调用的独立函数,也可以拆分两个顶层函数,但嵌套子函数更适合逻辑紧密耦合的场景。
内容的提问来源于stack exchange,提问作者user20544847
相关产品推荐
相关产品推荐

