37.6. PL/Perl ������

PL/Perl ���ڿ���ͨ��ʹ�� $_TD ɢ����������д������������

PL/Perl ����������д�������������ڴ����������ɢ������ $_TD �����йص�ǰ�������¼�����Ϣ��ɢ������ $_TD ���ֶ��ǣ�

$_TD->{new}{foo}

�ֶ� foo �� NEW ֵ��

$_TD->{old}{foo}

һ���ֶ� foo �� OLD ֵ��

$_TD->{name}

�����õĴ�����������

$_TD->{event}

�������¼���INSERT��UPDATE��DELETE������ UNKNOWN

$_TD->{when}

��ʱ���ô�������BEFORE��AFTER������ UNKNOWN

$_TD->{level}

�������ļ���ROW��STATEMENT������ UNKNOWN

$_TD->{relid}

�����������ı�� OID

$_TD->{relname}

�����������ı������

@{$_TD->{argv}}

�����������IJ���

$_TD->{argc}

�����������IJ�������

��������������֮һ��

return;

ִ�и����

"SKIP"

��ִ�и����

"MODIFY"

���� NEW �б������������޸Ĺ�

������һ����������������ʾ�������һЩ������

CREATE TABLE test (
        i int,
        v varchar
);

CREATE OR REPLACE FUNCTION valid_id() RETURNS trigger AS $$
    if (($_TD->{new}{i} >= 100) || ($_TD->{new}{i} <= 0)) {
        return "SKIP";    # ���� INSERT/UPDATE ����
    } elsif ($_TD->{new}{v} ne "immortal") {
        $_TD->{new}{v} .= "(modified by trigger)";
        return "MODIFY";  # �޸�һ�в���ִ�� INSERT/UPDATE ����
    } else {
        return;           # ִ�� INSERT/UPDATE ����
    }
$$ LANGUAGE plperl;

CREATE TRIGGER test_valid_id_trig
    BEFORE INSERT OR UPDATE ON test
    FOR EACH ROW EXECUTE PROCEDURE valid_id();