PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Fast Forward | Next |
PL/Perl ��һ�ֿ�װ�صĹ������ԣ�ͨ�������ǿ����� Perl �������д PostgreSQL ������
Ҫ���ض����ݿ��ﰲװ PL/Perl��ʹ�� createlang plperl dbname��
��ʾ: ���ij�ֱ������װ�� template1����ô������������ݿⶼ���Զ���װ�������ԡ�
ע��: ʹ��Դ������û������ڰ�װ�������ر�� PL/Perl �������� ����ο� Section 14.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 ��������һ�������ͣ� ��ô����Σ���ˡ�