37.1. °³¿ä

PL/pgSQL ÄÝ Çڵ鷯 ÆÄ¼­ ÇÔ¼öÀÇ ¼Ò½º ÅØ½ºÆ®¸¦ »ý¼ºÇϰí, ³»ºÎ ¹ÙÀ̳ʸ® Áö½Ã Æ®¸® ù ¹øÂ° ÇÔ¼ö°¡ (°¢ ¼¼¼± ³»ÀÇ)ºÒ¸³´Ï´Ù. Áö½Ã Æ®¸®´Â PL/pgSQL ¸í·É¹® ±¸Á¶¸¦ ÃæºÐÈ÷ ¹ø¿ªÇϰí ÀÖÁö¸¸, ÇÔ¼ö¿¡¼­ °³°³ÀÇ SQLÇ¥Çö°ú SQL¸í·ÉÀº ¹Ù·Î ¹ø¿ªµÇÁö ¾Ê½À´Ï´Ù.

°¢ Ç¥Çö°ú SQL¸í·ÉÀº ¿ì¼± ½Ä¿¡¼­ »ç¿ëµË´Ï´Ù. PL/pgSQL ÀÎÅÍÇÁ¸®ÅÍ´Â ÁغñµÈ ½ÇÇà°èȹÀ» »ý¼ºÇÕ´Ï´Ù.(SPI °ü¸®ÀÚÀÇ SPI_prepare ¿Í SPI_saveplan ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿©) ÀÇ ¼­ºê½ÃÄöÆ®´Â Ç¥ÇöÀ̳ª ¸í·ÉÀº ÁغñµÈ °èȹÀ» Àç»ç¿ëÇÕ´Ï´Ù. µû¶ó¼­, ½ÄÀº ½ÇÇà°èȹ¿¡ ÇÊ¿äÇÑ ¿©·¯ ¸í·É¹®À» Æ÷ÇÔÇÏ´Â ÄÁµð¼Å³Î ÄÚµå¿Í ÇÔ²², µ¥ÀÌÅͺ£À̽º ¿¬°áÀÇ ¼ö¸í µ¿¾È »ç¿ëµÉ °èȹÀ» ÁغñÇÏ°í º¸Á¸ÇÕ´Ï´Ù. ÆÄ¼­¿¡ ÇÊ¿äÇÑ Àüü ½Ã°£À» ÃæºÐÈ÷ ÁÙÀ̰í, PL/pgSQLÇÔ¼öÀÇ ¸í·É¹®ÀÇ ½ÇÇà°èȹÀ» »ý¼ºÇÕ´Ï´Ù. ´ÜÁ¡Àº ƯÁ¤ ½ÄÀ̳ª ¸í·ÉÀÇ ¿¡·¯°¡ ÇÔ¼öÀÇ ºÎºÐÀÌ ½ÇÇà¿¡ À̸£Áö ¾ÊÀ» ¶§±îÁö °¨ÁöÇÏÁö ¸øÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.

Çѹø PL/pgSQLÀÌ ÇÔ¼öÀÇ Æ¯Á¤ ¸í·ÉÀÇ ½ÇÇà°èȹÀ» ¸¸µé¸é, µ¥ÀÌÅͺ£À̽º ¿¬°áÀÇ ¼ö¸í °èȹÀ» Àç»ç¿ëÇÕ´Ï´Ù.

CREATE FUNCTION populate() RETURNS integer AS $$
DECLARE
    -- declarations
BEGIN
    PERFORM my_function();
END;
$$ LANGUAGE plpgsql;

À§ÀÇ ½ÄÀ» ½ÇÇàÇϸé, PERFORM¸í·É¹®À» À§ÇØ ÀÛ¼ºµÈ ½ÇÇà °èȹ¿¡ my_function()ÀÇ OID¸¦ ÂüÁ¶ÇÒ °ÍÀÔ´Ï´Ù. my_function()À» Áö¿ì°Å³ª Àç»ý¼ºÇÏ·Á¸é, populate()Àº ´õÀÌ»ó my_function()À» ãÀ» ¼ö ¾ø¾î¾ß ÇÕ´Ï´Ù. ±× ´ÙÀ½¿¡, populate()À» Àç»ý¼ºÇϰųª, Àû¾îµµ »õ·Î¿î µ¥ÀÌÅͺ£À̽º ¼¼¼ÇÀ» ½ÃÀÛÇØ, »õ·Ó°Ô ½ÃÀÛÇÏ´Â °ÍÀ» µû¶ó¾ß ÇÕ´Ï´Ù. ´Ù¸¥ ¹®Á¦ ȸÇÇ ¹æ¹ýÀº my_functionÀÇ Á¤ÀǸ¦ °»½ÅÇÒ ¶§,(ÇÔ¼ö°¡ "´ëüµÇ´Â" °ÍÀÏ ¶§, OIDÀº º¯ÇÏÁö ¾Ê½À´Ï´Ù.) CREATE OR REPLACE FUNCTIONÀ» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù.

PL/pgSQLÀ» ½ÇÇà °èȹ¿¡ ÀÌ·± ¹æ¹ýÀ¸·Î ÀúÀåÇϱ⠶§¹®¿¡, Á÷Á¢ÀûÀ¸·Î PL/pgSQL¿¡ ³ªÅ¸³ª´Â SQL ¸í·ÉÀº °°Àº Å×À̹ú°ú ¿­ÀÇ ¸ðµç ½ÇÇàÀ» ÂüÁ¶ÇØ¾ß ÇÕ´Ï´Ù. Áï, SQL¸í·ÉÀÇ Å×À̺íÀ̳ª ¿­ÀÇ À̸§À¸·Î¼­ ¸Å°³º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ Á¦ÇÑÀ» ÇÇÇϱâ À§Çؼ­, PL/pgSQL EXECUTE¸í·É¹®À» »ç¿ëÇÏ´Â ¿ªµ¿ÀûÀÎ ¸í·ÉÀ» ¸ðµç ½ÇÇà¿¡ »õ·Î¿î ½ÇÇà°èȹÀÇ ±¸¼ºÀ» Èñ»ýÇØ ±¸¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.

Note: PL/pgSQL EXECUTE¸í·É¹®Àº PostgreSQL¼­¹öÀÇ Áö¿øÀ» ¹Þ´Â EXECUTE SQL¸í·É¹®°ú °ü·ÃÀÌ ¾ø½À´Ï´Ù. ¼­¹öÀÇ EXECUTE¸í·É¹®Àº PL/pgSQLÇÔ¼ö(ÇÊ¿äÇÏÁö ¾ÊÀº) ³»¿¡¼­ »ç¿ëµÉ ¼ö ¾ø½À´Ï´Ù.

37.1.1. PL/pgSQL¸¦ »ç¿ëÀÇ ÀÌÁ¡

SQL´Â PostgreSQL¹× ±× ¿ÜÀÇ ´ëºÎºÐÀÇ RDB°¡ Äõ¸® ¾ð¾î·Î¼­ »ç¿ëÇÏ´Â ¾ð¾îÀÔ´Ï´Ù. À̽ļºÀÌ ÀÖ¾î, ½ÀµæÀÌ ¿ëÀÌÇÕ´Ï´Ù. ±×·¯³ª, ¸ðµç SQL¹®Àº µ¥ÀÌÅÍ º£À̽º ¼­¹ö¿¡ ÀÇÇØ °³º°ÀûÀ¸·Î ½ÇÇàµÇ¾î¾ßÇÕ´Ï´Ù.

À̰ÍÀº Ŭ¶óÀÌ¾ðÆ® ¾îÇø®ÄÉÀ̼ǿ¡ ´ëÇØ¼­ ÀÌÇÏ¿Í °°Àº °ÍÀ» ¿ä±¸Çϰí ÀÖ½À´Ï´Ù. ¿ì¼±, µ¥ÀÌÅÍ º£À̽º ¼­¹ö¿¡ Äõ¸®¸¦ ¼Û½ÅÇÕ´Ï´Ù. ´ÙÀ½¿¡ ±×°ÍÀÌ Ã³¸®µÇ´Â °ÍÀ» ±â´Ù¸³´Ï´Ù. ´ÙÀ½¿¡, °á°ú¸¦ ÃëµæÇØ ó¸®ÇÕ´Ï´Ù. ´ÙÀ½¿¡ °è»êÀ» ½Ç½ÃÇÕ´Ï´Ù. ±×¸®°í, ¼­¹ö¿¡ ´ÙÀ½ÀÇ Äõ¸®¸¦ ¼Û½ÅÇÕ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ µ¥ÀÌÅÍ º£À̽º ¼­¹ö ¸Ó½Å°ú ´Ù¸¥ ¸Ó½ÅÀÇ °æ¿ì, ÇÁ·Î¼¼½º°£ Åë½ÅÀ» ºÒ·¯, ³×Æ®¿öÅ©¡¤¿À¹öÇìµå¸¦ ÀÏÀ¸Å°°ÚÁö¿ä.

PL/pgSQL¸¦ »ç¿ëÇÏ´Â °ÍÀ¸·Î, °è»ê°ú º¹¼öÀÇ Äõ¸®¸¦ µ¥ÀÌÅÍ º£À̽º ¼­¹ö ³»ºÎ ¿¡¼­ ¿¬¼ÓÇØ ½ÇÇàÇÒ¼ö ÀÖ½À´Ï´Ù. ÀÌ¿Í °°ÀÌ, ¼ö¼Ó ¾ð¾îÀÇ ´É·Â°ú SQLÀÇ Æí¸®ÇÑ »ç¿ëÀ» °¡Áö°í ÀÖ´Â °Í¿¡µµ ºÒ±¸Çϰí, Ŭ¶óÀ̾ðÆ®/¼­¹ö Åë½ÅÀÇ ¿À¹öÇìµå¸¦ ²Ï Àý¾àÇÒ ¼ö ÀÖ½À´Ï´Ù.

À̰Ϳ¡ ÀÇÇØ, ÀúÀåµÈ ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê´Â ¾ÖÇø®ÄÉÀ̼ǰú ºñ±³ÇØ, ²Ï ¼º´ÉÀ» Çâ»ó½Ãų ¼ö°¡ ÀÖ½À´Ï´Ù.

¶Ç, PL/pgSQL¿¡¼­´Â SQL ¸ðµç µ¥ÀÌÅÍÇü, ¿¬»êÀÚ, ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

37.1.2. Áö¿øµÈ ÀÎÀÚ¿Í °á°ú µ¥ÀÌÅÍÇü

PL/pgSQL·Î ÀÛ¼ºµÈ ÇÔ¼ö´Â, ¼­¹ö·Î Áö¿øµÇ´Â ÀÓÀÇÀÇ ½ºÄ®¶ó µ¥ÀÌÅÍÇüÀ̳ª ¹è¿­ µ¥ÀÌÅÍÇüÀ» ÀÎÀڷμ­ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ°í ¶Ç, ÀÌ·¯ÇÑ ÇüŸ¦ °á°úÀûÀ¸·Î µ¹·ÁÁÙ ¼ö ÀÖ½À´Ï´Ù. ¶Ç, ÀÓÀÇÀÇ, À̸§À¸·Î ÁöÁ¤µÈ º¹ÇÕÇü(ÇàÇü)À» ¹Þ¾ÆµéÀ̰ųª µ¹·ÁÁÙ ¼öµµ ÀÖ½À´Ï´Ù. °Ô´Ù°¡ Section 7.2.1.4·Î ¼³¸íµÇ°í ÀÖµíÀÌ, PL/pgSQLÇÔ¼ö°¡ record¸¦ µ¹·ÁÁÖµµ·Ï ¼±¾ðÇÏ´Â °Íµµ °¡´ÉÇØ, ÀÌ °æ¿ì, °á°ú´Â ÇàÇüÀ¸·Î, ±× ¿­Àº È£ÃâÇÏ´Â Äõ¸® ¾È¿¡¼­ÀÇ ÁöÁ¤À¸·Î Á¤ÇØÁý´Ï´Ù.

¶Ç, PL/pgSQLÇÔ¼ö¸¦, anyelement¿Í anyarray¿Í anynonarray¿Í anyenumÀÇ ´Ù»óÇüÀ» ¹Þ¾ÆµéÀ̰ųª µ¹·ÁÁÖµµ·Ï ¼±¾ðÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Section 33.2.5ÀÇ ¼³¸í´ë·Î, ´Ù»óÇü ÇÔ¼ö·Î ´Ù·ç¾îÁö´Â µ¥ÀÌÅÍÇüÀº È£Ãâ¿¡ º¯µ¿ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ Section 37.4.1¿¡ ³ªÅ¸³À´Ï´Ù.

PL/pgSQLÇÔ¼ö´Â, 1°³ÀÇ ÀνºÅϽº·Î¼­ µ¹·ÁÁÙ ¼ö ÀÖ´Â ÀÓÀÇÀÇ µ¥ÀÌÅÍÇüÀÇ "ÁýÇÕ"(Å×À̺í)À» µ¹·ÁÁÖµµ·Ï ¼±¾ðÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ÇÔ¼ö´Â, °á°ú ÁýÇÕÀÇ ÇÊ¿äÇÑ ¿ä¼Ò¿¡ ´ëÇØ¼­ RETURN NEXT¸¦ ½ÇÇàÇÏ´Â °Í, ¶Ç´Â Äõ¸®ÀÇ Æò°¡ °á°ú¸¦ ¾ò±â À§Çؼ­RETURN QUERY¸¦ »ç¿ëÇÏ´Â °ÍÀ¸·Î, ±× Ãâ·ÂÀ» »ý¼ºÇÕ´Ï´Ù.

¸¶Áö¸·À¸·Î, À¯¿ëÇÑ ¹Ýȯ°ªÀ» °¡ÁöÁö ¾Ê´Â °æ¿ì, PL/pgSQLÇÔ¼ö´Â, void¸¦ µ¹·ÁÁÖµµ·Ï ¼±¾ðÇÒ ¼ö ÀÖ½À´Ï´Ù.

PL/pgSQLÇÔ¼ö´Â ¹Ýȯ°ªÀÇ ÇüŸ¦ ¸íÈ®ÇÏ°Ô ÁöÁ¤ÇÏ´Â ´ë½Å, Ãâ·Â ¸Å°³º¯¼ö¿Í ÇÔ²² ¼±¾ðÇÒ ¼öµµ ÀÖ½À´Ï´Ù. À̰ÍÀº ¾ð¾î¿¡ ´ëÇØ¼­ ±âº»ÀûÀÎ ´É·ÂÀ» Ãß°¡ÇÏ´Â °ÍÀÌ ¾Æ´Õ´Ï´Ù¸¸, ƯÈ÷ º¹¼öÀÇ °ªÀ» µ¹·ÁÁÙ ¶§, Á¾Á¾ Æí¸®ÇÕ´Ï´Ù.

Ư¼öÇÑ ¿¹°¡ Section 37.4.1 ¹× Section 37.7.1¿¡ ³ªÅ¸³³´Ï´Ù.