参数数据类型 $$ teledb LANGUAGE PLPGSQL; CREATE FUNCTION 这里需要开启一个事务 teledb BEGIN; BEGIN teledb SELECT FROM F6('a'); f6 a 多态类型 teledb CREATE OR REPLACE FUNCTION fany(aarg anyelement) RETURNS VOID AS $$ BEGIN RAISE NOTICE '%',aarg; END; $$ LANGUAGE PLPGSQL; CREATE FUNCTION teledb SELECT fany(1::integer); NOTICE: 1 fany (1 row) teledb SELECT fany('teledb'::TEXT); NOTICE: teledb fany (1 row) teledb SELECT fany(ROW(1,'teledb')::public.tper); NOTICE: (1,teledb) fany (1 row) teledb SELECT fany(ARRAY[1,2]::INTEGER[]); NOTICE: {1,2} fany (1 row) teledb SELECT fany(ARRAY[[1,2],[3,4],[5,6]]::INTEGER[][][]); NOTICE: {{1,2},{3,4},{5,6}} fany (1 row) 注意 多态类型参数函数调用时最好直接声明参数类型,否则有可能出错。 teledb CREATE OR REPLACE FUNCTION fany(aarg anyarray) RETURNS VOID AS $$ BEGIN RAISE NOTICE '%',aarg; END; $$ LANGUAGE PLPGSQL; CREATE FUNCTION teledb SELECT fany(ARRAY['teledb','pgxz']::TEXT[]); ERROR: function fany(text[]) is not unique LINE 1: SELECT fany(ARRAY['teledb','pgxz']::TEXT[]); ^ HINT: Could not choose a best candidate function. You might need to add explicit type casts. Anyelement参数如果写成数组,其意义就跟anyarray参数一致,所以fany(aarg anyelement)与fany(aarg anyarray)在调用fany(ARRAY[1,2])时就会出现函数不是唯一化的错误(ERROR: function fany(…) is not unique)提示。