¾�ΥС�������ʸ�� �� 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

Chapter 19. PL/pgSQL - SQL ��³������

Table of Contents
19.1. ����
19.1.1. PL/pgSQL ����Ѥ��뤳�Ȥ�����
19.1.2. PL/pgSQL �γ�ȯ
19.2. PL/pgSQL ��
19.3. ���
19.3.1. �ؿ���������̾
19.3.2. �Է�
19.3.3. �쥳����
19.3.4. °��
19.3.5. RENAME
19.4. ��
19.5. ����Ū��ʸ
19.5.1. ����
19.5.2. SELECT INTO
19.5.3. ��̤�����餵�ʤ������⤷�����䤤��碌�μ¹�
19.5.4. ưŪ�䤤��碌�μ¹�
19.5.5. ��̥��ơ������μ���
19.6. ���湽¤
19.6.1. �ؿ����������
19.6.2. ���ʬ��
19.6.3. ñ��ʥ롼��
19.6.4. �䤤��碌��̤η��֤�
19.7. ��������
19.7.1. ���������ѿ������
19.7.2. ��������򳫤�
19.7.3. ����������
19.8. ���顼�ȥ�å�����
19.9. �ȥꥬ�ץ���������
19.10. ��
19.11. Oracle PL/SQL ����ΰܿ�
19.11.1. ��ʰ㤤
19.11.2. �ؿ��ΰܿ�
19.11.3. �ץ���������
19.11.4. �ѥå�����
19.11.5. ���դ��٤�����¾�λ���
19.11.6. ��Ͽ

PL/pgSQL �ϡ�PostgreSQL�ǡ����١��������ƥ��Ѥ��ɤ߹��߲�ǽ�ʼ�³������Ǥ���

���Υѥå������Υ��ꥸ�ʥ�ϡ�Jan Wieck��ˤ�äƽ񤫤�ޤ��������Υɥ�����Ȥΰ�����Roberto Mello ��()�ˤ�äƽ񤫤�ޤ�����

19.1. ����

PL/pgSQL ���߷���Ū�ϡ����Τ褦���ɤ߹��߲�ǽ�ʼ�³������Ǥ�����

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 �Ǥ�¸��Ǥ��ޤ���ʣ���ʾ��Τ���黻�����ؿ��κ��������������ؿ���Ȥä��黻�Ҥ�������ؿ�����ǥå����˺��������ؿ�����Ѥ��뤳�Ȥ���ǽ�Ǥ���

19.1.1. PL/pgSQL ����Ѥ��뤳�Ȥ�����

19.1.1.1. ���褤�ѥե����ޥ�

SQL �ϡ�PostgreSQL (����Ӥ���¾�ΤۤȤ�ɤΥ�졼����ʥ�ǡ����١���) ���䤤��碌����Ȥ��ƻ��Ѥ��Ƥ������Ǥ��������������ꡢ�������ưפǤ�����������������SQL ʸ�ϡ��ǡ����١��������Фˤ�äƸġ��˼¹Ԥ���ʤ���Ф����ޤ���

����ϥ��饤����ȥ��ץꥱ���������Ф��ưʲ��Τ褦�ʤ��Ȥ��׵ᤷ�Ƥ��ޤ��� �ޤ����ǡ����١��������Ф��䤤��碌���������ޤ��� ���ˤ��줬���������Τ��Ԥ��ޤ��� ���ˡ���̤�������ޤ��� ���˼㴳�η׻���Ԥ��ޤ��� �����ơ������Ф˼����䤤��碌���������ޤ������饤����Ȥ��ǡ����١��������Хޥ��󤫤�ߤưۤʤ�ޥ���ξ�硢�����ץ������̿��򾷤����ͥåȥ���������С��إåɤ򵯤������⤷��ޤ���

PL/pgSQL ��Ȥ����Ȥǡ��׻���ʣ�����䤤��碌��ǡ����١��������� �����ˤҤȤޤȤ�˼¹Ԥ��뤳�Ȥ��Ǥ��ޤ��� ���Τ褦�ˡ���³������ΰ��Ϥ� SQL �λȤ��䤹���������碌�Ƥ���ˤ⤫����餺�����٤Ƥˤ����ƥ��饤�����/�������̿��Υ����С��إåɤ��ʤ��ΤǤ����ֻ��֤�����Ǥ��ޤ�������ˤ�꤫�ʤ���ǽ����夵���뤳�Ȥ��Ǥ��ޤ���

19.1.1.2. SQL �Υ��ݡ���

PL/pgSQL �ϼ�³�������ǽ�Ϥ� SQL �ν�������ʿ�����˲ä�����ΤǤ���PL/pgSQL �Ǥϡ��ǡ��������󡢱黻�ҡ�SQL �ؿ������ƻ��Ѥ��뤳�Ȥ��Ǥ��ޤ���

19.1.1.3. �ܿ���

PL/pgSQL �ؿ��� PostgreSQL ��Ǽ¹Ԥ���ޤ��Τǡ������δؿ��� PostgreSQL ����Ư�������ƤΥץ�åȥե�����Ǽ¹Ԥ��뤳�Ȥ��Ǥ��ޤ��� ���Τ褦�ˡ������ɤ�����ѤǤ��뤿�ᡢ��ȯ���Ѥ��㸺�Ǥ��ޤ���

19.1.2. PL/pgSQL �γ�ȯ

�ä�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 ��Ȥ���ˡ�Ǥ�����������Ѥ���ȡ�ñ�������򥨥������פ������ꡢ�ؿ��κ��ľ����ǥХå����ưפ˹Ԥ���Ȥ����ɤ���������ޤ���