本文主要是介绍PostgreSQL的多态函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
项目中遇到一个需求,需要模拟Oracle的NVL2函数实现一个对应功能的函数
于是就写了一个自定义函数
CREATE OR REPLACE FUNCTION bkdb3.nvl2(expr anyelement, expr2 anyelement, expr3 anyelement)RETURNS anyelementLANGUAGE plpgsql
AS $$
BEGINIF expr IS NOT NULL AND expr::text !='' THENRETURN expr2;ELSERETURN expr3;END IF;
END;
$$;
结果遇到一个问题,这三个参数类型在项目里是变化的,如果三个都是VARCHAR
或者TEXT
都还好,不报错,
一旦有一个类型不一样,就会报
ERROR: function test1(text, integer, numeric) does not exist建议:No function matches the given name and argument types. You might need to add explicit type casts.位置:8
anyelement
不是说好任意类型的么,我任一了又不行了.NND
最后总结:我的理解,它是任意同一种类型
的意思,就是你入参的实参,3个要么都是VARCHAR
,要么都是INTEGER
,有个类型不一样或者说像’2’(unknown)这种不知道他类型的,就不行,报错
最后写了两个方法重载
nvl2(expr varchar, expr2 anyelement, expr3 anyelement)
nvl2(expr integer, expr2 anyelement, expr3 anyelement)
这篇关于PostgreSQL的多态函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!