°ü¸® ¾È³»¼­


»ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö(UDF) ¹× ¸Þ¼Òµå ÀÛ¼º

»ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö(UDF)´Â SQLÀÇ ³»Àå ÇÔ¼ö¿¡¼­ Á¦°øÇÏ´Â Áö¿ø¿¡ È®ÀåµÇ°í Ãß°¡µÇ¸ç, ³»Àå ÇÔ¼ö°¡ »ç¿ëµÇ´Â °÷ÀÌ¸é ¾îµðµçÁö »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½°ú °°ÀÌ UDF¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.

UDF¿¡´Â ´ÙÀ½°ú °°Àº ¼¼ °¡Áö À¯ÇüÀÌ ÀÖ½À´Ï´Ù.

½ºÄ®¶ó
È£Ãâ ¶§¸¶´Ù ÇÑ °¡Áö °ªÀÇ ÀÀ´äÀ» ¸®ÅÏÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ³»Àå ÇÔ¼ö SUBSTR()´Â ½ºÄ®¶ó ÇÔ¼öÀÔ´Ï´Ù. ½ºÄ®¶ó UDF´Â ¿ÜºÎ¿¡ Àְųª Àü·¡µÉ ¼ö ÀÖ½À´Ï´Ù.

Ä÷³
ºñ½ÁÇÑ °ª(Ä÷³)ÀÇ ¼¼Æ®¿¡¼­ ÇÑ °¡Áö °ªÀÇ ÀÀ´äÀ» ¸®ÅÏÇÕ´Ï´Ù. ¶ÇÇÑ, Á¾Á¾ DB2¿¡¼­´Â ÃѰè ÇÔ¼ö¶ó°í ÇÕ´Ï´Ù. Ä÷³ ÇÔ¼öÀÇ ¿¹·Î´Â ³»Àå ÇÔ¼ö AVG()°¡ ÀÖ½À´Ï´Ù. ¿ÜºÎ Ä÷³ UDF´Â DB2¿¡ Á¤ÀÇµÉ ¼ö ¾øÁö¸¸, ³»ÀåµÈ Ä÷³ ÇÔ¼ö Áß Çϳª¿¡¼­ Àü·¡µÈ Ä÷³ UDF´Â Á¤ÀÇµÉ ¼ö ÀÖ½À´Ï´Ù. ÀÌ »çÇ×Àº ±¸º° À¯Çü¿¡ À¯¿ëÇÕ´Ï´Ù.

¿¹¸¦ µé¾î, ±âº» À¯Çü INTEGER·Î Á¤ÀÇµÈ ±¸º° À¯Çü SHOESIZE°¡ ÀÖ´Â °æ¿ì, ³»Àå ÇÔ¼ö AVG(INTEGER)¿¡¼­ Àü·¡µÈ UDF AVG(SHOESIZE)´Â Á¤ÀÇµÉ ¼ö ÀÖÀ¸¸ç Ä÷³ ÇÔ¼ö°¡ µË´Ï´Ù.

Å×À̺í
Å×À̺íÀ» ÂüÁ¶ÇÏ´Â SQL¹®À¸·Î ¸®ÅÏÇÕ´Ï´Ù. Å×À̺í ÇÔ¼ö´Â SELECT¹®ÀÇ FROMÀý¿¡¼­¸¸ ÂüÁ¶µË´Ï´Ù. ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© SQL ¾ð¾î ó¸® ±â´ÉÀ» DB2 µ¥ÀÌÅͰ¡ ¾Æ´Ñ µ¥ÀÌÅÍ¿¡ Àû¿ëÇϰųª, µ¥ÀÌÅ͸¦ DB2 Å×À̺í·Î º¯È¯ÇÒ ¼ö ÀÖ½À´Ï´Ù.

¿¹¸¦ µé¾î, Å×À̺í ÇÔ¼ö´Â ÆÄÀÏÀ» ¼±ÅÃÇÏ¿© Å×À̺í·Î º¯È¯Çϰí World Wide WebÀÇ »ùÇà µ¥ÀÌÅ͸¦ Ç¥·Î ¸¸µé°Å³ª Lotus Notes µ¥ÀÌÅͺ£À̽º¿¡ ¾×¼¼½ºÇÏ°í ³¯Â¥, ¼Û½ÅÀÚ, ¸ÞÀÏ ¸Þ½ÃÁö ÅØ½ºÆ®¿Í °°Àº Á¤º¸¸¦ ¸®ÅÏÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ Á¤º¸´Â µ¥ÀÌÅͺ£À̽ºÀÇ ´Ù¸¥ Å×À̺í°ú Á¶À뵃 ¼ö ÀÖ½À´Ï´Ù.

Å×À̺í ÇÔ¼ö´Â ¿ÜºÎ ÇÔ¼ö¸¸ µÉ ¼ö ÀÖ½À´Ï´Ù. Àü·¡ ÇÔ¼ö´Â µÉ ¼ö ¾ø½À´Ï´Ù.

±âÁ¸ÀÇ UDF Á¤º¸´Â SYSCAT.FUNCTIONS ¹× SYSCAT.FUNCPARMS īŻ·Î±× ºä¿¡ ±â·ÏµË´Ï´Ù. ½Ã½ºÅÛ Ä«Å»·Î±×¿¡´Â UDF¿¡ ´ëÇÑ ½ÇÇà °¡´ÉÇÑ Äڵ尡 µé¾î ÀÖÁö ¾Ê½À´Ï´Ù(±×·¯¹Ç·Î, ¹é¾÷ Ç÷£ ¹× º¹±¸ Ç÷£À» ÀÛ¼ºÇÏ·Á¸é, ½ÇÇà°¡´ÉÇÑ UDF °ü¸® ¹æ¹ýÀ» °í·ÁÇØ¾ß ÇÕ´Ï´Ù).

UDFÀÇ ¼º´É¿¡ ´ëÇÑ Åë°è´Â SQL¹®À» ÄÄÆÄÀÏÇÒ ¶§ Áß¿äÇÕ´Ï´Ù. »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¿¡ ´ëÇÑ Åë°è °»½Å¿¡¼­ ½Ã½ºÅÛ Ä«Å»·Î±×ÀÇ UDF Åë°è¸¦ °»½ÅÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

CREATE FUNCTION¹®À» »ç¿ëÇÏ¿© ƯÁ¤ÇÑ ÀÀ¿ëÇÁ·Î±×·¥¿¡ ¸Â´Â UDF¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­´Â ÀÀ¿ëÇÁ·Î±×·¥ °³¹ß ¾È³»¼­¿¡¼­ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. UDF ±¸¹®¿¡ ´ëÇØ¼­´Â SQL ÂüÁ¶¼­¿¡¼­ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

ÇÔ¼ö ¸ÊÇÎ ÀÛ¼º

¿¬ÇÕ µ¥ÀÌÅͺ£À̽º¿¡¼­ Áö¿ª ÇÔ¼ö ¶Ç´Â Áö¿ª ÇÔ¼ö ÅÛÇø®Æ®(ÇÔ¼ö ÅÛÇø®Æ® ÀÛ¼º¿¡¼­ ¼³¸í)¸¦ Çϳª ÀÌ»óÀÇ µ¥ÀÌÅÍ ¼Ò½º¿¡¼­ ÇÔ¼ö¿Í ÇÔ²² ¸ÊÇÒ ¶§ ÇÔ¼ö ¸ÊÇÎÀ» ÀÛ¼ºÇϽʽÿÀ. ±âº» ÇÔ¼ö ¸ÊÇÎÀº ¸¹Àº µ¥ÀÌÅÍ ¼Ò½º ÇÔ¼ö¿¡ Á¦°øµË´Ï´Ù.

ÇÔ¼ö ¸ÊÇÎÀº ´ÙÀ½°ú °°Àº °æ¿ì¿¡ À¯¿ëÇÕ´Ï´Ù.

CREATE FUNCTION MAPPING¹®À¸·Î Á¤ÀÇµÈ ÇÔ¼ö ¸ÊÇÎÀº ¿¬ÇÕ µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåµË´Ï´Ù.

ÇÔ¼ö(¶Ç´Â ÇÔ¼ö ÅÛÇø®Æ®)¿¡´Â µ¥ÀÌÅÍ ¼Ò½º ÇÔ¼ö¿Í µ¿ÀÏÇÑ ¼öÀÇ ÀÔ·Â ¸Å°³º¯¼ö°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. Ãß°¡·Î, ¿¬ÇÕ ÃøÀÇ ÀÔ·Â ¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍ À¯ÇüÀº µ¥ÀÌÅÍ ¼Ò½º ÃøÀÇ ÀÔ·Â ¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍ À¯Çü°ú ȣȯ °¡´ÉÇØ¾ß ÇÕ´Ï´Ù.

CREATE FUNCTION MAPPING¹®À» »ç¿ëÇÏ¿© ÇÔ¼ö ¸ÊÇÎÀ» ÀÛ¼ºÇϽʽÿÀ. ¿¹¸¦ µé¾î, Oracle1 ¼­¹ö¿¡¼­ Oracle AVGNEW ÇÔ¼ö¿Í DB2 µ¿µî ÇÔ¼ö°£¿¡ ÇÔ¼ö ¸ÊÇÎÀ» ÀÛ¼ºÇÏ·Á¸é, ´ÙÀ½À» ÀÔ·ÂÇϽʽÿÀ.

   CREATE FUNCTION MAPPING ORAVGNEW FOR SYSIBM.AVG(INT) SERVER ORACLE1
   OPTIONS (REMOTE_NAME 'AVGNEW')

¿¬ÇÕ µ¥ÀÌÅͺ£À̽º¿¡¼­ SYSADM ¶Ç´Â DBADM ±ÇÇÑ Áß Çϳª¸¦ º¸À¯ÇÏ¿© ÀÌ ¸í·É¹®À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ÇÔ¼ö ¸ÊÇÎ ¼Ó¼ºÀº SYSCAT.FUNCMAPPINGS¿¡ ÀúÀåµË´Ï´Ù.

¿¬ÇÕ ¼­¹ö´Â ÀԷ ȣ½ºÆ® º¯¼ö¸¦ ¹ÙÀεåÇϰųª LOB, LONG VARCHAR/VARGRAPHIC, DATALINK, ±¸ºÐ À¯Çü ¹× ±¸Á¶È­µÈ À¯ÇüÀÇ °á°ú¸¦ °Ë»öÇÏÁö ¾Ê½À´Ï´Ù. ÀÔ·Â ¸Å°³º¯¼ö ¶Ç´Â ¸®ÅÏµÈ °ª¿¡ À̵é À¯Çü Áß Çϳª°¡ Æ÷ÇԵǸé, ÇÔ¼ö ¸ÊÇÎÀÌ ÀÛ¼ºµÉ ¼ö ¾ø½À´Ï´Ù.

ÇÔ¼ö ¸ÊÇÎ »ç¿ë ¹× ÀÛ¼º¿¡ ´ëÇØ¼­´Â ÀÀ¿ëÇÁ·Î±×·¥ °³¹ß ¾È³»¼­¿¡¼­ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. CREATE FUNCTION MAPPING ±¸¹®¿¡ ´ëÇØ¼­´Â SQL ÂüÁ¶¼­¿¡¼­ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

ÇÔ¼ö ÅÛÇø®Æ® ÀÛ¼º

¿¬ÇÕ ½Ã½ºÅÛ¿¡¼­ ÇÔ¼ö ÅÛÇø®Æ®´Â ÇÔ¼ö ¸ÊÇο¡ ´ëÇÑ "¾ÞÄ¿"¸¦ Á¦°øÇÕ´Ï´Ù. À̸¦ »ç¿ëÇÏ¿© ÇØ´ç DB2 ÇÔ¼ö°¡ ¿¬ÇÕ ¼­¹ö¿¡ ¾øÀ» ¶§ µ¥ÀÌÅÍ ¼Ò½º ÇÔ¼öÀÇ ¸ÊÇÎÀ» ÀÛµ¿ÇÒ ¼ö ÀÖ°Ô ÇÕ´Ï´Ù. ÇÔ¼ö ¸ÊÇο¡¼­´Â DB2¿¡ ÇÔ¼ö ÅÛÇø®Æ® ¶Ç´Â ±âÁ¸ÀÇ ºñ½ÁÇÑ ÇÔ¼ö°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù.

ÅÛÇø®Æ®´Â ´ÜÁö ÇÔ¼ö ½©ÀÏ »ÓÀÔ´Ï´Ù. ÀÌ´Â À̸§, ÀÔ·Â ¸Å°³º¯¼ö ¹× ¸®ÅÏ °ªÀÔ´Ï´Ù. ÇÔ¼ö¿¡ ´ëÇÑ Áö¿ª ½ÇÇà ÆÄÀÏÀÌ ¾ø½À´Ï´Ù.

ÇÔ¼ö¿¡ ´ëÇÑ Áö¿ª ½ÇÇà ÆÄÀÏÀÌ ¾øÀ¸¹Ç·Î, ÇÔ¼ö¸¦ µ¥ÀÌÅÍ ¼Ò½º¿¡¼­ »ç¿ëÇÒ ¼ö´Â À־ ÇÔ¼ö ÅÛÇø®Æ®¸¦ È£ÃâÇÒ ¼ö ¾ø°Ô µÉ ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ Á¶È¸¸¦ °í·ÁÇØ º¸½Ê½Ã¿À.

   SELECT myfunc(C1)
   FROM nick1
   WHERE C2 < 'A'

DB2 ¹× nick1·Î ÂüÁ¶µÇ´Â ¿ÀºêÁ§Æ®°¡ µé¾î ÀÖ´Â µ¥ÀÌÅÍ ¼Ò½º¿¡ µ¿ÀÏÇÑ Á¶ÇÕ ¼ø¼­°¡ ¾øÀ¸¸é, ÇÔ¼ö°¡ µ¥ÀÌÅÍ ¼Ò½º¿¡ ÀÖ´Â µ¿¾È DB2¿¡¼­ ºñ±³°¡ ÀÌ·ç¾îÁ®¾ß ÇϹǷΠÁ¶È¸´Â ½ÇÆÐÇÕ´Ï´Ù. Á¶ÇÕ ¼ø¼­°¡ °°À¸¸é, ºñ±³ Á¶ÀÛÀº myfunc·Î ÂüÁ¶µÇ´Â ±âÃÊ ÇÔ¼ö°¡ ÀÖ´Â µ¥ÀÌÅÍ ¼Ò½º¿¡¼­ ÀÌ·ç¾îÁú¼ö ÀÖ½À´Ï´Ù.

ÇÔ¼ö(¶Ç´Â ÇÔ¼ö ÅÛÇø®Æ®)¿¡´Â µ¥ÀÌÅÍ ¼Ò½º ÇÔ¼ö¿Í µ¿ÀÏÇÑ ¼öÀÇ ÀÔ·Â ¸Å°³º¯¼ö°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ¿¬ÇÕÃøÀÇ ÀÔ·Â ¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍ À¯ÇüÀº µ¥ÀÌÅÍ ¼Ò½ºÃøÀÇ ÀÔ·Â ¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍ À¯Çü°ú ȣȯ °¡´ÉÇØ¾ß ÇÕ´Ï´Ù. ÀÌµé ¿ä±¸»çÇ×Àº ¸®ÅÏ °ª¿¡µµ Àû¿ëµË´Ï´Ù.

CREATE FUNCTION¹®À» AS TEMPLATE Ű¿öµå¿Í ÇÔ²² »ç¿ëÇÏ¿© ÇÔ¼ö ÅÛÇø®Æ®¸¦ ÀÛ¼ºÇϽʽÿÀ. ÅÛÇø®Æ®°¡ ÀÛ¼ºµÈ ÈÄ CREATE FUNCTION MAPPING¹®À» »ç¿ëÇÏ¿© ÅÛÇø®Æ®¸¦ µ¥ÀÌÅÍ ¼Ò½º¿¡ ¸ÊÇÕ´Ï´Ù.

¿¹¸¦ µé¾î, ¼­¹ö S1¿¡¼­ ÇÔ¼ö MTS1FUNC¿¡ ´ëÇÑ ÇÔ¼ö ÅÛÇø®Æ® ¹× ÇÔ¼ö ¸ÊÇÎÀ» ÀÛ¼ºÇÏ·Á¸é, ´ÙÀ½À» ÀÔ·ÂÇϽʽÿÀ.

   CREATE FUNCTION MYFUNC(INT) RETURNS INT AS TEMPLATE
 
   CREATE FUNCTION MAPPING S1_MYFUNC FOR MYFUNC(INT) SERVER S1 OPTIONS
   (REMOTE_NAME 'MYS1FUNC')

ÇÔ¼ö ÅÛÇø®Æ® »ç¿ë ¹× ÀÛ¼º¿¡ ´ëÇØ¼­´Â ÀÀ¿ëÇÁ·Î±×·¥ °³¹ß ¾È³»¼­¿¡¼­ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. CREATE FUNCTION ±¸¹®¿¡ ´ëÇØ¼­´Â SQL ÂüÁ¶¼­¿¡¼­ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.


[ ÆäÀÌÁöÀÇ ¸Ç À§ | ÀÌÀü ÆäÀÌÁö | ´ÙÀ½ ÆäÀÌÁö | ¸ñÂ÷ | »öÀÎ ]