Chapter 37. PL/Perl - Perl ��������

Table of Contents
37.1. PL/Perl �����Ͳ���
37.2. �� PL/Perl ��������ݿ�
37.3. PL/Perl �������ֵ
37.4. PL/Perl ���ȫ�ֱ���
37.5. ���ŵĺͲ����ŵ� PL/Perl
37.6. PL/Perl ������
37.7. ���Ƽ�ȱ�ٵ�����

PL/Perl ��һ�ֿ�װ�صĹ������ԣ�ͨ�������ǿ����� Perl �������д PostgreSQL ������

Ҫ���ض����ݿ��ﰲװ PL/Perl��ʹ�� createlang plperl dbname��

��ʾ: ���ij�ֱ�����԰�װ�� template1����ô������󴴽������ݿⶼ���Զ���װ�������ԡ�

ע��: ʹ��Դ������û������ڰ�װ�������ر�� PL/Perl �������� ����ο� Section 14.1 ��ȡ������Ϣ���� �����ư����û����ܻ���һЩ�������Ӱ����ҵ� PL/Perl��

37.1. PL/Perl �����Ͳ���

Ҫ�� PL/Perl ���Դ���һ������������ʹ�ñ�׼���﷨��

CREATE FUNCTION funcname (argument-types) RETURNS return-type AS $$
    # PL/Perl ������
$$ LANGUAGE plperl;

����������ͨ Perl ���롣

CREATE FUNCTION ������﷨Ҫ��Ѻ�����д���ִ������� ͨ�������ִ��ı�����Ԫ����Χ�����㣨���� Section 4.1.2.2���� �������ʹ�ô�ͳ�ĵ������﷨����������ݺ���������ʹ�õĵ����ţ�'���ͷ�б�ܣ�\���� ͨ����д˫�ݣ����� Section 4.1.2.1 ����

�����ͽ�����Ǻ��κ����� Perl �ӹ�������������ģ� �����Ƿ��� @_ �ﴫ�ݵģ� ���ֵ���� return ���ػ�����Ϊ������������ı��ʽ��ֵ���ء�

���磬һ���������������нϴ�ֵ�ĺ���������ôд��

CREATE FUNCTION perl_max (integer, integer) RETURNS integer AS $$
    if ($_[0] > $_[1]) { return $_[0]; }
    return $_[1];
$$ LANGUAGE plperl;

�������������һ�� SQL ��ֵ ��ô�����ֵ���� Perl �� "undefined" ����ʽ���֡�����ĺ�������������Ϊ��ֵʱ����Ϊ���Ǻ�������ʵ���ϣ� �������ֵú������Ƕ�����һ���������ǿ��Ը������������� STRICT���� PostgreSQL ��һЩ����������飺������ݽ���һ����ֵ����ô�ú�����������ᱻ���ã� ��ֻ���Զ�����һ����ֵ��������⣬���ǿ����ں���������δ���壨undefined�������롣 ���磬�����������յ�һ����ֵ��һ���ǿ�ֵ������ perl_max ���طǿ�ֵ�IJ����������ǿ�ֵ��

CREATE FUNCTION perl_max (integer, integer) RETURNS integer AS $$
    my ($a,$b) = @_;
    if (! defined $a) {
        if (! defined $b) { return undef; }
        return $b;
    }
    if (! defined $b) { return $a; }
    if ($a > $b) { return $a; }
    return $b;
$$ LANGUAGE plperl;

����������Ҫ�� PL/Perl �����з���һ�� SQL ��ֵ�� ���ǿ��Է���һ��δ���壨undef������ֵ�� ���ܸú����Ƿ��ϸ����Ƕ�������ô����

�������͵IJ����ǵ���ָ��ɢ�е����ô��ݸ������ġ� ɢ�еļ����Ǹ������͵���������������һ�����ӣ�

CREATE TABLE employee (
    name text,
    basesalary integer,
    bonus integer
);

CREATE FUNCTION empcomp(employee) RETURNS integer AS $$
    my ($emp) = @_;
    return $emp->{basesalary} + $emp->{bonus};
$$ LANGUAGE plperl;

SELECT name, empcomp(employee.*) FROM employee;

ʹ��ͬ���İ취��һ�� PL/Perl �������Է���һ���������͵Ľ���� ����һ����������Ҫ�����Ե�ɢ�е����á����磬

CREATE TYPE testrowperl AS (f1 integer, f2 text, f3 text);

CREATE OR REPLACE FUNCTION perl_row() RETURNS testrowperl AS $$
    return {f2 => 'hello', f1 => 1, f3 => 'world'};
$$ LANGUAGE plperl;

SELECT * FROM perl_row();

�������Ľ��������������κ��ֶ������ɢ������û�г��֣���ô���ᵱ�� NULL ���ء�

PL/Perl ����Ҳ�ܷ��ر������߷������͵ļ��ϡ�Ҫʵ�����Ŀ�ģ� ���ǿ��Էֱ𷵻�һ��ָ���������ָ��ɢ�����õ���������á�������һЩ�򵥵����ӣ�

CREATE OR REPLACE FUNCTION perl_set_int(int) RETURNS SETOF INTEGER AS $$
return [0..$_[0]];
$$ LANGUAGE plperl;

SELECT * FROM perl_set_int(5);


CREATE OR REPLACE FUNCTION perl_set() RETURNS SETOF testrowperl AS $$
    return [
        { f1 => 1, f2 => 'Hello', f3 => 'World' },
        { f1 => 2, f2 => 'Hello', f3 => 'PostgreSQL' },
        { f1 => 3, f2 => 'Hello', f3 => 'PL/Perl' }
    ];
$$  LANGUAGE plperl;

SELECT * FROM perl_set();

��ע����������Щ�����ʱ��Perl �����ڴ��������������飻 ���������ɶ��ر��Ľ�������ԣ������Բ�̫�á�

PL/Perl Ŀǰ��û�ж������͵�����֧�֣� ���������͵����²�ı������Ϳ����������ζ�Ÿ�����ص�Լ�������ᱻǿ�ơ� ���ں����������ԣ��ⲻ������⣬������������� PL/Perl ��������һ�������ͣ� ��ô����Σ���ˡ�