| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Fast Forward | Next | |
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¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä.
ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ »ç¿ëÀÚ°¡, ±× ÇÔ¼öÀÇ ¼ÒÀ¯ÀÚ°¡ µË´Ï´Ù.
ÀÛ¼ºÇÏ´Â ÇÔ¼öÀÇ À̸§(°ËÁõÀ» °ÅÄ£ ½ºÅ°¸¶)ÀÔ´Ï´Ù.
ÀμöÀÇ ¸ðµå´Â,IN,OUT¶Ç´Â INOUTÀÇ µÑ Áß Çϳª°¡ µË´Ï´Ù. »ý·«½ÃÀÇ µðÆúÆ®´ÂINÀÔ´Ï´Ù.
ÀμöÀÇ À̸§ÀÔ´Ï´Ù. ÀϺΠ¾ð¾î(ÇöÀç PL/pgSQL¸¸ °¡´É)Áß ¿¡´Â ÀÌ À̸§À» ÇÔ¼ö º»Ã¼·Î »ç¿ëÇÒ ¼ö ÀÖ´Â °Íµµ ÀÖ½À´Ï´Ù ´Ù¸¥ ¾ð¾î¿¡¼´Â, ÀÔ·Â ÀμöÀÇ À̸§Àº ´Ü¼øÇÑ Ãß°¡ ¹®¼·Î¼ ´Ù·ç¾îÁý´Ï´Ù. ±×·¯³ª, Ãâ·Â ÀμöÀÇ À̸§Àº, °á°ú ÇàÇüÀÇ ¿¸íÀ» Á¤ÀÇÇϱ⠶§¹®¿¡ Áß¿äÇÕ´Ï´Ù. (Ãâ·Â ÀμöÀÇ À̸§À» »ý·« ÇßÀ» °æ¿ì, ½Ã½ºÅÛÀº µðÆúÆ® ¿¸íÀ» ºÎ¿©ÇÕ´Ï´Ù. )
ÇÔ¼öÀÇ ÀμöÀÇ µ¥ÀÌÅÍÇüÀÔ´Ï´Ù(°ËÁõÀ» °ÅÄ£ ½ºÅ°¸¶). ±âº» µ¥ÀÌÅÍÇü, º¹ÇÕ µ¥ÀÌÅÍÇü, µµ¸ÞÀÎÇü, ¶Ç´Â, Å×À̺í¿ÀÇ ÇüÅÂÀÇ ÂüÁ¶¸¦ »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
¶Ç, ¾ð¾îÀÇ ½ÇÇà¿¡ ÀÇÁ¸ÇÕ´Ï´Ù¸¸,cstring¶ó°í ÇÏ´Â"pseudotypes"À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. À¯»çÇüÀº, ÀμöÀÇ ÇüÅÂÀÇ ÁöÁ¤ÀÌ ºÒ¿ÏÀüÇÏ´Ù, ȤÀº, Åë»óÀÇ SQL µ¥ÀÌÅÍÇüÀÇ ÁýÇÕÀ» ³Ñ¾î¼´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù.
¿ÀÇ ÇüŸ¦ ÂüÁ¶ÇÏ·Á¸é , tablename . columnname %TYPE¸¦ ±â¼úÇÕ´Ï´Ù. À̰ÍÀ» »ç¿ëÇϸé, Å×À̺í Á¤Àǰ¡ º¯°æµÇ¾îµµ ÇÔ¼ö°¡ ¿µÇâÀ» ¹ÞÁö ¾Êµµ·Ï µµ¿òÀ» ÁÙ ¼ö ÀÖ½À´Ï´Ù.
ÇÔ¼ö°¡ ¹ÝȯÇÏ´Â µ¥ÀÌÅÍÀÇ ÇüÅÂÀÔ´Ï´Ù(°ËÁõÀ» °ÅÄ£ ½ºÅ°¸¶). ±âº»Çü, º¹ÇÕÇü, µµ¸ÞÀÎÇü, ¶Ç´Â, Å×À̺í¿ÀÇ ÇüŸ¦ ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶Ç, ½ÇÇàÇϰí ÀÖ´Â ¾ð¾î¿¡ ÀÇÁ¸ ÇÕ´Ï´Ù¸¸,cstring¿Í °°Àº"À¯»çÇü"µµ ÁöÁ¤ÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. ±× ÇÔ¼ö°¡ °ªÀ» ¹ÝȯÇÏ´Â °ÍÀ» »óÁ¤Çϰí ÀÖÁö ¾Ê´Â °æ¿ì´Â, ¹Ýȯ°ªÀ¸·Î¼void¸¦ ÁöÁ¤ÇØ ÁÖ¼¼¿ä.
OUTȤÀºINOUT¸Å°³º¯¼ö°¡ Á¸ÀçÇÏ´Â °æ¿ì,RETURNS±¸¸¦ »ý·« ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. »ý·« ÇÏÁö ¾Ê´Â °æ¿ì´Â, Ãâ·Â¿ë ¸Å°³º¯¼ö°¡ ÀǹÌÇÏ´Â °á°úÇü°ú ÀÏÄ¡ ÇØ¾ßÇÕ´Ï´Ù, Áï, º¹¼öÀÇ Ãâ·Â¿ë ¸Å°³º¯¼ö°¡ ÀÖÀ¸¸éRECORD, ¶Ç´Â ´ÜÀÏÀÇ Ãâ·Â¿ë ¸Å°³º¯¼öÀÌ¸é ±×°Í°ú °°Àº ÇüŰ¡ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù.
SETOF¼ö½ÄÀÚ´Â, ±× ÇÔ¼ö°¡, 1°³´Â ¾Æ´Ï°í º¹¼öÀÇ ¾ÆÀÌÅÛÀÇ ÁýÇÕÀ» ¹ÝȯÇÏ´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù.
¿ÀÇ ÇüÅ´Â, tablename . columnname %TYPE¶ó°í ±â¼úÇÔÀ¸·Î½á, ÂüÁ¶µË´Ï´Ù.
ÇÔ¼ö¸¦ ½ÇÇàÇϰí ÀÖ´Â ¾ð¾îÀÇ À̸§ÀÔ´Ï´Ù. ÀÌ ¸Å°³º¯¼ö¿¡´Â,SQL,C,internal, ȤÀº »ç¿ëÀÚ Á¤ÀÇ ÀýÂ÷ ¾ð¾îÀÇ À̸§À» ÁöÁ¤ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÈĹæ ȣȯÀ» À¯ÁöÇϱâ À§ÇØ, ÀÌ À̸§À» ´ÜÀÏ ÀοëºÎÈ£·Î µÑ·¯½Ò ¼öµµ ÀÖ½À´Ï´Ù.
ÀÌ·¯ÇÑ ¼Ó¼ºÀº, ÇÔ¼öÀÇ µ¿ÀÛ¿¡ °üÇÑ Á¤º¸¸¦ Äõ¸® ÃÖÀûÈ¿¡ Á¦°øÇÕ´Ï´Ù. ¸¹¾Æ¾ß 1°³ÀÇ Å°¿öµå¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÁöÁ¤ÀÌ ¾ø´Â °æ¿ì´Â, µðÆúÆ®·ÎVOLATILE¶ó°í ÇØ¼®µË´Ï´Ù.
IMMUTABLE´Â, µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ º¯°æÀ» ½Ç½ÃÇÏÁö ¾Ê´Â °Í, ¹×, ±× ÇÔ¼ö¿¡ °°Àº ÀμöÄ¡¸¦ ÁÖ¾úÀ» °æ¿ì¿¡ Ç×»ó °°Àº °á°ú¸¦ ¹ÝȯÇÏ´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù. À̰ÍÀº, µ¥ÀÌÅͺ£À̽º¸¦ °Ë»öÇϰųª, Àμö ¸®½ºÆ®Áß¿¡ Á÷Á¢ Á¸ÀçÇÏÁö ¾Ê´Â Á¤º¸¸¦ »ç¿ëÇϰųª ÇÏÁö ¾Ê´Â´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ ¿É¼ÇÀÌ ÁöÁ¤µÇ¾úÀ» °æ¿ì, Àμö°¡ ¸ðµÎ Á¤¼öÀÎ ÇÔ¼ö È£ÃâÀº, Áï½Ã ÇÔ¼ö°ªÀ¸·Î ´ëüÇÒ ¼ö ÀÖ½À´Ï´Ù.
STABLE´Â, µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ º¯°æÀ» ½Ç½ÃÇÏÁö ¾Ê´Â °Í, ¹×, ´ÜÀÏ Å×ÀÌºí ½ºÄµ ³»¿¡¼ °°Àº Àμö°ª¿¡ ´ëÇØ¼´Â Ç×»ó °°Àº °á°ú¸¦ ¹Ýȯ ÇÏÁö¸¸,
SQL¹®ÀÌ ´Ù¸£¸é, °á°ú°¡ º¯°æµÉ °¡´É¼ºÀÌ ÀÖ´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù.
À̰ÍÀº, µ¥ÀÌÅͺ£À̽º °Ë»öÀ̳ª(ÇöÀçÀÇ ½Ã°£´ë¿Í °°Àº) ¸Å°³º¯¼ö µî¿¡ ÀÇÁ¸ÇÏ´Â °á°ú¸¦ °®´Â ÇÔ¼ö¸¦ ¼±ÅÃÇÏ´Â °ÍÀÌ ÀûÀýÇÕ´Ï´Ù.
¶Ç,current_timestamp°èÀÇ ÇÔ¼ö´Â, 1°³ÀÇ Æ®·£Àè¼Ç³»¿¡¼´Â °ªÀÌ º¯ÈÇÏÁö ¾Ê±â ¶§¹®¿¡, STABLEÀÎ °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä.
VOLATILE´Â, ´ÜÀÏ Å×ÀÌºí ½ºÄµ ³»¿¡ ÀÖ¾î ÇÔ¼öÀÇ °ªÀÌ º¯ÈÇÒ °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡, ÃÖÀûÈÇÒ ¼ö ¾ø´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù. ÀÌ·¯ÇÑ Àǹ̿¡¼, ¸î ¾ÈµÇ´Â º¯µ¿ÀûÀÎ µ¥ÀÌÅͺ£À̽º ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é,random(),currval(),timeofday()µîÀº º¯µ¿ÀûÀÎ ÇÔ¼öÀÔ´Ï´Ù. ±×·¯³ª, ¿¹¸¦ µé¸ésetval()µîÀÇ ºÎÀÛ¿ëÀÌ ÀÖ´Â ÇÔ¼ö´Â, ±× °á°ú¸¦ ¿ÏÀüÇÏ°Ô ¿¹ÃøÇÒ ¼ö ÀÖ´Ù°í ÇØµµ, È£ÃâÀ» ÃÖÀûÈÇÏÁö ¾Ê°Ô, º¯µ¿ÀûÀ¸·Î ºÐ·ùÇÒ Çʿ䰡 ÀÖ´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä.
ÀÚ¼¼ÇÑ °ÍÀºSection 33.6À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä.
CALLED ON NULL INPUT(µðÆúÆ®)¸¦ ÁöÁ¤Çϸé, Àμö¿¡ NULL°¡ Æ÷ÇԵǾî À־, ÇÔ¼ö°¡ È£Ã⠵˴ϴÙ. ±× °æ¿ì´Â, Çʿ信 µû¶ó¼ NULL°ªÀ» È®ÀÎÇØ, ÀûÀýÇÑ ´ëÀÀÀ» ÇÏ´Â °ÍÀº ÇÔ¼ö ÀÛ¼ºÀÚÀÇ Ã¥ÀÓÀÔ´Ï´Ù.
RETURNS NULL ON NULL INPUTȤÀºSTRICT¸¦ ÁöÁ¤Çϸé, ÇÔ¼öÀÇ Àμö¿¡ NULLÀÌ ÀÖ´Â °æ¿ì, Ç×»ó NULLÀ» ¹ÝȯÇÕ´Ï´Ù. ÀÌ ¸Å°³º¯¼ö°¡ ÁöÁ¤µÇ¸é, NULL Àμö°¡ ÀÖ´Â °æ¿ì, ÇÔ¼ö´Â ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. ´ë½Å¿¡, NULLÀ̶ó°í ÇÏ´Â °á°ú°¡ ÀÚµ¿ÀûÀ¸·Î ÁÖ¾îÁý´Ï´Ù.
SECURITY INVOKER¸¦ ÁöÁ¤Çϸé, ÇÔ¼ö¸¦ È£ÃâÇÑ À¯ÀúÀÇ ±ÇÇÑÀ¸·Î, ±× ÇÔ¼ö°¡ ½ÇÇàµË´Ï´Ù. À̰ÍÀÌ µðÆúÆ®ÀÔ´Ï´Ù. SECURITY DEFINER¸¦ ÁöÁ¤Çϸé, ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ À¯ÀúÀÇ ±ÇÇÑÀ¸·Î, ±× ÇÔ¼ö°¡ ½ÇÇàµË´Ï´Ù.
EXTERNALŰ¿öµå´Â, SQL¿ÍÀÇ È£È¯¼ºÀ» À¯ÁöÇϱâ À§ÇØ, Çã¿ëµÇ°í ÀÖ½À´Ï´Ù. ±×·¯³ª, SQL¿Í´Â ´Þ¸®, ÀÌ ±â´ÉÀº ¿ÜºÎ ÇÔ¼ö¿¡°Ô¸¸ Àû¿ëµÇ´Â °ÍÀº ¾Æ´Ï±â ¶§¹®¿¡, ÀÌ Å°¿öµå´Â »ý·« °¡´ÉÇÕ´Ï´Ù.
ÇÔ¼ö¸¦ Á¤ÀÇÇÏ´Â ¹®ÀÚ¿ »ó¼öÀÔ´Ï´Ù. ÀÌ ¸Å°³º¯¼öÀÇ Àǹ̴ ¾ð¾î¿¡ ÀÇÁ¸ÇÕ´Ï´Ù. ³»ºÎÀûÀÎ ÇÔ¼ö¸í, °´Ã¼ ÆÄÀÏ¿¡ÀÇ °æ·Î, SQL Ä¿¸àµå, ÀýÂ÷ ¾ð¾î·Î ±â¼úµÈ ÅØ½ºÆ®µîÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ ±¸¹®ÀÇAS±¸´Â, C¾ð¾îÀÇ ¿ø½Ã ÄÚµåÁßÀÇ ÇÔ¼ö¸íÀÌ SQL ÇÔ¼öÀÇ À̸§°ú °°Áö ¾ÊÀº °æ¿ì, µ¿ÀûÀ¸·Î ·Îµå µÇ´Â C¾ð¾î ÇÔ¼ö¿¡ »ç¿ëµË´Ï´Ù. obj_file ¶ó°í ÇÏ´Â ¹®ÀÚ¿Àº µ¿ÀûÀ¸·Î ·ÎµåÇÒ ¼ö ÀÖ´Â °´Ã¼¸¦ Æ÷ÇÔÇÑ ÆÄÀÏÀÇ À̸§À¸·Î, link_symbol ´Â ±× ÇÔ¼öÀÇ ¸µÅ© ½Éº¼, Áï, C¾ð¾î ¿ø½Ã ÄÚµåÁßÀÇ ÇÔ¼öÀÇ À̸§ÀÔ´Ï´Ù. ¸µÅ© ½Éº¼ÀÌ »ý·« µÇ¾úÀ» °æ¿ì, Á¤ÀǵǴ SQL ÇÔ¼öÀÇ À̸§°ú °°Àº °ÍÀ̶ó°í °¡Á¤µË´Ï´Ù.
ÇÔ¼ö¿¡ °üÇÑ Á¤º¸¸¦, ºÎºÐÀûÀ¸·Î ¼±ÅÃÇØ ÁöÁ¤ÇÏ´Â ÀüÅëÀûÀÎ ¹æ¹ýÀÔ´Ï´Ù. ¿©±â¼ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â ¼Ó¼ºÀ» ÀÌÇÏ¿¡ ³ªÅ¸³À´Ï´Ù.
STRICT¶Ç´ÂRETURNS NULL ON NULL INPUT¿Í °°½À´Ï´Ù.
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ÇÔ¼ö´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ»ç¿ëÀÚÀÇ ±ÇÇÑÀ¸·Î ½ÇÇàµÇ±â ¶§¹®¿¡, ±× ÇÔ¼ö¸¦ À߸ø »ç¿ëÇÒ ¼ö ¾ø´Ù´Â °Í¿¡ ÁÖÀÇÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ¾ÈÀü»ó,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¹øÂ°ÀÇ ¹æ¹ýÀÌ Ç¥ÁØ¿¡ µû¸£°í ÀÖ½À´Ï´Ù.