PL/pgSQL的anyelement例子

本文介绍了 PostgreSQL 中使用 Any Element 类型定义通用函数的方法,并通过示例展示了如何创建一个可以处理不同类型输入的 diff_inc 函数。

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=# 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值