| PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 36. PL/Tcl - Tcl �������� | Fast Forward | Next | 
���������̿����� PL/Tcl д��PostgreSQL Ҫ�������������õĹ��̱�������Ϊû�в������ҷ�������Ϊ trigger �ĺ�����
���������������ݸ����������Ϣ��ͨ������������ݵģ�
CREATE TRIGGER�����Ĵ��������ơ�
���´����������õı�Ķ��� ID��
��һ���ձ�Ԫ��Ϊǰ���ı����ֶ����Ƶ� Tcl �б� ������Tcl���� lsearch���б������Ԫ������ʱ�� ���صĴ� 1 ��ʼ����������������PostgreSQL ���ֶα�ŵĴ�ͳһ���� ���Ѿ���ɾ�������ֶ�λ�õĿյ��б�Ԫ����Ȼ����֣����������Ա�����ֶεĶ�Ӧ������ȷ�ġ���
�ɴ����������¼��������ַ���BEFORE��AFTER��
�ɴ����������¼��������ַ���ROW��STATEMENT��
�ɴ����������¼��������ַ���INSERT��UPDATE�� DELETE��
һ���������飬����INSERT/UPDATE �������±��У������DELETE��Ϊ�ա� �����������ֶ����������ġ���ЩΪ�յ��ֶβ����������г��֡�
һ���������飬����UPDATE/DELETE �������±��У������INSERT��Ϊ�ա� �����������ֶ����������ġ���ЩΪ�յ��ֶβ����������г��֡�
��ͬ��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');��ע�ⴥ�������̱�����֪���ֶ����֣���Щ�ǴӴ������������ṩ�ġ������������ǿ��Խ����������̸����ڲ�ͬ�ı�