¾�ΥС�������ʸ�� �� 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

39.6. PL/Tcl�Υȥꥬ�ץ���������

�ȥꥬ�ץ����������PL/Tcl�Ǻ������뤳�Ȥ��Ǥ��ޤ��� PostgreSQL�Ǥϡ��ȥꥬ�Ȥ��ƸƤӽФ����ץ���������ϡ�trigger��������ͤ��֤������Τʤ��ؿ��Ȥ����������ɬ�פ�����ޤ���

�ȥꥬ�ޥ͡����㤫��ξ���ϡ��ʲ����ѿ���˳�Ǽ����ƥץ������������Τ��Ϥ���ޤ���

$TG_name

CREATE TRIGGERʸ�ˤ��ȥꥬ̾��

$TG_relid

���Υȥꥬ�ץ���������ƤӽФ���ȯ�������ơ��֥�Υ��֥�������ID��

$TG_table_name

���Υȥꥬ�ץ���������ƤӽФ���ȯ�������ơ��֥��̾����

$TG_table_schema

���Υȥꥬ�ץ���������ƤӽФ���ȯ�������ơ��֥�Υ������ޡ�

$TG_relatts

��Ƭ�˶��Υꥹ�����Ǥ���ġ��ơ��֥����̾��Tcl�ꥹ�ȡ� Tcl��lsearch���ޥ�ɤ���Ѥ��ơ����Υꥹ�Ȥ�����̾�򸡺����뤳�Ȥǡ��ǽ�����1�Ȥ��������ֹ椬�֤���ޤ��� ����ϡ�PostgreSQL�Ǥ��̾������ֹ��դ���Ʊ���Ǥ� �ʤޤ����Υꥹ�����Ǥϡ���¦�����°���ֹ�����������뤿��ˡ�������줿��ΰ��֤˸���ޤ��ˡ�

$TG_when

�ȥꥬ�ƤӽФ��μ���˱�������BEFORE�ޤ���AFTER�Ȥ���ʸ����

$TG_level

�ȥꥬ�ƤӽФ��μ���˱�������ROW�ޤ���STATEMENT�Ȥ���ʸ����

$TG_op

�ȥꥬ�ƤӽФ��μ���˱�������INSERT��UPDATE �ޤ���DELETE�Ȥ���ʸ����

$NEW

INSERT/UPDATEư��ξ��Ͽ������ơ��֥�Ԥ��ͤ�DELETEư��ξ��϶������Ϣ������ ����Υ���ǥå�������̾�Ǥ��� NULL����Ϥ���������ˤϸ���ޤ���

$OLD

UPDATE/DELETEư��ξ��ϸŤ��ơ��֥�Ԥ��ͤ�INSERTư��ξ��϶������Ϣ������ ����Υ���ǥå�������̾�Ǥ��� NULL����Ϥ���������ˤϸ���ޤ���

$args

CREATE TRIGGERʸ�ǻ��ꤵ�줿���ץ���������ؤΰ�����Tcl�ꥹ�ȡ� ���ΰ����ϡ��ץ������������Τ���$1 ... $n�Ȥ��Ƥ⥢���������뤳�Ȥ��Ǥ��ޤ���

�ȥꥬ�ץ��������㤫�������ͤϡ�OK�Ȥ���ʸ����SKIP�Ȥ���ʸ����array get Tcl���ޥ�ɤˤ�ä��֤����ꥹ�Ȥ����1�Ĥ��뤳�Ȥ��Ǥ��ޤ��� ����ͤ�OK�ξ�硢�ȥꥬ��ȯ�Ԥ�������INSERT/UPDATE/DELETE�ˤ�����˽�������ޤ��� SKIP�ϥȥꥬ�ޥ͡�����ˤ��ιԤ��Ф������򲿤���Ϥ�������ߤ���褦�����Τ��ޤ��� �ꥹ�Ȥ��֤��줿���ϡ�PL/Tcl���Ф����ȥꥬ�ޥ͡�����ˤ�ä�Ϳ����줿$NEW�ǤϤʤ����ѹ������Ԥ���������褦�˥ȥꥬ�ޥ͡�������֤����Ȥ����Τ��ޤ� �ʤ����INSERT/UPDATE�ξ��Τ�ư��ޤ��ˡ� �����ޤǤ⤢��ޤ��󤬡����������ơ��ȥꥬ��BEFORE����FOR EACH ROW�λ��ˤΤ߰�̣������ޤ��� ����ʤ���С�����ͤ�̵�뤵��ޤ���

�����ǡ��ơ��֥���������ͤȤ��Ƥ��ιԤ��Ф��빹������Ͽ�����롢������Υȥꥬ�ץ������������򼨤��ޤ��� �����ιԤ��������줿���ϡ������ͤ�0�˽�������졢���θ�γƹ���������1���û�����ޤ���

CREATE FUNCTION trigfunc_modcount() RETURNS trigger AS $$
    switch $TG_op {
        INSERT {
            set NEW($1) 0
        }
        UPDATE {
            set NEW($1) $OLD($1)
            incr NEW($1)
        }
        default {
            return OK
        }
    }
    return [array get NEW]
$$ LANGUAGE pltcl;

CREATE TABLE mytab (num integer, description text, modcnt integer);

CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDATE ON mytab
    FOR EACH ROW EXECUTE PROCEDURE trigfunc_modcount('modcnt');

�ȥꥬ�ץ��������㼫�Ȥ���̾��ǧ�����Ƥ��ʤ��������ܤ��Ƥ��������� ����ϡ��ȥꥬ�ΰ����Ȥ���Ϳ�����ޤ��� ����ˤ�ꡢ���Υȥꥬ�ץ�����������̤Υơ��֥�Ǻ����Ѥ��뤳�Ȥ��Ǥ��ޤ���