使用 PL/Perl

假设你有下面的表:
CREATE TABLE EMPLOYEE (
    name text,
    basesalary int4,
    bonus int4 );
为了获取所有的薪水(本金+奖励),我们将定义下面这样的函数:
CREATE FUNCTION totalcomp(int4, int4) RETURNS int4
    AS 'return $_[0] + $_[1]'
    LANGUAGE 'plperl';
请注意参数会象想象的那样以 @_ 形式传递给函数.还有,因为 SQL 创建函数的引号规则,你会发现你要比平常更频繁地使用扩展的引号函数(qq[],q[],qw[]).

我们现在可以象下面这样使用我们的函数.

SELECT name, totalcomp(basesalary, bonus) from employee
不过,我们还可以把我们的整个记录传递个我们的函数:
CREATE FUNCTION empcomp(employee) returns int4
    AS 'my $emp = shift;
        return $emp->{'basesalary'} + $emp->{'bonus'};'
    LANGUAGE 'plperl';
记录是作为一个散列(哈希 hash)数组的引用传递的.脚标是记录里面的字段名称.值是记录里面对应的字段的值.

新函数 empcomp 可以这样使用:

SELECT name, empcomp(employee) from employee;