假设你有下面的表:
CREATE TABLE EMPLOYEE ( name text, basesalary integer, bonus integer );为了获取所有的薪水(本金+奖励)(base+bonus),我们将定义下面这样的函数:
CREATE FUNCTION totalcomp(integer, integer) RETURNS integer AS 'return $_[0] + $_[1]' LANGUAGE 'plperl';请注意参数会象想象的那样以 @_ 形式传递给函数.
我们现在可以象下面这样使用我们的函数:
SELECT name, totalcomp(basesalary, bonus) FROM employee;
不过,我们还可以把我们的整个记录传递个我们的函数:
CREATE FUNCTION empcomp(employee) RETURNS integer AS ' my $emp = shift; return $emp->{''basesalary''} + $emp->{''bonus''}; ' LANGUAGE 'plperl';记录是作为一个散列(哈希 hash)数组的引用传递的. 脚标是记录里面的字段名称.值是记录里面对应的字段的值.
小技巧: 因为函数体是以一个 SQL 字串文本的方式传递给 CREATE FUNCTION,因此你必须在你的 Perl 源程序里 逃逸单引号,要么用上面显示的写两份的方法,要么使用扩展引起函数 (q[],qq[], qw[]).你必须用写双份的方法逃逸反斜扛.
新函数 empcomp 可以这样使用:
SELECT name, empcomp(employee) FROM employee;
这里是一个不能用的函数的例子,因为由于安全原因, 文件系统操作是不允许的:
CREATE FUNCTION badfunc() RETURNS integer AS ' open(TEMP, ">/tmp/badfile"); print TEMP "Gotcha!\n"; return 1; ' LANGUAGE 'plperl';这个函数可以成功创建,但是不能执行.