postgresql的函数

作者:瀚高PG实验室 (Highgo PG Lab)

postgresql的函数会返回最后一条语句的结果的第一行数据;若要返回结果集,需要显示声明要返回某类型的结果集或Table。函数体以双""符号或单引号包裹,若用单引号包裹则需要注意特殊字符转义。可以在函数体内以参数名(9.2及以后版本支持)或"n"的方式引用参数。举个例子:

CREATE FUNCTION tf1 (accountno integer, debit numeric) RETURNS integer AS $$ 
    UPDATE bank 
        SET balance = balance - debit 
        WHERE accountno = tf1.accountno -- 由于参数名和列同名,前面需要加函数名作为前缀
    -- ;SELECT balance FROM bank WHERE accountno = tf1.accountno; 
    RETURNING balance; 
$$ LANGUAGE SQL;

在INSERT INTO或者UPDATE的时候在最后面加上RETURNING colname,PostgreSQL会在插入或者更新数据之后会返回你指定的字段。

函数可以接收、返回多个字段,将这多个字段看作一个整体,称为复合类型。比如数据表中的一行,或者使用ROW构造函数构造的一行数据,或者以逗号分隔的多个字段。我们可以显式定义自己的复合类型,如:

CREATE TYPE inventory_item AS (
    name            text,
    supplier_id     integer,
    price           numeric
);

然后就可以将inventory_item用于很多地方了,甚至将一个表字段类型设置为inventory_item,如下:

CREATE TABLE on_hand (
    item      inventory_item,
    count     integer
);
 
INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000);

在你创建表的时候,也会自动创建一个复合类型,名字与表名字相同,表示该表的复合类型。需要注意的是,表定义的各项约束(如不可为空)对自动创建的同名复合类型无效。

关于复合类型值写法,上面的ROW方式比较常用,如果是多个字段,那么ROW可以省略,即('fuzzy dice', 42, 1.99);还可以一般格式——'("fuzzydice",42,1.99)'——外层以单引号包裹。我们可以操作复合类型的整体,也可以针对其某几个字段操作,具体请参考文档。

by tsbs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值