37.5. Ç¥Çö½Ä

PL/pgSQL¹®À¸·Î »ç¿ëµÇ´Â Ç¥Çö½ÄÀº ¸ðµÎ, ¼­¹öÀÇ ÁÖSQLÁýÇàÀÚ¸¦ »ç¿ëÇØ 󸮵˴ϴÙ. »ç½Ç»ó, ´ÙÀ½°ú °°Àº Äõ¸®

SELECT 
expression

´Â SPI°ü¸®ÀÚ¸¦ »ç¿ëÇØ ½ÇÇàµË´Ï´Ù. Æò°¡ Àü¿¡, PL/pgSQLº¯¼ö ½Äº°ÀÚÀÇ »ý¼ºÀÌ ¸Å°³º¯¼ö¿¡ ÀÇÇØ ´ëüµË´Ï´Ù. ±×¸®°í, º¯¼ö·ÎºÎÅÍÀÇ ½ÇÁ¦ °ªÀÌ ¸Å°³º¯¼ö Á¤·Ä¿¡¼­ ÁýÇàÀÚ¿¡°Ô °Ç³×Áý´Ï´Ù. SELECT°¡ ´Ü Çѹø ÁغñµÇ°í, ¼­ºê½ÃÄöÆ® Æò°¡¿¡ Àç»ç¿ëµÇ±â À§ÇÑ Äõ¸®°èȹÀ» Çã¿ëÇÕ´Ï´Ù.

PostgreSQL ¸ÞÀÎ ÆÄ¼­¿¡ ÀÇÇØ ÇàÇØÁø Æò°¡´Â °è¼ÓÀûÀÎ °ªÀÇ ÇØ¼®¿¡ ¿ªÈ¿°ú¸¦ °¡Áý´Ï´Ù. »ó¼¼ÇϰÔ, µÎ ÇÔ¼ö°¡ ÇÏ´Â ÀÏ¿¡´Â Â÷À̰¡ ÀÖ½À´Ï´Ù.

CREATE FUNCTION logfunc1(logtxt text) RETURNS timestamp AS $$
    BEGIN
        INSERT INTO logtable VALUES (logtxt, 'now');
        RETURN 'now';
    END;
$$ LANGUAGE plpgsql;

¹×

CREATE FUNCTION logfunc2(logtxt text) RETURNS timestamp AS $$
    DECLARE
        curtime timestamp;
    BEGIN
        curtime := 'now';
        INSERT INTO logtable VALUES (logtxt, curtime);
        RETURN curtime;
    END;
$$ LANGUAGE plpgsql;

logfunc1ÀÇ °æ¿ì¿¡´Â, PostgreSQL¸ÞÀÎ ÆÄ¼­´Â, INSERT¿ëÀÇ °èȹÀ» ÁغñÇÒ ¶§¿¡, logtableÀÇ ´ë»ó¿­ÀÇ ÇüÅ·κÎÅÍ 'now'¸¦ timestamp¿Í ÇØ¼®ÇØ¾ß ÇÏ´Â °ÍÀ» ÆÄ¾ÇÇϰí ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÇØ, ÆÄ¼­´Â INSERT°¡ °èȹµÈ ½ÃÁ¡¿¡¼­ 'now'¸¦ Á¤¼ö·Î º¯È¯ÇØ, ±× Á¤¼ö°ªÀ» ±× ÈÄÀÇ ¼¼¼ÇÀÇ À¯È¿±â°£¿¡ À־ÀÇ logfunc1ÀÇ ¸ðµç È£Ãâ·Î »ç¿ëÇÕ´Ï´Ù. ¸»ÇÒ °Íµµ ¾ø½À´Ï´Ù¸¸, À̰ÍÀº ÇÁ·Î±×·¡¸Ó°¡ ÀǵµÇÑ µ¿ÀÛÀÌ ¾Æ´Õ´Ï´Ù.

logfunc2ÀÇ °æ¿ì¿¡¼­´Â, PostgreSQL¸ÞÀÎ ÆÄ¼­´Â 'now'ÀÇ ÇüŸ¦ °áÁ¤ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ±× ¶§¹®¿¡, now¶ó´Â ¹®ÀÚ¿­À» °¡Áö´Â textÇüÀÇ µ¥ÀÌÅͰªÀ» µ¹·ÁÁÝ´Ï´Ù. curtime·ÎÄà º¯¼ö¿¡ ´ëÀÔÇÒ ¶§¿¡, PL/pgSQLinterpreter´Â ÀÌ ¹®ÀÚ¿­À» text_out¿Í timestamp_inÇÔ¼ö¸¦ º¯È¯¿¡ »ç¿ëÇØ timestampÇü¿¡ ij½ºÆ® ÇÕ´Ï´Ù. ±×·¯´Ï±î, ¿¬»êµÈ ŸÀÓ½ºÅÛÇÁ´Â, ÇÁ·Î±×·¡¸Ó°¡ ÀǵµÇÑ ´ë·Î, ½ÇÇàÇÒ ¶§¿¡ °»½ÅµË´Ï´Ù.

·¹ÄÚµå º¯¼öÀÇ º¯Çϱ⠽¬¿î ¼ºÁúÀº ÀÌ Á¢¼Ó¿¡ ´ëÇØ ´Ù¸¥ ¹®Á¦°¡ µË´Ï´Ù. ·¹ÄÚµå º¯¼öÀÇ Çʵ尡 ½ÄÀ̳ª ¹®Àå Áß¿¡¼­ »ç¿ëµÇ´Â °æ¿ì, ±× ÇʵåÀÇ µ¥ÀÌÅÍÇüÀ» ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ º¯°æÇؼ­´Â ¾ÈµË´Ï´Ù. °¢°¢ÀÇ ½ÄÀÌ ÃÖÃÊ·Î ½ÇÇàµÇ¾úÀ» ¶§ÀÇ µ¥ÀÌÅÍÇüÀ» »ç¿ëÇØ, ±× ½ÄÀÇ °èȹÀÌ ÀÛ¼ºµÇ±â ¶§¹®ÀÔ´Ï´Ù. ÇÊ¿äÇÑ °æ¿ì EXECUTE¸¦ »ç¿ëÇØ ÀÌ ¹®Á¦¸¦ ȸÇÇÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.