39.6. PL/Perl Æ®¸®°Å

PL/Perl¸¦ »ç¿ëÇØ Æ®¸®°Å ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. Æ®¸®°Å ÇÔ¼ö¿¡¼­´Â, $_TD¶ó´Â ÇØ½Ã¿¡ÀÇ ÂüÁ¶¿¡, ÇöÀçÀÇ Æ®¸®°Å À̺¥Æ®¿¡ °üÇÑ Á¤º¸°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. $_TD´Â ±¤¿ª º¯¼öÀ̸ç, °¢ Æ®¸®°Å È£Ãâ¿¡ ´ëÇØ¼­ ±¹¼ÒÀûÀÎ °ªÀ» µû·Î µû·Î ²¨³À´Ï´Ù. ÀÌÇÏ¿¡ $_TD¶ó´Â ÇØ½Ã¿¡ÀÇ ÂüÁ¶ÀÇ Çʵ带 ³ªÅ¸³À´Ï´Ù.

$_TD->{new}{foo}

NEWÀÇ foo·Ä°ª.

$_TD->{old}{foo}

OLDÀÇ foo·Ä°ª.

$_TD->{name}

ºÒ·Á °£ Æ®¸®°ÅÀÇ À̸§.

$_TD->{event}

Æ®¸®°Å À̺¥Æ®. INSERT,UPDATE,DELETE, ȤÀºUNKNOWN.

$_TD->{when}

Æ®¸®°Å°¡ ¾ðÁ¦ ºÒ·Á °¬´ÂÁö. BEFORE ,AFTER, ȤÀº UNKNOWN.

$_TD->{level}

Æ®¸®°Å ·¹º§. ROW, STATEMENT, ȤÀº UNKNOWN.

$_TD->{relid}

Æ®¸®°ÅÀÇ ¹ßÇà¿ø Å×À̺íÀÇ OID.

$_TD->{table_name}

Æ®¸®°ÅÀÇ ¹ßÇà¿ø Å×À̺íÀÇ À̸§.

$_TD->{relname}

Æ®¸®°ÅÀÇ ¹ßÇà¿ø Å×À̺íÀÇ À̸§. À̰ÍÀº ÆóÁö ¿¹Á¤À¸·Î, ÇâÈÄ ¸±¸®½º¿¡¼­ »èÁ¦µÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ´ë½Å¿¡ $_TD->{table_name}¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä.

$_TD->{table_schema}

Æ®¸®°ÅÀÇ ¹ßÇà¿ø Å×À̺íÀÌ Á¸ÀçÇÏ´Â ½ºÅ°¸¶ÀÇ À̸§.

$_TD->{argc}

Æ®¸®°Å ÇÔ¼öÀÇ ÀÎÀÚÀÇ ¼ö.

@{$_TD->{args}}

Æ®¸®°Å ÇÔ¼öÀÇ ÀÎÀÚ. $_TD->{argc}°¡ 0ÀÇ °æ¿ì´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.

Æ®¸®°Å´Â ÀÌÇÏÀÇ ¾î´ÀÂÊÀ̵çÀ» µ¹·ÁÁÙ ¼ö°¡ ÀÖ½À´Ï´Ù.

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