ÀÌ Àý¿¡¼´Â UDF¸¦ ±¸ÇöÇÒ ¶§ Ãß°¡ÀûÀ¸·Î °í·ÁÇØ¾ß ÇÒ »çÇ×, ¸í½ÉÇØ¾ß ÇÒ
Ç׸ñ ¹× ÇÇÇØ¾ß ÇÒ Ç׸ñ µîÀ» ¼³¸íÇÕ´Ï´Ù.
- UDF ³»¿ëÀº º¸È£µÇ¾î¾ß ÇÕ´Ï´Ù. ½ÇÇà °¡´ÉÇÑ
ÇÔ¼ö ³»¿ëÀº DB2¿¡ ÀÇÇØ ¾î¶² ¹æ¹ýÀ¸·Îµç ĸÃĵÇÁö ¾Ê°Å³ª º¸È£µÇ¾î¾ß
ÇÕ´Ï´Ù. CREATE FUNCTION¹®Àº ´ÜÁö ³»¿ëÀ» °¡¸®Åµ´Ï´Ù. ÇØ´ç ÇÔ¼ö¿¡
ÀÇÁ¸ÇÏ´Â ÇÔ¼ö¿Í µ¥ÀÌÅͺ£À̽º ÀÀ¿ëÇÁ·Î±×·¥ÀÇ ¹«°á¼ºÀ»
º¸Á¸ÇÏ·Á¸é, »ç¿ëÀÚ´Â ÇØ´ç ÇÔ¼ö°¡ µé¾î ÀÖ´Â µð·ºÅ丮·ÎÀÇ ¾×¼¼½º¸¦
°ü¸®Çϰí, ³»¿ë ÀÚü¸¦ º¸È£ÇÔÀ¸·Î½á ÇÔ¼ö ³»¿ëÀÌ ½Ç¼ö·Î ¶Ç´Â °íÀÇ·Î
»èÁ¦µÇ°Å³ª ¹Ù²îÁö ¾Êµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù.
- DB2´Â DB2¿Í SQL(Áï, ¸ðµç SQL Àμö ¹× ÇÔ¼ö ¸®ÅÏ °ª)°£ÀÇ ÀÎÅÍÆäÀ̽º¿¡
¸ðµç ¹öÆÛ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ Àü´ÞÇÕ´Ï´Ù.
UDF Àμö´Â ¹Ýµå½Ã Æ÷ÀÎÅÍ·Î Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù.
- ¸ðµç SQL Àμö °ªÀÌ ¹öÆÛ¿¡ µé¾î°©´Ï´Ù. À̰ÍÀº ÇØ´ç °ªÀÇ »çº»À» ¸¸µé¾î
À̰ÍÀÌ UDF¿¡ Á¦½ÃµÊÀ» ¶æÇÕ´Ï´Ù.
UDF°¡ ÀÔ·Â ¸Å°³º¯¼ö¸¦ º¯°æÇϸé, º¯°æµÈ ³»¿ëÀº
SQL °ªÀ̳ª 󸮿¡ ¾Æ¹«·± ¿µÇâÀ» ¹ÌÄ¡Áö ¾ÊÁö¸¸ DB2°¡
Á¦´ë·Î ÀÛµ¿ÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ½À´Ï´Ù.
- OLE ÀÚµ¿ÀÇ °æ¿ì, ÀÔ·Â ¸Å°³º¯¼ö¸¦ º¯°æÇÏÁö ¸¶½Ê½Ã¿À.
±×·¸Áö ¾ÊÀ¸¸é ¸Þ¸ð¸® ÀÚ¿øÀÌ ÇØÁ¦µÇÁö ¾Ê¾Æ ¸Þ¸ð¸® ºÎÁ·ÀÌ ¹ß»ýÇÒ ¼ö
ÀÖ½À´Ï´Ù.
ÁÖ¿ä OLE ¶óÀ̺귯¸® ¹öÀüÀÌ ºÒÀÏÄ¡Çϰųª OLE ¶óÀ̺귯¸® ÃʱâÈ¿¡ ½ÇÆÐÇÑ °æ¿ì,
µ¥ÀÌÅͺ£À̽º °ü¸® ÇÁ·Î±×·¥Àº SQLCODE -465(SQLSTATE 58032)¿Í ÀÌÀ¯ ÄÚµå 34(OLE ¶óÀ̺귯¸® ÃʱâÈ
½ÇÆÐ)¸¦ ¸®ÅÏÇÕ´Ï´Ù.
- ¸ðµç ¿î¿µ Ç÷§Æû¿¡¼ÀÇ UDF¿¡¼ ÀçÁøÀÔ(re-entrancy)Àº
°·ÂÈ÷ ±ÇÀåµÇ´Â °ÍÀ¸·Î,
À̰ÍÀÇ »çº» Çϳª°¡ º¹¼öÀÇ µ¿½Ã ¼öÇà ¸í·É¹®°ú ÀÀ¿ëÇÁ·Î±×·¥¿¡ »ç¿ëµÉ ¼ö
ÀÖ½À´Ï´Ù.
SCRATCHPAD ±â´ÉÀº ÀçÁøÀÔ¿¡ ÀÇÇØ ºÎ°úµÇ´Â ¸¹Àº Á¦ÇÑÁ¡À» ¹æÁöÇϴµ¥
»ç¿ëµË´Ï´Ù.
- ¿¹¸¦ µé¾î, ÀçÄÄÆÄÀϵǰí À縵ũµÇ¾î ÇöÀç »ç¿ëµÇ°í ÀÖ´Â ÇÔ¼öÀÇ ³»¿ëÀÌ
¼öÁ¤µÇ´Â °æ¿ì, DB2´Â Æ®·£Àè¼Ç Áß¿¡
ÇÔ¼ö¸¦ º¯°æÇÏÁö ¾Ê½À´Ï´Ù.
±×·¯³ª ÈÄ¼Ó Æ®·£Àè¼Ç¿¡¼ »ç¿ëµÇ´Â »çº»Àº, ÀÌ·¯ÇÑ Á¾·ùÀÇ µ¿Àû ¼öÁ¤ÀÌ
¹ß»ýÇÏ´Â °æ¿ì ´Þ¶óÁú ¼ö ÀÖ½À´Ï´Ù.
»ç¿ëÀÚÀÇ ¿î¿µ üÁ¦ ¿ª½Ã »ç¿ëÀÚ°¡ »ç¿ë ÁßÀÎ UDF ³»¿ëÀ»
º¯°æÇÏÁö ¸øÇϵµ·Ï ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ·¯ÇÑ ¹æ¹ýÀº ±ÇÀåµÇÁö ¾Ê½À´Ï´Ù.
- UDF¿¡¼ µ¿Àû ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ´Â °æ¿ì, DB2·Î ¸®ÅÏÇϱâ Àü¿¡ À̰ÍÀº
ÇØÁ¦µÇ¾î¾ß ÇÕ´Ï´Ù. À̰ÍÀº ƯÈ÷ NOT FENCED °æ¿ì¿¡ Áß¿äÇÕ´Ï´Ù.
±×·¯³ª È£Ãâ°ú È£Ãâ°£¿¡ °ÉÄ£ UDF¿¡ ÀÇÇØ ÇÊ¿äÇÑ µ¿Àû ¸Þ¸ð¸®¸¦ ¾ÞÄ¿(anchor)Çϱâ
À§Çؼ´Â SCRATCHPAD ±â´ÉÀÌ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ·¯ÇÑ ¹æ½ÄÀ¸·Î ½ºÅ©·¡Ä¡ ÆÐµå¸¦ »ç¿ëÇÏ´Â °æ¿ì, UDFÀÇ CREATE FUNCTION¿¡
FINAL CALL ¼Ó¼ºÀ» ÁöÁ¤ÇϽʽÿÀ.
ÀÌ·¸°Ô ÇÏ´Â ÀÌÀ¯´Â UDF¸¦ ¹Ýº¹Çؼ »ç¿ëÇÔÀ¸·Î½á, ½Ã°£ÀÌ Áö³²¿¡ µû¶ó
½Ã½ºÅÛÀÇ ¸Þ¸ð¸®°¡ ºÎÁ·ÇÏ°Ô µÉ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.
ÀÌ·¯ÇÑ ÀÌÀ¯´Â UDF°¡ »ç¿ëÇÏ´Â ´Ù¸¥ ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇØ¼µµ Àû¿ëµË´Ï´Ù.
- Çʿ信 µû¶ó NOT NULL CALL ¿É¼ÇÀ» »ç¿ëÇϽʽÿÀ.
CREATE FUNCTION ¿É¼ÇÀ» »ç¿ëÇÏ¸é °¢°¢ÀÇ SQL Àμö°¡ ³Î(NULL)ÀÎÁö ¿©ºÎ¸¦
Á¡°ËÇÒ Çʿ䰡 ¾ø°í, NULL °ªÀ» °¡Áö°í ÀÖÀ» ¶§ ´õ ÁÁÀº ¼º´ÉÀ» ³ªÅ¸³À´Ï´Ù.
- »ç¿ëÀÚÀÇ UDF·ÎºÎÅÍ »ý¼ºµÈ °á°ú°¡ ÀÔ·Â SQL Àμö ÀÌ¿ÜÀÇ ´Ù¸¥ °Í¿¡
ÀÇÁ¸ÇÏ´Â °æ¿ì, NOT DETERMINISTIC ¿É¼ÇÀ» »ç¿ëÇϽʽÿÀ.
ÀÌ ¿É¼ÇÀº SQL ÄÄÆÄÀÏ·¯°¡ Àϰü¼ºÀÌ ¾ø´Â °á°ú¸¦ ¹ß»ý½Ãų ¼öµµ ÀÖ´Â
ƯÁ¤ ÃÖÀûȸ¦ ¼öÇàÇÏÁö ¾Êµµ·Ï ÇÕ´Ï´Ù.
- »ç¿ëÀÚÀÇ UDF¿¡ ¾ÈÁ¤ÀûÀ¸·Î ¼öÇàµÉ Çʿ䰡 ÀÖ´Â ºÎ°¡ÀÛ¿ëÀÌ ÀÖ´Â °æ¿ì,
EXTERNAL ACTION ¿É¼ÇÀ» »ç¿ëÇϽʽÿÀ. EXTERNAL ACTIONÀº SQL ÄÄÆÄÀÏ·¯°¡
ƯÁ¤ »óȲ¿¡¼ »ç¿ëÀÚÀÇ UDF È£ÃâÀ» ¸·À» ¼öµµ Àִ ƯÁ¤ ÃÖÀûȸ¦
¼öÇàÇÏÁö ¸øÇϵµ·Ï ÇÕ´Ï´Ù.
- FENCED ¹× UNFENCED¿¡¼ Çϳª¸¦ ¼±ÅÃÇÏ´Â °Í¿¡ ´ëÇÏ¿©:
- FENCED UDF
- FENCED UDF´Â ÀÚü ÇÁ·Î¼¼½º¿¡¼ ½ÇÇàÇϹǷΠ´ëºÎºÐÀÇ DB2 ³»ºÎ Á¦¾î¿Í µ¥ÀÌÅÍ ¿µ¿ªÀ»
½Ç¼ö³ª °íÀÇ·Î ¾×¼¼½ºÇÒ ¼ö ¾ø½À´Ï´Ù. ±×·¯¹Ç·Î µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇØ FENCED UDF¸¦
¼±ÅÃÇÏ´Â °ÍÀÌ ´õ ¾ÈÀüÇÕ´Ï´Ù. ±×·¯³ª, NOT FENCED UDF¸¸Å ½±Áö´Â ¾ÊÁö¸¸ ÇÁ·Î±×·¡¹Ö
¿À·ù°¡ µé¾î ÀÖ´Â FENCED UDF°¡ DB2¸¦ Á¾·á½Ãų °¡´É¼ºÀº ¾ÆÁ÷µµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î,
¸®ÅÏ º¯¼öÀÇ ´Ù·® °ãÃľ²±â¸¦ ¼öÇàÇÏ´Â UDF´Â DB2¸¦ ÀÌ»ó Á¾·á½Ãų ¼ö ÀÖ½À´Ï´Ù.
- UNFENCED UDF
- NOT FENCED UDF´Â DB2 ¿£Áø ÇÁ·Î¼¼½º¿¡ Á÷Á¢ ·ÎµåµÇ°í ½ÇÇàµÇ¹Ç·Î FENCED UDFº¸´Ù
¼º´ÉÀÌ ³´½À´Ï´Ù. NOT FENCED UDF´Â ÇÁ·Î¼¼½º Åë½Å ¿À¹öÇìµåÀÇ ¼º´É ºñ¿ëÀ»
ȸÇÇÇÕ´Ï´Ù. ±×·¯³ª NOT FENCED UDF´Â DB2 ³»ºÎ Á¦¾î³ª µ¥ÀÌÅÍ ¿µ¿ªÀ» ¾×¼¼½ºÇϰųª
º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù. FENCED UDFº¸´Ù´Â Á¦´ë·Î ÀÛ¼ºµÇÁö ¾ÊÀº NOT FENCED UDF·Î
DB2¸¦ ´õ ½±°Ô Á¾·á½Ãų ¼ö ÀÖ½À´Ï´Ù.
FENCED ¹× NOT FENCED UDF µÑ´Ù¿¡ ´ëÇØ È®½ÇÇÏ°Ô ´ÙÀ½°ú °°ÀÌ ¼öÇàÇØ¾ß ÇÕ´Ï´Ù.
- UDF°¡ °ß°íÇÏ°Ô ÀÛ¼ºµÇ¾ú´ÂÁö È®ÀÎÇÕ´Ï´Ù
- UDF¸¦ ¾ö°ÝÈ÷ ¼³°èÇÏ°í ±× Äڵ带 °ËÅäÇÕ´Ï´Ù
- UDF°¡ Á¦´ë·Î ÀÛ¼ºµÇÁö ¾ÊÀº °æ¿ì Å×½ºÆ® µ¥ÀÌÅͺ£À̽º¿Í °°ÀÌ ¾Æ¹«·± ÇÇÇØ¸¦
ÀÔÈ÷Áö ¾Ê´Â ȯ°æ¿¡¼ UDF¸¦ Å×½ºÆ®ÇÕ´Ï´Ù.
UDF¿¡ ÀÇÇØ ÀϾ´Â ´ëºÎºÐÀÇ ÀÌ»ó Á¾·á´Â -430 SQLCODE¸¦ ¸®ÅÏÇÏ°í µ¥ÀÌÅͺ£À̽º
¼Õ»óÀ» ¹æÁöÇÏ´Â DB2¿¡¼ °¨ÁöµË´Ï´Ù.
±×·¯³ª, ´ë·® ¸®ÅÏ °ª ¹öÆÛÀÇ °ãÃľ²±â¸¦ Æ÷ÇÔÇÑ Æ¯Á¤ UDF ¿Àµ¿ÀÛÀº UDF»Ó¸¸ ¾Æ´Ï¶ó
DB2¸¦ ½ÇÆÐÇÏ°Ô ¸¸µé ¼ö ÀÖ½À´Ï´Ù. °¡º¯ ±æÀÌ µ¥ÀÌÅ͸¦ ¸®ÅÏÇϰųª ¸®ÅÏ °ª ¹öÆÛ·Î ¿Å°Ü¾ß
ÇÏ´Â ¹ÙÀÌÆ® ¼ö¸¦ °è»êÇÏ´Â UDF¿¡ ƯÈ÷ ÁÖÀÇÇϽʽÿÀ.
- EUC ÄÚµå ¼¼Æ®¸¦ »ç¿ëÇÏ´Â UDF »ç¿ë½Ã °í·Á»çÇ×Àº
UDF¿¡ ´ëÇÑ °í·Á»çÇ×ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
- NOT FENCED UDF¸¦ ¼öÇàÇÏ´Â ÀÀ¿ëÇÁ·Î±×·¥ÀÇ °æ¿ì, ¸Ç óÀ½ ÀÌ·¯ÇÑ UDF°¡
È£ÃâµÉ ¶§ UDF_MEM_SZ ±¸¼º ¸Å°³º¯¼ö¿¡ ÀÇÇØ Ç¥½ÃµÈ Å©±âÀÇ
¸Þ¸ð¸® ºí·ÏÀÌ ÀÛ¼ºµË´Ï´Ù.
±×¸®°í³ª¼ ¸í·É¹®º°·Î DB2¿Í NOT FENCED UDF°£ÀÇ ÀÎÅÍÆäÀ̽º¸¦ À§ÇÑ ¸Þ¸ð¸®°¡
Çʿ信 µû¶ó ÀÌ ¸Þ¸ð¸® ºí·ÏÀ¸·ÎºÎÅÍ ÇÒ´çµÇ°í ÇÒ´çÇØÁ¦µË´Ï´Ù.
FENCED UDFÀÇ °æ¿ì, ´Ù¸¥ ¸Þ¸ð¸® ºí·ÏÀÌ °°Àº ¹æ¹ýÀ¸·Î »ç¿ëµË´Ï´Ù.
¸Þ¸ð¸®°¡ ÇÁ·Î¼¼½ºµé °£¿¡ °øÀ¯µÇ±â ¶§¹®¿¡ À̰ÍÀº ´Ù¸¨´Ï´Ù.
½ÇÁ¦·Î, ÀÀ¿ëÇÁ·Î±×·¥ÀÌ NOT FENCED¿Í FENCED UDF¸¦ ¸ðµÎ »ç¿ëÇÏ´Â °æ¿ì,
UDF_MEM_SZ ¸Å°³º¯¼ö·Î °¢°¢ÀÇ Å©±â°¡ Ç¥½ÃµÇ´Â
µÎ °³ÀÇ º°µµÀÇ ¸Þ¸ð¸® ºí·ÏÀÌ »ç¿ëµË´Ï´Ù.
ÀÌ ±¸¼º ¸Å°³º¯¼ö¿¡ ´ëÇØ¼´Â °ü¸® ¾È³»¼¿¡¼ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
- ´ÙÀ½ »óȲ¿¡¼´Â DISALLOW PARALLELISM ¿É¼ÇÀ» »ç¿ëÇϽʽÿÀ.
- ½ºÄ®¶ó UDF¿¡¼, »ç¿ëÀÚÀÇ UDF°¡ Àý´ëÀûÀ¸·Î °°Àº »çº»À»
¼öÇàÇÏ´Â °æ¿ì.
ÀϹÝÀûÀ¸·Î À̰ÍÀº NOT DETERMINISTIC SCRATCHPAD UDFÀÇ °æ¿ìÀÔ´Ï´Ù.
(¿¹¸¦ µé¾î, ½ºÅ©·¡Ä¡ ÆÐµå °í·Á»çÇ׿¡ ÁöÁ¤µÈ °è¼ö±â(counter)
UDF¸¦ º¸½Ê½Ã¿À.)
- UDF°¡ ´ÜÀÏ ÂüÁ¶¸¦ À§ÇØ ÇÑ ¹ø¿¡ º¹¼öÀÇ ÆÄƼ¼Ç¿¡¼ ¼öÇàµÇ´Â
°ÍÀ» ¿øÇÏÁö ¾Ê´Â °æ¿ì.
- Å×À̺í ÇÔ¼ö¸¦ ÁöÁ¤ÇÏ´Â °æ¿ì.
±×·¸Áö ¾ÊÀº °æ¿ì, ±âº»°ªÀÎ ALLOW PARALLELISMÀ» ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù.