返回多态类型

最近更新时间: 2025-02-18 16:02:00

  • 复制
    复制成功
postgres=# CREATE OR REPLACE FUNCTION f23(a_arg anyelement) RETURNS anyelement AS
postgres-# $$
postgres$# BEGIN
postgres$#     RETURN a_arg;
postgres$# END;
postgres$# $$
postgres-# LANGUAGE PLPGSQL;
CREATE FUNCTION
postgres=#
postgres=# SELECT * FROM f23('TDSQLPG'::text);
 f23
------
 TDSQLPG
(1 行记录)
postgres=# SELECT * FROM f23(1::integer);
 f23
-----
   1
(1 行记录)

postgres=# SELECT * FROM f23(ARRAY['TDSQLPG','pgxz']);
      f23
---------------
 {TDSQLPG,pgxz}
(1 行记录)
postgres=# SELECT * FROM f23(ROW(1,'TDSQLPG')::public.t_rec);
 id |  mc
----+------
  1 | TDSQLPG
(1 行记录)
postgres=# CREATE OR REPLACE FUNCTION f24(a_arg ANYARRAY) RETURNS anyarray AS
postgres-# $$
postgres$# BEGIN
postgres$#     RETURN a_arg;
postgres$# END;
postgres$# $$
postgres-# LANGUAGE PLPGSQL;
CREATE FUNCTION
postgres=#
postgres=# SELECT * FROM f24(ARRAY[1,2]::INTEGER[]);
  f24
-------
 {1,2}
(1 行记录)
postgres=# SELECT f24(ARRAY[t1.*]) FROM t1;
                          f24
--------------------------------------------------------
 {"(1,TDSQLPG,TDSQLPG,202cb962ac59075b964b07152d234b70)"}
 {"(2,pgxc,pgxc,202cb962ac59075b964b07152d234b70)"}
 {"(3,pgxz,pgxz,202cb962ac59075b964b07152d234b70)"}
(3 行记录)

返回数据类型如果是多态,则函数最少需要定义一个多态参数。