| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 37. PL/pgSQL - SQL¼ö¼Ó ¾ð¾î | Fast Forward | Next |
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ÇÔ¼ö(ÇÊ¿äÇÏÁö ¾ÊÀº) ³»¿¡¼ »ç¿ëµÉ ¼ö ¾ø½À´Ï´Ù.
SQL´Â PostgreSQL¹× ±× ¿ÜÀÇ ´ëºÎºÐÀÇ RDB°¡ Äõ¸® ¾ð¾î·Î¼ »ç¿ëÇÏ´Â ¾ð¾îÀÔ´Ï´Ù. À̽ļºÀÌ ÀÖ¾î, ½ÀµæÀÌ ¿ëÀÌÇÕ´Ï´Ù. ±×·¯³ª, ¸ðµç SQL¹®Àº µ¥ÀÌÅÍ º£À̽º ¼¹ö¿¡ ÀÇÇØ °³º°ÀûÀ¸·Î ½ÇÇàµÇ¾î¾ßÇÕ´Ï´Ù.
À̰ÍÀº Ŭ¶óÀÌ¾ðÆ® ¾îÇø®ÄÉÀ̼ǿ¡ ´ëÇØ¼ ÀÌÇÏ¿Í °°Àº °ÍÀ» ¿ä±¸Çϰí ÀÖ½À´Ï´Ù. ¿ì¼±, µ¥ÀÌÅÍ º£À̽º ¼¹ö¿¡ Äõ¸®¸¦ ¼Û½ÅÇÕ´Ï´Ù. ´ÙÀ½¿¡ ±×°ÍÀÌ Ã³¸®µÇ´Â °ÍÀ» ±â´Ù¸³´Ï´Ù. ´ÙÀ½¿¡, °á°ú¸¦ ÃëµæÇØ ó¸®ÇÕ´Ï´Ù. ´ÙÀ½¿¡ °è»êÀ» ½Ç½ÃÇÕ´Ï´Ù. ±×¸®°í, ¼¹ö¿¡ ´ÙÀ½ÀÇ Äõ¸®¸¦ ¼Û½ÅÇÕ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ µ¥ÀÌÅÍ º£À̽º ¼¹ö ¸Ó½Å°ú ´Ù¸¥ ¸Ó½ÅÀÇ °æ¿ì, ÇÁ·Î¼¼½º°£ Åë½ÅÀ» ºÒ·¯, ³×Æ®¿öÅ©¡¤¿À¹öÇìµå¸¦ ÀÏÀ¸Å°°ÚÁö¿ä.
PL/pgSQL¸¦ »ç¿ëÇÏ´Â °ÍÀ¸·Î, °è»ê°ú º¹¼öÀÇ Äõ¸®¸¦ µ¥ÀÌÅÍ º£À̽º ¼¹ö ³»ºÎ ¿¡¼ ¿¬¼ÓÇØ ½ÇÇàÇÒ¼ö ÀÖ½À´Ï´Ù. ÀÌ¿Í °°ÀÌ, ¼ö¼Ó ¾ð¾îÀÇ ´É·Â°ú SQLÀÇ Æí¸®ÇÑ »ç¿ëÀ» °¡Áö°í ÀÖ´Â °Í¿¡µµ ºÒ±¸Çϰí, Ŭ¶óÀ̾ðÆ®/¼¹ö Åë½ÅÀÇ ¿À¹öÇìµå¸¦ ²Ï Àý¾àÇÒ ¼ö ÀÖ½À´Ï´Ù.
Ŭ¶óÀÌ¾ðÆ®¡¤¼¹ö°£ÀÇ ºÒÇÊ¿äÇÑ ±³È¯À» ¹èÁ¦ÇÑ´Ù.
Ŭ¶óÀÌ¾ðÆ®¡¤¼¹ö°£¿¡ ÀÖ¾î, Ŭ¶óÀÌ¾ðÆ®¿¡ ºÒÇÊ¿äÇÑ Áß°£ °á°úÀÇ Á¤¸®¿Í Àü¼ÛÀ» ºÒÇÊ¿ä·Î ÇÑ´Ù.
ÀÏ·ÃÀÇ Äõ¸®¿¡, º¹¼öÀÇ ÇØ¼®ÀÌ ºÒÇÊ¿äÇÏ´Ù.
À̰Ϳ¡ ÀÇÇØ, ÀúÀåµÈ ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê´Â ¾ÖÇø®ÄÉÀ̼ǰú ºñ±³ÇØ, ²Ï ¼º´ÉÀ» Çâ»ó½Ãų ¼ö°¡ ÀÖ½À´Ï´Ù.
¶Ç, PL/pgSQL¿¡¼´Â SQL ¸ðµç µ¥ÀÌÅÍÇü, ¿¬»êÀÚ, ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
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¿¡ ³ªÅ¸³³´Ï´Ù.