↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.1
历史版本PostgreSQL 7.1 已于 2006 年 4 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

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';

这个函数的创建会成功,但执行它不会成功。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。