CREATE FUNCTION

Name

CREATE FUNCTION -- »õ·Î¿î ÇÔ¼ö¸¦ Á¤ÀÇÇÑ´Ù

Synopsis

CREATE [ OR REPLACE ] FUNCTION
    
name
 ( [ [ 
argmode
 ] [ 
argname
 ] 
argtype
 [, ...] ] )
    [ RETURNS 
rettype
 ]
  { LANGUAGE 
langname

    | IMMUTABLE | STABLE | VOLATILE
    | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
    | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
    | AS '
definition
'
    | AS '
obj_file
', '
link_symbol
'
  } ...
    [ WITH ( 
attribute
 [, ...] ) ]

¼³¸í

CREATE FUNCTION´Â »õ·Î¿î ÇÔ¼ö¸¦ Á¤ÀÇÇÕ´Ï´Ù. CREATE OR REPLACE FUNCTION´Â, »õ·Î¿î ÇÔ¼öÀÇ ÀÛ¼º, ¶Ç´Â, ±âÁ¸ Á¤ÀǸ¦ ´ëüÇÕ´Ï´Ù.

½ºÅ°¸¶¸íÀÌ Æ÷ÇԵǾî ÀÖ´Â °æ¿ì, ÇÔ¼ö´Â ÁöÁ¤µÈ ½ºÅ°¸¶¿¡¼­ ÀÛ¼ºµË´Ï´Ù. ½ºÅ°¸¶¸íÀÌ ¾øÀ¸¸é, ÇÔ¼ö´Â ÇöÀçÀÇ ½ºÅ°¸¶¿¡¼­ ÀÛ¼ºµË´Ï´Ù. °°Àº ½ºÅ°¸¶ ³»ÀÇ °°Àº Àμö µ¥ÀÌÅÍÇüÀ» °¡Áö´Â ±âÁ¸ÀÇ ÇÔ¼öÀÇ À̸§Àº, »õ·Î¿î ÇÔ¼öÀÇ À̸§À¸·Î »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ±×·¯³ª, ´Ù¸¥ Àμö µ¥ÀÌÅÍÇüÀ» °¡Áö´Â ÇÔ¼öÀ̸é, À̸§ÀÌ Áߺ¹Çؼ­ »ç¿ëÇØµµ »ó°üÇÏÁö ¾Ê½À´Ï´Ù. (À̰ÍÀ»,overloading¶ó°í ¸»ÇÕ´Ï´Ù).

±âÁ¸ÀÇ ÇÔ¼ö Á¤ÀǸ¦ °»½Å ÇÏ·Á¸é ,CREATE OR REPLACE FUNCTION¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä. ÀÌ ¹æ¹ý¿¡¼­´Â ÇÔ¼öÀÇ À̸§À̳ª ÀμöÀÇ ÇüŸ¦ º¯°æÇÒ ¼ö ¾ø´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä (À̰ÍÀ» ½Ç½ÃÇßÀ» °æ¿ì, »õ·Ó°í ´Ù¸¥ ÇÔ¼ö°¡ ÀÛ¼ºµË´Ï´Ù). ¶ÇÇÑ,CREATE OR REPLACE FUNCTION¿¡¼­´Â, ±âÁ¸ÀÇ ÇÔ¼öÀÇ ¹Ýȯ°ªÀÇ ÇüŸ¦ º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù. ¹Ýȯ°ªÀÇ ÇüŸ¦ º¯°æÇÏ°í ½ÍÀº °æ¿ì´Â, ±× ÇÔ¼ö¸¦ »èÁ¦ÇØ, ÀçÂ÷ ÀÛ¼ºÇØ ÁÖ¼¼¿ä. (À̰ÍÀº,OUT¸Å°³º¯¼ö¸¦ »ç¿ëÇϰí ÀÖ´Â °æ¿ì, ÇÔ¼ö¸¦ »èÁ¦ÇÏÁö ¾Ê´Â ÇÑOUT¸Å°³º¯¼öÀÇ À̸§À̳ª ÇüŸ¦ º¯°æÇÒ ¼ö ¾ø´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. )

ÇÔ¼ö¸¦ »èÁ¦ÇØ ÀçÀÛ¼ºÇßÀ» °æ¿ì, »õ·Î¿î ÇÔ¼ö´Â ÀÌÀü ÇÔ¼ö¿Í °°Àº ¿£Æ¼Æ¼°¡ µÇÁö ¾Ê½À´Ï´Ù. ÀÌÀü ÇÔ¼ö¸¦ ÂüÁ¶ÇÏ´Â, ±âÁ¸ÀÇ ·ê, ºä, Æ®¸®°Å µîÀ» »èÁ¦ÇØ¾ß ÇÒ °ÍÀÔ´Ï´Ù. ÇÔ¼ö¸¦ ÂüÁ¶ÇÏ´Â °´Ã¼¸¦ ÆÄ±«ÇÏÁö ¾Ê°Ô ÇÔ¼ö Á¤ÀǸ¦ º¯°æÇÏ·Á¸é ,CREATE OR REPLACE FUNCTION¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä.

ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ »ç¿ëÀÚ°¡, ±× ÇÔ¼öÀÇ ¼ÒÀ¯ÀÚ°¡ µË´Ï´Ù.

ÆÄ¶ó¹ÌÅÍ

name

ÀÛ¼ºÇÏ´Â ÇÔ¼öÀÇ À̸§(°ËÁõÀ» °ÅÄ£ ½ºÅ°¸¶)ÀÔ´Ï´Ù.

argmode

ÀμöÀÇ ¸ðµå´Â,IN,OUT¶Ç´Â INOUTÀÇ µÑ Áß Çϳª°¡ µË´Ï´Ù. »ý·«½ÃÀÇ µðÆúÆ®´ÂINÀÔ´Ï´Ù.

argname

ÀμöÀÇ À̸§ÀÔ´Ï´Ù. ÀϺΠ¾ð¾î(ÇöÀç PL/pgSQL¸¸ °¡´É)Áß ¿¡´Â ÀÌ À̸§À» ÇÔ¼ö º»Ã¼·Î »ç¿ëÇÒ ¼ö ÀÖ´Â °Íµµ ÀÖ½À´Ï´Ù ´Ù¸¥ ¾ð¾î¿¡¼­´Â, ÀÔ·Â ÀμöÀÇ À̸§Àº ´Ü¼øÇÑ Ãß°¡ ¹®¼­·Î¼­ ´Ù·ç¾îÁý´Ï´Ù. ±×·¯³ª, Ãâ·Â ÀμöÀÇ À̸§Àº, °á°ú ÇàÇüÀÇ ¿­¸íÀ» Á¤ÀÇÇϱ⠶§¹®¿¡ Áß¿äÇÕ´Ï´Ù. (Ãâ·Â ÀμöÀÇ À̸§À» »ý·« ÇßÀ» °æ¿ì, ½Ã½ºÅÛÀº µðÆúÆ® ¿­¸íÀ» ºÎ¿©ÇÕ´Ï´Ù. )

argtype

ÇÔ¼öÀÇ ÀμöÀÇ µ¥ÀÌÅÍÇüÀÔ´Ï´Ù(°ËÁõÀ» °ÅÄ£ ½ºÅ°¸¶). ±âº» µ¥ÀÌÅÍÇü, º¹ÇÕ µ¥ÀÌÅÍÇü, µµ¸ÞÀÎÇü, ¶Ç´Â, Å×ÀÌºí¿­ÀÇ ÇüÅÂÀÇ ÂüÁ¶¸¦ »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

¶Ç, ¾ð¾îÀÇ ½ÇÇà¿¡ ÀÇÁ¸ÇÕ´Ï´Ù¸¸,cstring¶ó°í ÇÏ´Â"pseudotypes"À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. À¯»çÇüÀº, ÀμöÀÇ ÇüÅÂÀÇ ÁöÁ¤ÀÌ ºÒ¿ÏÀüÇÏ´Ù, ȤÀº, Åë»óÀÇ SQL µ¥ÀÌÅÍÇüÀÇ ÁýÇÕÀ» ³Ñ¾î¼­´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù.

¿­ÀÇ ÇüŸ¦ ÂüÁ¶ÇÏ·Á¸é , tablename . columnname %TYPE¸¦ ±â¼úÇÕ´Ï´Ù. À̰ÍÀ» »ç¿ëÇϸé, Å×À̺í Á¤Àǰ¡ º¯°æµÇ¾îµµ ÇÔ¼ö°¡ ¿µÇâÀ» ¹ÞÁö ¾Êµµ·Ï µµ¿òÀ» ÁÙ ¼ö ÀÖ½À´Ï´Ù.

rettype

ÇÔ¼ö°¡ ¹ÝȯÇÏ´Â µ¥ÀÌÅÍÀÇ ÇüÅÂÀÔ´Ï´Ù(°ËÁõÀ» °ÅÄ£ ½ºÅ°¸¶). ±âº»Çü, º¹ÇÕÇü, µµ¸ÞÀÎÇü, ¶Ç´Â, Å×ÀÌºí¿­ÀÇ ÇüŸ¦ ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶Ç, ½ÇÇàÇϰí ÀÖ´Â ¾ð¾î¿¡ ÀÇÁ¸ ÇÕ´Ï´Ù¸¸,cstring¿Í °°Àº"À¯»çÇü"µµ ÁöÁ¤ÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. ±× ÇÔ¼ö°¡ °ªÀ» ¹ÝȯÇÏ´Â °ÍÀ» »óÁ¤Çϰí ÀÖÁö ¾Ê´Â °æ¿ì´Â, ¹Ýȯ°ªÀ¸·Î¼­void¸¦ ÁöÁ¤ÇØ ÁÖ¼¼¿ä.

OUTȤÀºINOUT¸Å°³º¯¼ö°¡ Á¸ÀçÇÏ´Â °æ¿ì,RETURNS±¸¸¦ »ý·« ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. »ý·« ÇÏÁö ¾Ê´Â °æ¿ì´Â, Ãâ·Â¿ë ¸Å°³º¯¼ö°¡ ÀǹÌÇÏ´Â °á°úÇü°ú ÀÏÄ¡ ÇØ¾ßÇÕ´Ï´Ù, Áï, º¹¼öÀÇ Ãâ·Â¿ë ¸Å°³º¯¼ö°¡ ÀÖÀ¸¸éRECORD, ¶Ç´Â ´ÜÀÏÀÇ Ãâ·Â¿ë ¸Å°³º¯¼öÀÌ¸é ±×°Í°ú °°Àº ÇüŰ¡ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù.

SETOF¼ö½ÄÀÚ´Â, ±× ÇÔ¼ö°¡, 1°³´Â ¾Æ´Ï°í º¹¼öÀÇ ¾ÆÀÌÅÛÀÇ ÁýÇÕÀ» ¹ÝȯÇÏ´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù.

¿­ÀÇ ÇüÅ´Â, tablename . columnname %TYPE¶ó°í ±â¼úÇÔÀ¸·Î½á, ÂüÁ¶µË´Ï´Ù.

langname

ÇÔ¼ö¸¦ ½ÇÇàÇϰí ÀÖ´Â ¾ð¾îÀÇ À̸§ÀÔ´Ï´Ù. ÀÌ ¸Å°³º¯¼ö¿¡´Â,SQL,C,internal, ȤÀº »ç¿ëÀÚ Á¤ÀÇ ÀýÂ÷ ¾ð¾îÀÇ À̸§À» ÁöÁ¤ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÈĹæ ȣȯÀ» À¯ÁöÇϱâ À§ÇØ, ÀÌ À̸§À» ´ÜÀÏ ÀοëºÎÈ£·Î µÑ·¯½Ò ¼öµµ ÀÖ½À´Ï´Ù.

IMMUTABLE
STABLE
VOLATILE

ÀÌ·¯ÇÑ ¼Ó¼ºÀº, ÇÔ¼öÀÇ µ¿ÀÛ¿¡ °üÇÑ Á¤º¸¸¦ Äõ¸® ÃÖÀûÈ­¿¡ Á¦°øÇÕ´Ï´Ù. ¸¹¾Æ¾ß 1°³ÀÇ Å°¿öµå¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÁöÁ¤ÀÌ ¾ø´Â °æ¿ì´Â, µðÆúÆ®·ÎVOLATILE¶ó°í ÇØ¼®µË´Ï´Ù.

IMMUTABLE´Â, µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ º¯°æÀ» ½Ç½ÃÇÏÁö ¾Ê´Â °Í, ¹×, ±× ÇÔ¼ö¿¡ °°Àº ÀμöÄ¡¸¦ ÁÖ¾úÀ» °æ¿ì¿¡ Ç×»ó °°Àº °á°ú¸¦ ¹ÝȯÇÏ´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù. À̰ÍÀº, µ¥ÀÌÅͺ£À̽º¸¦ °Ë»öÇϰųª, Àμö ¸®½ºÆ®Áß¿¡ Á÷Á¢ Á¸ÀçÇÏÁö ¾Ê´Â Á¤º¸¸¦ »ç¿ëÇϰųª ÇÏÁö ¾Ê´Â´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ ¿É¼ÇÀÌ ÁöÁ¤µÇ¾úÀ» °æ¿ì, Àμö°¡ ¸ðµÎ Á¤¼öÀÎ ÇÔ¼ö È£ÃâÀº, Áï½Ã ÇÔ¼ö°ªÀ¸·Î ´ëüÇÒ ¼ö ÀÖ½À´Ï´Ù.

STABLE´Â, µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ º¯°æÀ» ½Ç½ÃÇÏÁö ¾Ê´Â °Í, ¹×, ´ÜÀÏ Å×ÀÌºí ½ºÄµ ³»¿¡¼­ °°Àº Àμö°ª¿¡ ´ëÇØ¼­´Â Ç×»ó °°Àº °á°ú¸¦ ¹Ýȯ ÇÏÁö¸¸, SQL¹®ÀÌ ´Ù¸£¸é, °á°ú°¡ º¯°æµÉ °¡´É¼ºÀÌ ÀÖ´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù. À̰ÍÀº, µ¥ÀÌÅͺ£À̽º °Ë»öÀ̳ª(ÇöÀçÀÇ ½Ã°£´ë¿Í °°Àº) ¸Å°³º¯¼ö µî¿¡ ÀÇÁ¸ÇÏ´Â °á°ú¸¦ °®´Â ÇÔ¼ö¸¦ ¼±ÅÃÇÏ´Â °ÍÀÌ ÀûÀýÇÕ´Ï´Ù. ¶Ç,current_timestamp°èÀÇ ÇÔ¼ö´Â, 1°³ÀÇ Æ®·£Àè¼Ç³»¿¡¼­´Â °ªÀÌ º¯È­ÇÏÁö ¾Ê±â ¶§¹®¿¡, STABLEÀÎ °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä.

VOLATILE´Â, ´ÜÀÏ Å×ÀÌºí ½ºÄµ ³»¿¡ ÀÖ¾î ÇÔ¼öÀÇ °ªÀÌ º¯È­ÇÒ °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡, ÃÖÀûÈ­ÇÒ ¼ö ¾ø´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù. ÀÌ·¯ÇÑ Àǹ̿¡¼­, ¸î ¾ÈµÇ´Â º¯µ¿ÀûÀÎ µ¥ÀÌÅͺ£À̽º ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é,random(),currval(),timeofday()µîÀº º¯µ¿ÀûÀÎ ÇÔ¼öÀÔ´Ï´Ù. ±×·¯³ª, ¿¹¸¦ µé¸ésetval()µîÀÇ ºÎÀÛ¿ëÀÌ ÀÖ´Â ÇÔ¼ö´Â, ±× °á°ú¸¦ ¿ÏÀüÇÏ°Ô ¿¹ÃøÇÒ ¼ö ÀÖ´Ù°í ÇØµµ, È£ÃâÀ» ÃÖÀûÈ­ÇÏÁö ¾Ê°Ô, º¯µ¿ÀûÀ¸·Î ºÐ·ùÇÒ Çʿ䰡 ÀÖ´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä.

ÀÚ¼¼ÇÑ °ÍÀºSection 33.6À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä.

CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT

CALLED ON NULL INPUT(µðÆúÆ®)¸¦ ÁöÁ¤Çϸé, Àμö¿¡ NULL°¡ Æ÷ÇԵǾî À־, ÇÔ¼ö°¡ È£Ã⠵˴ϴÙ. ±× °æ¿ì´Â, Çʿ信 µû¶ó¼­ NULL°ªÀ» È®ÀÎÇØ, ÀûÀýÇÑ ´ëÀÀÀ» ÇÏ´Â °ÍÀº ÇÔ¼ö ÀÛ¼ºÀÚÀÇ Ã¥ÀÓÀÔ´Ï´Ù.

RETURNS NULL ON NULL INPUTȤÀºSTRICT¸¦ ÁöÁ¤Çϸé, ÇÔ¼öÀÇ Àμö¿¡ NULLÀÌ ÀÖ´Â °æ¿ì, Ç×»ó NULLÀ» ¹ÝȯÇÕ´Ï´Ù. ÀÌ ¸Å°³º¯¼ö°¡ ÁöÁ¤µÇ¸é, NULL Àμö°¡ ÀÖ´Â °æ¿ì, ÇÔ¼ö´Â ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. ´ë½Å¿¡, NULLÀ̶ó°í ÇÏ´Â °á°ú°¡ ÀÚµ¿ÀûÀ¸·Î ÁÖ¾îÁý´Ï´Ù.

[EXTERNAL] SECURITY INVOKER
[EXTERNAL] SECURITY DEFINER

SECURITY INVOKER¸¦ ÁöÁ¤Çϸé, ÇÔ¼ö¸¦ È£ÃâÇÑ À¯ÀúÀÇ ±ÇÇÑÀ¸·Î, ±× ÇÔ¼ö°¡ ½ÇÇàµË´Ï´Ù. À̰ÍÀÌ µðÆúÆ®ÀÔ´Ï´Ù. SECURITY DEFINER¸¦ ÁöÁ¤Çϸé, ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ À¯ÀúÀÇ ±ÇÇÑÀ¸·Î, ±× ÇÔ¼ö°¡ ½ÇÇàµË´Ï´Ù.

EXTERNALŰ¿öµå´Â, SQL¿ÍÀÇ È£È¯¼ºÀ» À¯ÁöÇϱâ À§ÇØ, Çã¿ëµÇ°í ÀÖ½À´Ï´Ù. ±×·¯³ª, SQL¿Í´Â ´Þ¸®, ÀÌ ±â´ÉÀº ¿ÜºÎ ÇÔ¼ö¿¡°Ô¸¸ Àû¿ëµÇ´Â °ÍÀº ¾Æ´Ï±â ¶§¹®¿¡, ÀÌ Å°¿öµå´Â »ý·« °¡´ÉÇÕ´Ï´Ù.

definition

ÇÔ¼ö¸¦ Á¤ÀÇÇÏ´Â ¹®ÀÚ¿­ »ó¼öÀÔ´Ï´Ù. ÀÌ ¸Å°³º¯¼öÀÇ Àǹ̴ ¾ð¾î¿¡ ÀÇÁ¸ÇÕ´Ï´Ù. ³»ºÎÀûÀÎ ÇÔ¼ö¸í, °´Ã¼ ÆÄÀÏ¿¡ÀÇ °æ·Î, SQL Ä¿¸àµå, ÀýÂ÷ ¾ð¾î·Î ±â¼úµÈ ÅØ½ºÆ®µîÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

obj_file , link_symbol

ÀÌ ±¸¹®ÀÇAS±¸´Â, C¾ð¾îÀÇ ¿ø½Ã ÄÚµåÁßÀÇ ÇÔ¼ö¸íÀÌ SQL ÇÔ¼öÀÇ À̸§°ú °°Áö ¾ÊÀº °æ¿ì, µ¿ÀûÀ¸·Î ·Îµå µÇ´Â C¾ð¾î ÇÔ¼ö¿¡ »ç¿ëµË´Ï´Ù. obj_file ¶ó°í ÇÏ´Â ¹®ÀÚ¿­Àº µ¿ÀûÀ¸·Î ·ÎµåÇÒ ¼ö ÀÖ´Â °´Ã¼¸¦ Æ÷ÇÔÇÑ ÆÄÀÏÀÇ À̸§À¸·Î, link_symbol ´Â ±× ÇÔ¼öÀÇ ¸µÅ© ½Éº¼, Áï, C¾ð¾î ¿ø½Ã ÄÚµåÁßÀÇ ÇÔ¼öÀÇ À̸§ÀÔ´Ï´Ù. ¸µÅ© ½Éº¼ÀÌ »ý·« µÇ¾úÀ» °æ¿ì, Á¤ÀǵǴ SQL ÇÔ¼öÀÇ À̸§°ú °°Àº °ÍÀ̶ó°í °¡Á¤µË´Ï´Ù.

attribute

ÇÔ¼ö¿¡ °üÇÑ Á¤º¸¸¦, ºÎºÐÀûÀ¸·Î ¼±ÅÃÇØ ÁöÁ¤ÇÏ´Â ÀüÅëÀûÀÎ ¹æ¹ýÀÔ´Ï´Ù. ¿©±â¼­ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â ¼Ó¼ºÀ» ÀÌÇÏ¿¡ ³ªÅ¸³À´Ï´Ù.

isStrict

STRICT¶Ç´ÂRETURNS NULL ON NULL INPUT¿Í °°½À´Ï´Ù.

isCachable

isCachable´Â,IMMUTABLE¿Í °°½À´Ï´Ù¸¸, ÀÌ¹Ì ÆóÁöµÇ°í ÀÖ½À´Ï´Ù. ±×·¯³ª, ÈĹæ ȣȯ¼ºÀ» º¸°ü À¯ÁöÇϱâ À§ÇØ, ¾ÆÁ÷Àº À¯È¿ÇÕ´Ï´Ù.

¼Ó¼º¸í¿¡¼­´Â, ´ë¹®ÀÚ ¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö ¾Ê½À´Ï´Ù.

ÁÖ¼®

ÇÑÃþ ´õ ÀÚ¼¼ÇÑ ¿ÜºÎ ÇÔ¼öÀÇ ÀÛ¼º ¹æ¹ý¿¡ ´ëÇØ¼­´ÂSection 33.3À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä.

ÀÌ Ä¿¸àµå¿¡¼­´Â,SQLÇüÀÇ ±¸¹®¿¡ À־ÀÇ ÀÔ·Â Àμö¿Í ¹Ýȯ°ªÀ» °í·ÁÇÕ´Ï´Ù. ±×·¯³ª, ÇüÅ ÁöÁ¤ÀÇ ¼¼ºÎ»çÇ×(¿¹¸¦ µé¸énumericÇüÀÇ Á¤¹Ðµµ Çʵåµî)´Â, ±× ÇÔ¼öÀÇ ½ÇÇà¿¡ Ã¥ÀÓÀÌ ÀÖ¾î,CREATE FUNCTIONÄ¿¸àµå¿¡¼­´Â °æ°íÇÏ´Â ÀÏ ¾øÀÌ ¼ö¿ë ÇÕ´Ï´Ù(ÀÌ·¯ÇÑ ¼¼ºÎ»çÇ×Àº ÀνĵÇÁö ¾Ê½À´Ï´Ù. ¶Ç, ¼¼ºÎ»çÇ׿¡ ´ëÇØ¼­, ƯÁ¤ÀÇ »ç¾çÀ» °­Á¦ÇÏ´Â Àϵµ ¾ø½À´Ï´Ù).

PostgreSQL´Â overloadÇÔ¼öÀ» Çã°¡ÇÕ´Ï´Ù. Áï, ÀμöÀÇ ÇüŰ¡ Â÷À̰¡ ³ª¸é, º¹¼öÀÇ ´Ù¸¥ ÇÔ¼ö¿¡ °°Àº À̸§À» »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×·¯³ª, ¸ðµç ÇÔ¼öÀÇ C¾ð¾î¿¡ À־ÀÇ À̸§Àº, Áߺ¹ ÇØ¼­´Â ¾ÈµË´Ï´Ù. µû¶ó¼­, ¿À¹ö·ÎµåµÈ C¾ð¾î ÇÔ¼ö¿¡´Â, ´Ù¸¥ C¾ð¾îÀÇ À̸§À» ÁÙ Çʿ䰡 ÀÖ½À´Ï´Ù (¿¹¸¦ µé¸é, C¾ð¾î¿¡ À־ÀÇ À̸§ÀÇ ÀϺο¡ ÀμöÀÇ ÇüŸ¦ »ç¿ëÇØ ÁÖ¼¼¿ä).

¿©±â¼­ OUT¸Å°³º¯¼ö´Â ¹«½ÃÇϰí, °°Àº À̸§ ¹× °°Àº ÀԷ¿ë ÀμöÇüÀ» °¡Áö´Â °æ¿ì, 2°³ÀÇ ÇÔ¼ö´Â µ¿ÀÏÇÏ´Ù°í °£ÁÖÇÕ´Ï´Ù. µû¶ó¼­, ¿¹¸¦ µé¸é ÀÌÇÏÀÇ ¼±¾ðÀº Ãæµ¹Çϰí ÀÖ½À´Ï´Ù.

CREATE FUNCTION foo(int) ...
CREATE FUNCTION foo(int, out text) ...

µ¿ÀÏ °´Ã¼ ÆÄÀÏÀ» ÂüÁ¶ÇÏ´Â,CREATE FUNCTIONÈ£ÃâÀÌ ¹Ýº¹ µÇ¾úÀ» °æ¿ì, ±× ÆÄÀÏÀº ÇÑ ¹ø¸¸ ·Îµå µË´Ï´Ù. (¾Æ¸¶ °³¹ß ´Ü°è µ¿¾È) ÆÄÀÏÀ» ¾ð·ÎµåÇϰí Àç·ÎµåÇÏ·Á¸é , LOAD Ä¿¸àµå¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä.

»ç¿ëÀÚ Á¤ÀÇÀÇ ÇÔ¼ö¸¦ »èÁ¦ÇÏ·Á¸é DROP FUNCTION ¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä.

ÇÔ¼ö¸¦ Á¤ÀÇÇÏ´Â ¹®ÀÚ¿­À» ±â¼úÇÒ ¶§¿¡, Åë»óÀÇ ´ÜÀÏ ÀοëºÎÈ£´Â ¾Æ´Ï°í, ´Þ·¯ ÀοëºÎÈ£(Section 4.1.2.2ÂüÁ¶)¸¦ »ç¿ëÇϸé, À¯¿ëÇÑ °æ¿ì°¡ ¸¹½À´Ï´Ù. ´Þ·¯ ÀοëºÎÈ£¸¦ »ç¿ëÇÏÁö ¾ÊÀº °æ¿ì, ÇÔ¼ö Á¤ÀÇ ³»ÀÇ ´ÜÀÏ ÀοëºÎÈ£³ª ¹é½½·¡½Ã´Â ¹Ýµå½Ã µÎ ¹ø¾¿ ±â¼úÇÏ¿©, ´ÜÀÏ ÀοëºÎÈ£ÀÇ »ç¿ëÀ» ÇÇÇØ¾ß ÇÕ´Ï´Ù.

ÇÔ¼ö¸¦ Á¤ÀÇÇÏ·Á¸é , »ç¿ëÀÚ´Â ±× ¾ð¾îÀÇUSAGE±ÇÇÑÀÌ ÇÊ¿äÇÕ´Ï´Ù.

¿¹

¿©±â¿¡, óÀ½ ½ÃÀÛÀ» µ½±â À§ÇÑ °£´ÜÇÑ ¿¹°¡ ÀÖ½À´Ï´Ù. Section 33.3¿¡´Â, º¸´Ù ¸¹Àº Á¤º¸¿Í ¿¹°¡ ±âÀçµÇ¾î ÀÖ½À´Ï´Ù.

CREATE FUNCTION add(integer, integer) RETURNS integer
    AS 'select $1 + $2;'
    LANGUAGE SQL
    IMMUTABLE
    RETURNS NULL ON NULL INPUT;

PL/pgSQL·Î, Àμö¸íÀ» »ç¿ëÇØ, Á¤¼ö¸¦ Áõ°¡ ÇÕ´Ï´Ù.

CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS $$
        BEGIN
                RETURN i + 1;
        END;
$$ LANGUAGE plpgsql;

º¹¼öÀÇ Ãâ·Â¿ë ¸Å°³º¯¼ö¸¦ °¡Áö´Â ·¹Äڵ带 ¹Ýȯ ÇÕ´Ï´Ù.

CREATE FUNCTION dup(in int, out f1 int, out f2 text)
    AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$
    LANGUAGE SQL;

SELECT * FROM dup(42);

À§¿Í °°Àº °ÍÀ», ¸í½ÃÀûÀÎ À̸§ÀÌ ºÙÀº º¹ÇÕÇüÀ» »ç¿ëÇØ, º¸´Ù ÀåȲÇÏ°Ô ½Ç½ÃÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

CREATE TYPE dup_result AS (f1 int, f2 text);

CREATE FUNCTION dup(int) RETURNS dup_result
    AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$
    LANGUAGE SQL;

SELECT * FROM dup(42);

SECURITY DEFINERÇÔ¼öÀÇ ¾ÈÀüÇÑ ÀÛ¼º

SECURITY DEFINERÇÔ¼ö´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ»ç¿ëÀÚÀÇ ±ÇÇÑÀ¸·Î ½ÇÇàµÇ±â ¶§¹®¿¡, ±× ÇÔ¼ö¸¦ À߸ø »ç¿ëÇÒ ¼ö ¾ø´Ù´Â °Í¿¡ ÁÖÀÇÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ¾ÈÀü»ó,search_pathÀº, ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀÚ°¡ ±âÀÔÇØ °¡´ÉÇÑ ½ºÅ°¸¶¸¦ Á¦°ÅÇÑ ÇüÅ·Π¼³Á¤µË´Ï´Ù. À̰ÍÀº, ¾ÇÀǰ¡ ÀÖ´Â »ç¿ëÀÚ°¡ ±× ÇÔ¼ö·Î »ç¿ëµÇ´Â °´Ã¼¸¦ ¼û±â´Â °Í °°Àº °´Ã¼¸¦ ÀÛ¼ºÇÏ´Â °ÍÀ» ¹æÁö ÇÕ´Ï´Ù. ¿©±â¼­ ƯÈ÷ Áß¿äÇÑ °ÍÀº, Àӽà Å×ÀÌºí ½ºÅ°¸¶ÀÔ´Ï´Ù. ÀÌ ½ºÅ°¸¶´Â µðÆúÆ®·Î ÃÖÃÊ·Î °Ë»öµÇ°í ±×¸®°í, Åë»ó ´©±¸¶óµµ ±âÀÔÇØ °¡´ÉÇÕ´Ï´Ù. Àӽà ½ºÅ°¸¶ÀÇ °Ë»öÀ» °­Á¦ÀûÀ¸·Î ¸¶Áö¸·¿¡ ÇÏ´Â °ÍÀ¸·Î, º¸¾È Á¶Á¤À» ÇÒ ¼ö ÀÖ½À´Ï´Ù. À̸¦ ½ÇÇàÇϱâ À§ÇØ,pg_temp¸¦search_pathÀÇ ¸¶Áö¸· Ç׸ñÀ¸·Î¼­ ±âÀçÇØ ÁÖ¼¼¿ä. ÀÌ ÇÔ¼öÀÇ ¾ÈÀüÇÑ »ç¿ë ¹æ¹ýÀ» ÀÌÇÏ¿¡ ³ªÅ¸³À´Ï´Ù.

CREATE FUNCTION check_password(uname TEXT, pass TEXT)
RETURNS BOOLEAN AS $$
DECLARE passed BOOLEAN;
        old_path TEXT;
BEGIN
        -- Save old search_path; notice we must qualify current_setting
        -- to ensure we invoke the right function
        old_path := pg_catalog.current_setting('search_path');

        -- Set a secure search_path: trusted schemas, then 'pg_temp'.
        -- We set is_local = true so that the old value will be restored
        -- in event of an error before we reach the function end.
        PERFORM pg_catalog.set_config('search_path', 'admin, pg_temp', true);

        -- Do whatever secure work we came for.
        SELECT  (pwd = $2) INTO passed
        FROM    pwds
        WHERE   username = $1;

        -- Restore caller's search_path
        PERFORM pg_catalog.set_config('search_path', old_path, true);

        RETURN passed;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;

ȣȯ¼º

CREATE FUNCTIONÄ¿¸àµå´Â SQL:1999 ¹× ÀÌÈÄ¿¡ Á¤Àǵǰí ÀÖ½À´Ï´Ù. PostgreSQL¹öÁ¯Àº À¯»çÇÑ ±â´ÉÀ» °¡Áý´Ï´Ù¸¸, ¿ÏÀüÇÑ È£È¯¼ºÀº ¾ø½À´Ï´Ù. ¼Ó¼º¿¡´Â À̽ļºÀÌ ¾ø½À´Ï´Ù. ¶Ç, »ç¿ë °¡´ÉÇÑ ¾ð¾îµµ ´Ù¸¨´Ï´Ù.

´Ù¸¥ µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛ°úÀÇ È£È¯¼ºÀ» À§Çؼ­, argmode ´Â argname ÀÇ Àü¿¡ ¶Ç´Â ÈÄ¿¡ ¾µ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª, 1¹øÂ°ÀÇ ¹æ¹ýÀÌ Ç¥ÁØ¿¡ µû¸£°í ÀÖ½À´Ï´Ù.

°ü·Ã Ç׸ñ

ALTER FUNCTION , DROP FUNCTION , GRANT , LOAD , REVOKE , createlang