37.3. PL/pgSQLÀÇ ±¸Á¶

PL/pgSQL´Â ºí·Ï ±¸Á¶ÀÇ ¾ð¾îÀÔ´Ï´Ù. ÇÔ¼ö Á¤ÀÇÀÇ ÅØ½ºÆ® Àüü´Â ºí·ÏÀÌ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù. ºí·ÏÀº ÀÌÇÏ¿Í °°ÀÌ Á¤Àǵ˴ϴÙ.

[ <<
label
>> ]
[ DECLARE
    
declarations
 ]
BEGIN
    
statements

END [ 
label
 ];

ºí·Ï³»ÀÇ ¼±¾ðÀ̳ª ¹®ÀåÀº °¢°¢, ¼¼¹ÌÄÝ·ÐÀ¸·Î ³¡³³´Ï´Ù. À§¿¡ ³ªÅ¸³½ °Íó·³, ´Ù¸¥ ºí·Ï³»¿¡ ÃâÇöÇÏ´Â ºí·ÏÀÇ ENDÀÇ µÚ¿¡´Â ¼¼¹ÌÄÝ·ÐÀÌ ÇÊ¿äÇÕ´Ï´Ù¸¸, ÇÔ¼ö º»Ã¼¸¦ ¿Ï°áÇÏ´Â ¸¶Áö¸· END¿¡´Â ºÒÇÊ¿äÇÕ´Ï´Ù.

¸ðµç Ű¿öµå´Â ´ë¹®ÀÚ¿Í ¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö ¾Ê½À´Ï´Ù. ½Äº°ÀÚ´Â ÀÌÁß ÀοëºÎÈ£ Ç¥½ÃÇÏÁö ¾ÊÀº ÇÑ, ¾Ï¹¬ÀûÀ¸·Î ¼Ò¹®ÀÚ·Î º¯È¯µË´Ï´Ù.

PL/pgSQLÀÇ ÄÚ¸àÆ®¿¡´Â 2 Á¾·ù ÀÖ½À´Ï´Ù. ÀÌÁßÀÇ µ¥½¬ ±âÈ£(--)´Â ±× ÇàÀÇ ¸¶Áö¸·±îÁö¸¦ ÄÚ¸àÆ®·Î ÇÏ´Â ÄÚ¸àÆ®ÀÇ ½ÃÀÛÀ» ÀǹÌÇÕ´Ï´Ù. /*´Â ÄÚ¸àÆ® ºí·ÏÀÇ ½ÃÀÛÀ» ÀǹÌÇØ, ´ÙÀ½¿¡ */°¡ ³ªÅ¸³¯ ¶§±îÁö¸¦ ÄÚ¸àÆ®·Î ÇÕ´Ï´Ù. ºí·Ï ÄÚ¸àÆ®´Â »óÀÚ·Î ÇÒ ¼ö ¾ø½À´Ï´Ù¸¸, ÀÌÁß µ¥½¬ Çü½ÄÀÇ ÄÚ¸àÆ®´Â ºí·Ï ÄÚ¸àÆ®³»¿¡ ±â¼úÇÏ´Â °ÍÀº °¡´ÉÇÕ´Ï´Ù. ¶Ç, ÀÌÁß µ¥½¬´Â ºí·Ï ÄÚ¸àÆ®ÀÇ ´Ü¶ô ¹®ÀÚ /*¿Í */¸¦ ¼û±é´Ï´Ù.

ºí·ÏÀÇ ¸í·É¹® ¼½¼Ç³»ÀÇ ¸ðµç ¸í·É¹®Àº ¼­ºêºí·ÏÀÌ µÉ ¼ö°¡ ÀÖ½À´Ï´Ù. ¼­ºêºí·ÏÀº ³í¸®ÀûÀÎ ±×·ì ³ª´©±â³ª º¯¼ö¸¦ ¸í·É¹®ÀÇ ÀÛÀº ±×·ì¿¡ Áö¿ªÈ­Çϴµ¥¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

º¯¼ö´Â ÇÔ¼ö°¡ ºÒ¸± ¶§ »Ó¸¸ÀÌ ¾Æ´Ï¶ó, ºí¶ôÀÌ ½ÃÀÛÇÒ ¶§¸¶´Ù ±× ±âº»°ªÀ» ÃʱâÈ­ÇÏ´Â ºí¶ôÀÇ ÀÌÀü ¼±¾ð ¼½¼Ç¿¡ ¼±¾ðÇÕ´Ï´Ù. ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.

CREATE FUNCTION somefunc() RETURNS integer AS $$
DECLARE
    quantity integer := 30;
BEGIN
    RAISE NOTICE 'Quantity here is %', quantity;  -- Quantity here is 30À¸·Î Ç¥½Ã
    quantity := 50;
    --
    -- ºÎºí·ÏÀÇ ÀÛ¼º
    --
    DECLARE
        quantity integer := 80;
    BEGIN
	RAISE NOTICE 'Quantity here is %', quantity;  -- Quantity here is 80À¸·Î Ç¥½Ã
    END;

    RAISE NOTICE 'Quantity here is %', quantity;  -- Quantity here is 50À¸·Î Ç¥½Ã

    RETURN quantity;
END;
$$ LANGUAGE plpgsql;

PL/pgSQL¿¡ À־ ¹®ÀåÀ» Á¤¸®Çϱâ À§ÇÑ BEGIN/END¿Í Æ®·£Àè¼Ç Á¦¾î¿ëÀÇ µ¿¸íÀÇ SQL ¸í·ÉÀ» Çò°¥¸®Áö ¾Ê´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. PL/pgSQLÀÇ BEGIN/END´Â ´ÜÁö Á¤¸®Çϱâ À§ÇÑ °ÍÀ¸·Î, Æ®·£Àè¼ÇÀ» ½ÃÀÛÇϰųª ³¡³»Áö ¾Ê½À´Ï´Ù. ÇÔ¼ö¿Í Æ®¸®°Å ÇÁ·Î½ÃÀú´Â Ç×»ó ¿ÜÃøÀÇ Äõ¸®·Î ¼³Ä¡µÈ Æ®·£Àè¼ÇÀÇ ¾ÈÂÊ¿¡¼­ ½ÇÇàµË´Ï´Ù. ÀÌ·¯ÇÑ ¸í·É°ú Æ®·£Àè¼ÇÀÇ ½ÇÇà¿¡´Â ¾Æ¹« °ü·Ãµµ ¾ø±â ¶§¹®¿¡, Æ®·£Àè¼ÇÀ» °³½ÃÇÏ´Â Àϵµ Ä¿¹ÔÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ±×·¯³ª, EXCEPTION±¸¸¦ Æ÷ÇÔÇÑ ºí·ÏÀº ¿ÜÃøÀÇ Æ®·£Àè¼Ç¿¡ ¿µÇâÀ» ÁÖÁö ¾Ê°í ·Ñ¹é(rollback) ÇÒ ¼ö ÀÖ´Â ¼­ºê Æ®·£Àè¼ÇÀ» È¿°úÀûÀ¸·Î ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰Ϳ¡ °üÇÑ °ÍÀº Section 37.7.5À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä.