36.6. PL/Tcl ��Ĵ���������

���������̿����� PL/Tcl д��PostgreSQL Ҫ�������������õĹ��̱�������Ϊû�в������ҷ�������Ϊ trigger �ĺ�����

���������������ݸ����������Ϣ��ͨ������������ݵģ�

$TG_name

CREATE TRIGGER�����Ĵ��������ơ�

$TG_relid

���´����������õı�Ķ��� ID��

$TG_relatts

��һ���ձ�Ԫ��Ϊǰ���ı����ֶ����Ƶ� Tcl �б� ������Tcl���� lsearch���б������Ԫ������ʱ�� ���صĴ� 1 ��ʼ����������������PostgreSQL ���ֶα�ŵĴ�ͳһ���� ���Ѿ���ɾ�������ֶ�λ�õĿյ��б�Ԫ����Ȼ����֣����������Ա�����ֶεĶ�Ӧ������ȷ�ġ���

$TG_when

�ɴ����������¼��������ַ���BEFORE��AFTER��

$TG_level

�ɴ����������¼��������ַ���ROW��STATEMENT��

$TG_op

�ɴ����������¼��������ַ���INSERT��UPDATE�� DELETE��

$NEW

һ���������飬����INSERT/UPDATE �������±��У������DELETE��Ϊ�ա� �����������ֶ����������ġ���ЩΪ�յ��ֶβ����������г��֡�

$OLD

һ���������飬����UPDATE/DELETE �������±��У������INSERT��Ϊ�ա� �����������ֶ����������ġ���ЩΪ�յ��ֶβ����������г��֡�

$args

��ͬ��CREATE TRIGGER���������IJ���һ���� Tcl ������ ��Щ�����ڹ����������ͨ��$1...$n�����ʡ�

���������̷��ص�ֵ���ַ���OK��SKIP֮һ�� ����һ����array get Tcl ����ص����������Ķ����� �������ֵ��OK�������������IJ��� ��INSERT/UPDATE/DELETE�������������С� SKIP���ߴ�������������������غ��Ը��еIJ����� �������һ�����飬��ô������ PL/Tcl ����һ���޸ĺ���и��������������� ���н�������$NEW��ֻ��INSERT/UPDATE �������ã��и������С� ��Ȼ����Щֻ���ڴ�������BEFORE��FOR EACH ROWʱ�������壻���򷵻�ֵ�������ԡ�

������һ��С�Ĵ��������̵����ӣ� ��ǿ�Ʊ��ڵ�һ������ֵ���еĸ��´������и��١� �Բ�������У���ֵ��ʼ��Ϊ 0 ������ÿ�θ��²����м�һ��

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');

��ע�ⴥ�������̱�����֪���ֶ����֣���Щ�ǴӴ������������ṩ�ġ������������ǿ��Խ����������̸����ڲ�ͬ�ı�