PL/pgSQL的anyelement例子

时间:2023-03-08 21:33:18

http://www.postgresonline.com/journal/archives/239-The-wonders-of-Any-Element.html

定义函数

pgsql=# CREATE OR REPLACE FUNCTION diff_inc(IN anyelement, IN anyelement
pgsql(# , OUT diff integer, OUT f_val anyelement, OUT l_val anyelement)
pgsql-# RETURNS record
pgsql-# AS
pgsql-# $$
pgsql$# BEGIN
pgsql$# diff = ($1 - $2)::integer;
pgsql$# f_val = $1 +1;
pgsql$# l_val = $2 +1;
pgsql$# END;
pgsql$# $$
pgsql-# language plpgsql;
CREATE FUNCTION
pgsql=#

带入不同的数据类型进行运算:

pgsql=# select (diff_inc(12,14)).*;
diff | f_val | l_val
------+-------+-------
-2 | 13 | 15
(1 row) pgsql=# SELECT (diff_inc('2011-12-31'::date, '2012-01-05'::date)).*;
diff | f_val | l_val
------+------------+------------
-5 | 2012-01-01 | 2012-01-06
(1 row) pgsql=#

但是,它有一个限制:一旦第一个参数确定,后面的参数必须和它的类型一致。