PostgreSQL 9.6.0 �ֲ�
| |||
---|---|---|---|
��һҳ | ��һ�� | �� 43. PL/Perl - Perl �������� | ��һҳ |
Ҫ�� PL/Perl ���Դ���һ����������ʹ�ñ�׼�� CREATE FUNCTION�﷨��
CREATE FUNCTION funcname (argument-types) RETURNS return-type AS $$ # PL/Perl ������ $$ LANGUAGE plperl;
���������������ͨ�� Perl ���롣��ʵ�ϣ�PL/Perl ��ճ�ϴ������� ������һ�� Perl �ӳ����С�һ�� PL/Perl ��������һ�ֱ����������� �����ã�������޷������б�������������������ͨ���������������� �DZ���ֵ�����顢��¼�ͼ��ϣ���
PL/Perl Ҳ֧����DO�����õ���������飺
DO $$ # PL/Perl ���� $$ LANGUAGE plperl;
һ�����������û�в��������������ص��κ�ֵ���ᱻ���������� ����Ϊ����һ��������
ע��: �� Perl ��ʹ������Ƕ���ӳ�������Σ�յģ��ر��ǵ��������������� ���þֲ�����ʱ����Ϊ PL/Perl ��������װ��һ���ӳ����κη��� ���е������ӳ��򶼻ᱻǶ�ס���֮������ͨ�� coderef ���õ����� �ӳ���Ҫ��ȫ�öࡣ������Ϣ�ɼ� perldiag�ֲ�ҳ �е�Variable "%s" will not stay shared�Լ� Variable "%s" is not available�������ڻ������� ����"perl nested named subroutine"��
The syntax of the CREATE FUNCTION������﷨Ҫ���� �屻д��һ���ַ���������ͨ�����ַ�������ʹ����Ԫ���ã��� �� 4.1.2.4 ������㡣���ѡ��ʹ�� ת���ַ����﷨E''������˫д�κ��ں�������ʹ�õĵ����� ��'���ͷ�б�ߣ�\������ �� 4.1.2.1 ������
�����ͽ���Ĵ��������κ����� Perl �ӳ�����һ�������������ݵ� @_�У����ҽ��ֵ��return ���ػ��߰Ѻ����м�������һ������ʽ��Ϊ���ֵ��
���磬һ��������������ֵ�нϴ�ֵ�ĺ������Զ���Ϊ��
CREATE FUNCTION perl_max (integer, integer) RETURNS integer AS $$ if ($_[0] > $_[1]) { return $_[0]; } return $_[1]; $$ LANGUAGE plperl;
ע��: �������������ݿ�ı���ת���� PL/Perl ��ʹ�õ� UTF-8������ʱ�ٴ� UTF-8 ת�ص����ݿ���롣
���һ�� SQL ��ֵ������һ����������
Perl �иò���ֵ������Ϊ"undefined"�����������������
���������Ϊ��̫�ã�ʵ���ϣ���������ǵ����㣩�����ǿ���Ϊ����
��������STRICT��PostgreSQL
�ɵø������������ֵ�����룬�������������ᱻ���ã���ֻ���Զ�
����һ���ս��������һ�ַ�ʽ�����ǿ����ں������м��δ�����
���롣���磬�����������ô���һ���ղ�������һ���ǿղ�����
perl_max
���طǿղ��������ǿ�ֵ��
CREATE FUNCTION perl_max (integer, integer) RETURNS integer AS $$ my ($x, $y) = @_; if (not defined $x) { return undef if not defined $y; return $y; } return $x if not defined $y; return $x if $x > $y; return $y; $$ LANGUAGE plperl;
����������Ҫ��һ�� PL/Perl ��������һ�� SQL ��ֵ���ͷ���һ��δ����ֵ�� ���ܺ������ϸ�Ļ��Ƿ��ϸ�Ķ�������������
һ�������õĺ��������е��κζ�������һ������������������͵ı�׼
PostgreSQL�ⲿ�ı��������ͨ
���ֻ��ı����͵�����£�Perl ��������ȷ�����鲢�ҳ���Աͨ������Ҫ
���ġ�����������������½���Ҫ��ת������ Perl �и����õ���ʽ�����磬
decode_bytea
�������Ա�����������
bytea�IJ���ת����δת��Ķ�������ʽ��
���Ƶأ��ش���PostgreSQL��ֵ����
���ⲿ�ı������ʽ�����磬encode_bytea
�������Ա�����ת����������ݵõ�����bytea�ķ���ֵ��
Perl ���԰�PostgreSQL���鷵��Ϊ�� Perl ��������á�������һ�����ӣ�
CREATE OR REPLACE function returns_array() RETURNS text[][] AS $$ return [['a"b','c,d'],['e\\f','g']]; $$ LANGUAGE plperl; select returns_array();
Perl ��PostgreSQL������Ϊ�� bless ���� PostgreSQL::InServer::ARRAY���󴫵ݡ����������Ա����� һ���������û���һ����������Ϊ������������Ϊ 9.1 ���°汾�� PostgreSQL��д�� Perl ����һ�����С� ���磺
CREATE OR REPLACE FUNCTION concat_array_elements(text[]) RETURNS TEXT AS $$ my $arg = shift; my $result = ""; return undef if (!defined $arg); # as an array reference for (@$arg) { $result .= $_; } # also works as a string $result .= $arg; return $result; $$ LANGUAGE plperl; SELECT concat_array_elements(ARRAY['PL','/','Perl']);
ע��: ��ά���鱻��һ�ֶ�ÿһ�� Perl ����Ա�����ϵķ�����ʾΪ�Խϵ�ά�������� �����á�
������Ͳ�������Ϊ��ϣ�����ô��ݸ���������ϣ�ļ���������͵� ��������������һ�����ӣ�
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();
�κ���Ҫ�������������в������ڹ�ϣ�е��н�������Ϊ��ֵ��
PL/Perl ����Ҳ�ܷ��ر�������������ͼ��ϡ�Ϊ�˼����������ұ�����
�ڴ���������������ŶӵȺ�����ͨ��ϣ����һ�η���һ�С����԰�
������˵����return_next
����������ע����
���һ��return_next
�󣬱������
return����return
undef�����߸��ã���
CREATE OR REPLACE FUNCTION perl_set_int(int) RETURNS SETOF INTEGER AS $$ foreach (0..$_[0]) { return_next($_); } return undef; $$ LANGUAGE plperl; SELECT * FROM perl_set_int(5); CREATE OR REPLACE FUNCTION perl_set() RETURNS SETOF testrowperl AS $$ return_next({ f1 => 1, f2 => 'Hello', f3 => 'World' }); return_next({ f1 => 2, f2 => 'Hello', f3 => 'PostgreSQL' }); return_next({ f1 => 3, f2 => 'Hello', f3 => 'PL/Perl' }); return undef; $$ LANGUAGE plperl;
����С����������Է��ص�һ����������ã�������ֱ�������� �����͡��������ͺ�������͵ı������������û��߹�ϣ���á� ������һЩ�򵥵����Ӱ������������Ϊ�������÷��أ�
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();
�������Ҫ����Ĵ���ʹ��strict����ָʾ���м���ѡ����á� ������ʱ��ȫ��ʹ�ã������SET plperl.use_strictΪ�档�⽫Ӱ����� PL/Perl�����ı��룬���ǶԵ�ǰ�Ự���Ѿ�������� ����û��Ӱ�졣���ڳ־õ�ȫ��ʹ�ã������� postgresql.conf�ļ������� plperl.use_strictΪ�档
�������ض������еij־�ʹ�ã����Լ򵥵ذ�
use strict;
���ں�����Ķ��㡣
��� Perl �汾�� 5.10.0 ���߸��ߣ�Ҳ����ʹ��
feature����ָʾ��
��һҳ | ��ʼҳ | ��һҳ |
PL/Perl - Perl �������� | ��һ�� | PL/Perl �е�����ֵ |