PL/pgSQL �ϡ�PostgreSQL�ǡ����١��������ƥ��Ѥ��ɤ߹��߲�ǽ�ʼ�³������Ǥ���
���Υѥå������Υ��ꥸ�ʥ�ϡ�Jan Wieck��ˤ�äƽ�ޤ��������Υɥ�����Ȥΰ�����Roberto Mello ��(<[email protected]>)�ˤ�äƽ�ޤ�����
PL/pgSQL ���߷���Ū�ϡ����Τ褦���ɤ߹��߲�ǽ�ʼ�³������Ǥ�����
�ؿ��ȥȥꥬ�ץ����������������뤿��˻��ѤǤ��뤳��
SQL��������湽¤���ɲä��뤳��
ʣ���ʱ黻����ǽ�Ǥ��뤳��
���٤ƤΥ桼����������ؿ����黻�Ҥ�Ѿ����뤳��
�����Фˤ�äƿ���Ǥ����Τ�����Ǥ��뤳��
�Ȥ��䤹������
PL/pgSQL �ƤӽФ��ϥ�ɥ�ϴؿ��Υ������ƥ����Ȥ���Ϥ������Ƥ��δؿ���(���餫�ΥХå�����ɥץ����������)�ƤӽФ��줿���˥Х��ʥ������̿��ĥ�������Ǻ������ޤ�������̿��ĥ�ϴ����� PL/pgSQL ʸ��¤���Ѵ�����ޤ������ؿ������θġ��� SQL ���� SQL �䤤��碌��¨�¤��Ѵ�����ޤ���
�Ƽ���SQL �䤤��碌�����Ƥ��δؿ��ǻ��Ѥ������ˡ�PL/pgSQL ���ץ��(SPI �ޥ͡������SPI_prepare��SPI_saveplan �ؿ�����Ѥ���)�¹Էײ�ν�����Ԥ��ޤ������μ����䤤��碌�����˹Ԥ�����ˤϡ����ν������줿�ײ������Ѥ��ޤ��� �������ơ��¹Էײ褬ɬ�פȤ�����䤤��碌��¿�����ġ�����դ������ɤ���Ĵؿ��Ǥϡ����Υǡ����١�����³��ͭ���ʴּºݤ˻��Ѥ��줿��ʬ�ˤĤ��ƤΤߡ��ײ�ν�������¸���Ԥ��ޤ��� ����ˤ�ꡢ���Ϥˤ����������֤ʤ�û�̤�����³������ؿ���ʸ���䤤��碌�ײ���������뤳�Ȥ��Ǥ��ޤ�������������μ����䤤��碌�Υ��顼�����ؿ��γ�����ʬ���¹Ԥ����ޤǸ��Ф���ʤ����ȤǤ���
�ؿ����������䤤��碌�Ѥ� PL/pgSQL ���䤤��碌�ײ���������ȡ����Υǡ����١�����³��ͭ���ʴ֡����ηײ�Ϻ����Ѥ���ޤ����̾盧��ˤ����ǽ�ϸ��夷�ޤ��� ��������ưŪ�˥ǡ����١����������ޤ��ѹ�����������꤬�����Ĥ�ȯ�����ޤ������Ȥ��С��ʲ��Τ褦�ˤ��ޤ���
CREATE FUNCTION populate() RETURNS INTEGER AS '
DECLARE
-- �����
BEGIN
PERFORM my_function();
END;
' LANGUAGE 'plpgsql';��δؿ���¹Ԥ���ȡ�PERFORM ʸ�Ѥ��������줿�䤤��碌�ײ�Ǥϡ� my_function() �� OID �Ȥ��ޤ�����ˡ�my_function() ���������ƺ�������ȡ�populate() ��my_function() �Ĥ��뤳�Ȥ��Ǥ��ʤ��ʤ�ޤ������ξ�硢�����˥���ѥ��뤵���褦�� populate()��ƺ������ޤ��ϡ����ʤ��Ȥ�ǡ����١������å���������ư���ʤ���Фʤ�ޤ���
���Τ褦�� PL/pgSQL �ϼ¹Էײ����¸���ޤ��Τǡ�PL/pgSQL �ؿ����ľ�ܸ�����䤤��碌�ϼ¹Ԥ��٤�Ʊ���ơ��֥�ȥե�����ɤȤ��ʤ���Фʤ�ޤ��� �Ĥޤꡢ�䤤��碌�ˤơ��ơ��֥��ե�����ɤ�̾���Ȥ��ƥѥ�������Ѥ��뤳�Ȥ��Ǥ��ޤ��¹Ԥ��٤˿������䤤��碌�ײ���������̵�̤�и�� PL/pgSQL�� EXECUTE ʸ��Ȥä�ưŪ�䤤��碌�������뤳�Ȥǡ��������¤����Ǥ��ޤ���
Note: PL/pgSQL EXECUTE ʸ�ϡ�PostgreSQL �ΥХå�����ɤǥ��ݡ��Ȥ���Ƥ��� EXECUTE ʸ�Ȥϴ�Ϣ������ޤ��� �Хå�����ɤ� EXECUTE ʸ�ϡ�PL/pgSQL �ؿ���ǻ��Ѥ��뤳�ȤϤǤ��ޤ��� �ʻ��Ѥ���ɬ�פ⤢��ޤ���ˡ�
�桼��������Ѥ��������Ѵ��ȷ��ؿ��������C����ؿ�������Ǥ�����Ϥ��٤� PL/pgSQL �Ǥ�¸��Ǥ��ޤ���ʣ���ʾ��Τ���黻�����ؿ��κ��������������ؿ���Ȥä��黻�Ҥ�������ؿ�����ǥå����˺��������ؿ�����Ѥ��뤳�Ȥ���ǽ�Ǥ���
���褤�ѥե����ޥ� (Section 19.1.1.1����)
SQL ���ݡ��� (Section 19.1.1.2����)
������ (Section 19.1.1.3����)
SQL �ϡ�PostgreSQL (����Ӥ���¾�ΤۤȤ�ɤΥ�졼����ʥ�ǡ����١���) ���䤤��碌����Ȥ��ƻ��Ѥ��Ƥ������Ǥ��������������ꡢ�������ưפǤ�����������������SQL ʸ�ϡ��ǡ����١��������Фˤ�äƸġ��˼¹Ԥ���ʤ���Ф����ޤ���
����ϥ��饤����ȥ��ץꥱ���������Ф��ưʲ��Τ褦�ʤ��Ȥ��ᤷ�Ƥ��ޤ��� �ޤ����ǡ����١��������Ф��䤤��碌���������ޤ��� ���ˤ��줬���������Τ��Ԥ��ޤ��� ���ˡ���̤�������ޤ��� ���˼㴳�η���Ԥ��ޤ��� �����ơ������Ф˼����䤤��碌���������ޤ������饤����Ȥ��ǡ����١��������Хޥ���ߤưۤʤ�ޥ���ξ�硢�����ץ������̿������ͥåȥ���������С��إåɤ������⤷��ޤ���
PL/pgSQL ��Ȥ����Ȥǡ�����ʣ�����䤤��碌��ǡ����١��������� �����ˤҤȤޤȤ�˼¹Ԥ��뤳�Ȥ��Ǥ��ޤ��� ���Τ褦�ˡ���³������ΰ��Ϥ� SQL �λȤ��䤹���������碌�Ƥ���ˤ⤫����餺�����٤Ƥˤ����ƥ��饤�����/�������̿��Υ����С��إåɤ��ʤ��ΤǤ����ֻ��֤�����Ǥ��ޤ�������ˤ�꤫�ʤ���ǽ����夵���뤳�Ȥ��Ǥ��ޤ���
�ä�Oracle �� PL/SQL �Τ褦��¾�Υǡ����١����μ�³������dz�ȯ�������Ȥ�����ʤ�С�PL/pgSQL �ˤ����볫ȯ�ϤȤƤ�����䤹���Ǥ��礦��PL/pgSQL �dz�ȯ����2�Ĥ��ɤ���ˡ��Ҳ𤷤ޤ���
�ƥ����ȥ��ǥ�����psql��Ȥäƥե��������ɤ߹��ߤ�����ˡ����Ѥ��뤳��
PostgreSQL�� GUI �ġ���Ǥ��� PgAccess ��Ȥ�����
PL/pgSQL �dz�ȯ�����Ĥ��ɤ���ˡ��ñ��ˡ��ؿ����������Τ˼�ʬ�ι����ʥƥ����ȥ��ǥ�����Ȥ����⤦��ĤΥ�����ɥ��ǡ�psql (PostgreSQL ���ü���˥�) ����Ѥ��ƴؿ����ɤ߹��ޤ��뤳�ȤǤ���������ˡ�ǹԤ����ˤ� CREATE OR REPLACE FUNCTION ����Ѥ��ƴؿ���������������褤�Ǥ��礦��������ˡ�ˤ��ե��������ɤ߹��ߤ��뤳�Ȥǡ��ؿ���������뤳�Ȥ��Ǥ��ޤ������Ȥ��С��ʲ��Τ褦�ˤ��ޤ���
CREATE OR REPLACE FUNCTION testfunc(INTEGER) RETURNS INTEGER AS ' .... end; ' LANGUAGE 'plpgsql';
psql ��¹Ԥ����ʲ��Τ褦�˴ؿ�����ե�������ɤ߹��ߡ��ޤ��ϡ����ɤ߹��ߤ��뤳�Ȥ��Ǥ��ޤ���
\i filename.sql
���θ夹���ˡ��ؿ������뤿��� SQL ���ޥ�ɤ�ȯ�Ԥ��뤳�Ȥ��Ǥ��ޤ���
PL/pgSQL �ˤ����볫ȯ�Τ⤦��Ĥ��ɤ���ˡ�ϡ�PostgreSQL�� GUI �ġ���Ǥ��� PgAccess ��Ȥ���ˡ�Ǥ�����������Ѥ���ȡ�ñ�������������פ������ꡢ�ؿ��κ��ľ����ǥХå����ưפ˹Ԥ���Ȥ����ɤ���������ޤ���