已结束支持的版本: 7.1
历史版本。 PostgreSQL 7.1 已结束支持。 请参阅 当前版本手册.
26.2. 使用 PL/Perl #
假设你有下面这张表:
CREATE TABLE EMPLOYEE (
name text,
basesalary integer,
bonus integer
);为了得到总薪酬(基本工资 + 奖金),我们可以像下面这样定义一个函数:
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';元组以哈希的引用形式传递。键是元组中字段的名字。哈希的值是元组中对应字段的值。
提示
由于函数体是作为 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';这个函数的创建会成功,但执行它不会成功。