使用 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;