´ÙÀ½ ¿¹´Â UDF ¹× ¸Þ¼Òµå°¡ µî·ÏµÉ ¼ö ÀÖ´Â ´Ù¾çÇÑ ÀüÇüÀûÀÎ »óȲÀ» º¸¿©ÁÝ´Ï´Ù.
ÀÌ ¿¹¿¡¼ ´ÙÀ½ »çÇ׿¡ À¯ÀÇÇϽʽÿÀ.
¿ÜºÎ UDF¸¦ ÀÛ¼ºÇÏ¿© ºÎµ¿ ¼Ò¼öÁ¡ °ªÀÇ Áö¼öȸ¦ ¼öÇàÇß°í, MATH ½ºÅ°¸¶¿¡¼ À̸¦ µî·ÏÇÏ·Á ÇÑ´Ù°í °¡Á¤ÇϽʽÿÀ. DBADM ±ÇÇÑÀ» °¡Áö°í ÀÖ´Ù°í °¡Á¤ÇÕ´Ï´Ù. ±¤¹üÀ§ÇÏ°Ô ÇÔ¼ö¸¦ Å×½ºÆ®Çß°í ¹«°á¼º Ç¥½Ã¸¦ ³ªÅ¸³»Áö ¾Ê´Â´Ù´Â °ÍÀ» ¾Ë°í ÀÖÀ¸¹Ç·Î, À̸¦ NOT FENCED·Î Á¤ÀÇÇÕ´Ï´Ù. DBADM ±ÇÇÑÀÌ ÀÖÀ¸¹Ç·Î µ¥ÀÌÅͺ£À̽º ±ÇÇÑ, CREATE_NOT_FENCED¸¦ ¼ÒÀ¯Çϰí ÀÖ½À´Ï´Ù. ÀÌ ±ÇÇÑÀº NOT FENCED·Î¼ ÇÔ¼ö¸¦ Á¤ÀÇÇÏ´Â µ¥ ÇʼöÀûÀÔ´Ï´Ù.
CREATE FUNCTION MATH.EXPON (DOUBLE, DOUBLE) RETURNS DOUBLE EXTERNAL NAME '/common/math/exponent' LANGUAGE C PARAMETER STYLE DB2SQL NO SQL DETERMINISTIC NO EXTERNAL ACTION NOT FENCED
ÀÌ ¿¹¿¡¼ ½Ã½ºÅÛÀº NOT NULL CALL ±âº»°ªÀ» »ç¿ëÇÕ´Ï´Ù. ÀÌ´Â ÇÑ ÂÊ Àμö°¡ ³Î(NULL)ÀÎ °æ¿ì °á°ú°¡ ³Î(NULL)À̹ǷΠ¹Ù¶÷Á÷ÇÕ´Ï´Ù. ½ºÅ©·¡Ä¡ ÆÐµå°¡ ÇÊ¿äÇÏÁö ¾Ê°í ÃÖÁ¾ È£ÃâÀÌ ÇÊ¿äÇÏÁö ¾ÊÀ¸¹Ç·Î NO SCRATCHPAD ¹× NO FINAL CALL ±âº»°ªÀÌ »ç¿ëµË´Ï´Ù. EXPONÀÌ º´·Ä ó¸®µÉ ¼ö ¾ø´Â ÀÌÀ¯°¡ ¾øÀ¸¹Ç·Î ALLOW PARALLELISM ±âº»°ªÀÌ »ç¿ëµË´Ï´Ù.
»ç¿ëÀÚÀÇ µ¿·á Willie°¡ UDF¸¦ ÀÛ¼ºÇÏ¿© Àμö·Î¼ Àü´ÞµÇ¾î Á¦°øµÈ short ¹®ÀÚ¿ÀÇ Á¸À縦 °Ë»öÇß°í, Á¦°øµÈ CLOB °ª ³»¿¡¼µµ Àμö·Î¼ Àü´ÞµË´Ï´Ù. UDF´Â ¹®ÀÚ¿À» ãÀ» °æ¿ì¿¡´Â CLOB ³»¿¡¼ÀÇ ¹®ÀÚ¿ À§Ä¡¸¦ ¸®ÅÏÇϰí, ¹®ÀÚ¿ÀÌ ¾øÀ» °æ¿ì¿¡´Â Á¦·Î¸¦ ¸®ÅÏÇÕ´Ï´Ù. UDF°¡ ¿ÏÀüÈ÷ Å×½ºÆ®µÇÁö ¾Ê¾Ò´ÂÁö ÀǽɵǹǷΠÀÌ ÇÔ¼ö¿¡ ´ëÇÑ µ¥ÀÌÅͺ£À̽º ¹«°á¼º°ú °ü°è°¡ ÀÖÀ¸¹Ç·Î ÇÔ¼ö¸¦ FENCED·Î¼ Á¤ÀÇÇÕ´Ï´Ù.
¶ÇÇÑ, Willie°¡ ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ¿© FLOAT °á°ú¸¦ ¸®ÅÏÇß½À´Ï´Ù. SQL¿¡¼ »ç¿ëµÉ ¶§ Ç×»ó INTEGER¸¦ ¸®ÅÏÇØ¾ß ÇÑ´Ù°í ¾Ë°í ÀÖ´Ù°í °¡Á¤ÇϽʽÿÀ. ´ÙÀ½ ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
CREATE FUNCTION FINDSTRING (CLOB(500K), VARCHAR(200)) RETURNS INTEGER CAST FROM FLOAT SPECIFIC "willie_find_feb95" EXTERNAL NAME '/u/willie/testfunc/testmod!findstr' LANGUAGE C PARAMETER STYLE DB2SQL NO SQL DETERMINISTIC NO EXTERNAL ACTION FENCED
UDF ³»¿ëÀÌ Á¤¸» FLOAT°ªÀ» ¸®ÅÏÇϵµ·Ï ÁöÁ¤Çϱâ À§ÇØ CAST FROMÀýÀÌ »ç¿ëµÇÁö¸¸, ÀÌ °ªÀ» UDF¸¦ »ç¿ëÇÑ ¸í·É¹®À¸·Î ¸®ÅÏÇϱâ Àü¿¡ À̸¦ INTEGER·Î À¯Çüº¯È¯ÇÏ·Á ÇÕ´Ï´Ù. SQL ÂüÁ¶¼¿¡¼ ¼³¸íÇÑ ¹Ù¿Í °°ÀÌ, INTEGER ³»Àå ÇÔ¼ö´Â »ç¿ëÀÚ ´ë½Å ÀÌ À¯Çüº¯È¯À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ, ÇÔ¼ö¿¡ ´ëÇØ »ç¿ëÀÚÀÇ ±¸Ã¼ÀûÀÎ À̸§À» Á¦°øÇÏ°í ³ªÁß¿¡ À̸¦ DDL¿¡¼ ÂüÁ¶ÇÏ·Á ÇÕ´Ï´Ù(¿¹: UDT¿¡¼ÀÇ ¹®ÀÚ¿ °Ë»ö ÂüÁ¶). UDF°¡ ³Î(NULL) °ªÀ» ó¸®Çϱâ À§ÇØ ÀÛ¼ºµÇÁö ¾Ê¾ÒÀ¸¹Ç·Î NOT NULL CALL ±âº»°ªÀ» »ç¿ëÇÕ´Ï´Ù. ½ºÅ©·¡Ä¡ ÆÐµå°¡ ¾øÀ¸¹Ç·Î NO SCRATCHPAD ¹× NO FINAL CALL ±âº»°ªÀ» »ç¿ëÇÕ´Ï´Ù. FINDSTRINGÀÌ º´·Ä ó¸®µÉ ¼ö ¾ø´Â ÀÌÀ¯°¡ ¾øÀ¸¹Ç·Î ALLOW PARALLELISM ±âº»°ªÀÌ »ç¿ëµË´Ï´Ù.
ÀÌ ÇÔ¼ö°¡ CLOB¿¡¼ »Ó¸¸ ¾Æ´Ï¶ó BLOB¿¡¼ ÀÛµ¿µÇ±â¸¦ ¿øÇϹǷÎ, ù¹øÂ° ¸Å°³º¯¼ö·Î¼ BLOB¸¦ °¡Á®°¡´Â ¶Ç´Ù¸¥ FINDSTRINGÀ» Á¤ÀÇÇÕ´Ï´Ù.
CREATE FUNCTION FINDSTRING (BLOB(500K), VARCHAR(200)) RETURNS INTEGER CAST FROM FLOAT SPECIFIC "willie_fblob_feb95" EXTERNAL NAME '/u/willie/testfunc/testmod!findstr' LANGUAGE C PARAMETER STYLE DB2SQL NO SQL DETERMINISTIC NO EXTERNAL ACTION FENCED
ÀÌ ¿¹´Â UDF À̸§ÀÇ ¿À¹ö·Îµå¸¦ º¸¿©ÁÖ°í ´ÙÁß UDF ¹× ¸Þ¼Òµå°¡ °°Àº ³»¿ëÀ» °øÀ¯ÇÒ ¼ö ÀÖÀ½À» º¸¿©ÁÝ´Ï´Ù. BLOB°¡ CLOB¿¡ ÁöÁ¤µÉ ¼ö ¾ø¾îµµ µ¿ÀÏÇÑ ¼Ò½º Äڵ带 »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. DB2¿Í UDF »çÀÌÀÇ BLOB ¹× CLOB¿¡ ´ëÇÑ ÇÁ·Î±×·¡¹Ö ÀÎÅÍÆäÀ̽º°¡ ±æÀ̰¡ °°°í µÚÀÌ¾î µ¥ÀÌÅͰ¡ ¿À¹Ç·Î À§ ¿¹¿¡¼ ÇÁ·Î±×·¡¹Ö ¹®Á¦°¡ ¾ø½À´Ï´Ù. DB2´Â ƯÁ¤ ÇÔ¼ö ³»¿ëÀ» »ç¿ëÇÏ´Â UDF°¡ ¾î¶² ¹æ½ÄÀ¸·Îµç °°Àº ³»¿ëÀ» »ç¿ëÇÏ´Â ´Ù¸¥ UDF¿Í ÀÏÄ¡ÇÏ´ÂÁö¸¦ Á¡°ËÇÏÁö ¾Ê½À´Ï´Ù.
ÀÌ ¿¹´Â ¾Õ ¿¹ÀÇ ¿¬¼ÓÀÔ´Ï´Ù. ¿¹: BLOB ¹®ÀÚ¿ °Ë»ö¿¡¼ FINDSTRING ÇÔ¼ö¿¡ ¸¸Á·ÇÏÁö¸¸ ÀÌÁ¦ ¼Ò½º À¯ÇüÀÌ BLOBÀÎ BOAT ±¸º° À¯ÇüÀ» Á¤ÀÇÇß½À´Ï´Ù. ¶ÇÇÑ »ç¿ëÀÚ´Â FINDSTRINGÀÌ BOAT µ¥ÀÌÅÍ À¯ÇüÀÌ ÀÖ´Â °ª¿¡ ´ëÇÑ ¿¬»êÀ» Çϱ⸦ ¿øÇϹǷÎ, ´Ù¸¥ FINDSTRING ÇÔ¼ö¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö´Â ¿¹: BLOB ¹®ÀÚ¿ °Ë»ö¿¡ ÀÖ´Â BLOB °ª¿¡ ´ëÇÑ ¿¬»êÀ» ¼öÇàÇÏ´Â FINDSTRINGÀÌ ¼Ò½º°¡ µË´Ï´Ù. ÀÌ ¿¹¿¡¼ FINDSTRINGÀÇ ¿À¹ö·Îµå¿¡ À¯ÀÇÇϽʽÿÀ.
CREATE FUNCTION FINDSTRING (BOAT, VARCHAR(200)) RETURNS INT SPECIFIC "slick_fboat_mar95" SOURCE SPECIFIC "willie_fblob_feb95"
ÀÌ FINDSTRING ÇÔ¼ö¿¡ ¿¹: BLOB ¹®ÀÚ¿ °Ë»ö¿¡ ÀÖ´Â FINDSTRING ÇÔ¼ö·ÎºÎÅÍ ´Ù¸¥ ½ÅÈ£°¡ ÀÖÀ¸¹Ç·Î À̸§À» ¿À¹ö·ÎµåÇÏ´Â µ¥ ¹®Á¦°¡ ¾ø½À´Ï´Ù. ³ªÁß¿¡ DDL¿¡¼ÀÇ ÂüÁ¶¸¦ À§ÇØ °íÀ¯ÀÇ ±¸Ã¼ÀûÀÎ À̸§À» Á¦°øÇÏ·Á ÇÕ´Ï´Ù. SOURCEÀýÀ» »ç¿ëÇϰí ÀÖÀ¸¹Ç·Î, ÇÔ¼ö ¼Ó¼ºÀ» ÁöÁ¤ÇÏ´Â °ü·Ã Ű¿öµå ¶Ç´Â EXTERNAL NAMEÀýÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ ¼Ó¼ºÀº ¼Ò½º ÇÔ¼ö·ÎºÎÅÍ °¡Á®¿É´Ï´Ù. ¸¶Áö¸·À¸·Î, ¼Ò½º ÇÔ¼ö¸¦ ½Äº°ÇÒ ¶§ ¿¹: BLOB ¹®ÀÚ¿ °Ë»ö¿¡ ¸í½ÃÀûÀ¸·Î Á¦°øµÈ ¼¼ºÎ ÇÔ¼ö À̸§À» »ç¿ëÇϰí ÀÖ´ÂÁö º¸½Ê½Ã¿À. À̰ÍÀÌ ±ÔÁ¤ÈµÇÁö ¾ÊÀº ÂüÁ¶À̹ǷÎ, ÀÌ ¼Ò½º ÇÔ¼ö°¡ »óÁÖÇÏ´Â ½ºÅ°¸¶´Â ÇÔ¼ö °æ·Î¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é ÂüÁ¶°¡ ºÐ¼®µÇÁö ¾Ê½À´Ï´Ù.
BOAT¸¦ °¡Á®°¡ ¼³°è ¼Ó¼ºÀ» °ËÅäÇÏ°í ±× º¸Æ® ºñ¿ëÀ» ij³ª´ÙÈ·Î »ý¼ºÇϱâ À§ÇØ ´Ù¸¥ UDF¸¦ ÀÛ¼ºÇß½À´Ï´Ù. ³»ºÎÀûÀ¸·Î ³ëµ¿ ºñ¿ëÀÌ À¯·Îȳª ÀϺ» ¿£ ¶Ç´Â ¹ÌÈ ´Þ·¯·Î °¡°ÝÀÌ Ã¥Á¤µÉ ¼ö À־ ÀÌ ÇÔ¼ö´Â ÇÊ¿äÇÑ ÅëÈ, Áï ij³ª´Ù ´Þ·¯·Î º¸Æ®¸¦ ¸¸µå´Â ºñ¿ëÀ» »ý¼ºÇØ¾ß ÇÕ´Ï´Ù. À̴ ȯÀ² À¥ ÆäÀÌÁö·ÎºÎÅÍ ÇöÀç ȯÀ² Á¤º¸¸¦ ¾ò¾î¾ß Çϰí, ´ë´äÀº À¥ ÆäÀÌÁö ³»¿ë¿¡ µû¶ó ´Þ¶óÁüÀ» ÀǹÌÇÕ´Ï´Ù. ÀÌ´Â ÇÔ¼ö¸¦ NOT DETERMINISTIC(¶Ç´Â VARIANT)·Î ¸¸µì´Ï´Ù.
CREATE FUNCTION BOAT_COST (BOAT) RETURNS INTEGER EXTERNAL NAME '/u/marine/funcdir/costs!boatcost' LANGUAGE C PARAMETER STYLE DB2SQL NO SQL NOT DETERMINISTIC NO EXTERNAL ACTION FENCED
CAST FROM ¹× SPECIFICÀÌ ÁöÁ¤µÇÁö ¾ÊÁö¸¸ NOT DETERMINISTIC°¡ ÁöÁ¤µÇ¾î¾ß ÇÕ´Ï´Ù. º¸¾È»óÀÇ ¿©±â¿¡ ´Ù½Ã FENCED°¡ ¼±Åõ˴ϴÙ.
ÀÌ ¿¹´Â CANADIAN_DOLLAR ±¸º° À¯Çü¿¡ ´ëÇØ AVG Ä÷³ ÇÔ¼ö¸¦ ±¸ÇöÇÕ´Ï´Ù. CANADIAN_DOLLAR Á¤ÀÇ¿¡ ´ëÇØ¼´Â ¿¹: ºñ¿ëÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. ¸í¹éÇÑ À¯Çü ÁöÁ¤Àº ±¸º° À¯Çü¿¡ ´ëÇÑ ³»Àå AVG ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¸øÇϵµ·Ï ÇÕ´Ï´Ù. ±× °á°ú CANADIAN_DOLLAR¿¡ ´ëÇÑ ¼Ò½º À¯ÇüÀÌ DECIMALÀ̾úÀ½ÀÌ ³ªÅ¸³ª°í, µû¶ó¼ AVG(DECIMAL) ³»Àå ÇÔ¼ö¸¦ ¼Ò½º·Î ÇÏ¿© AVG¸¦ ±¸ÇöÇÕ´Ï´Ù. ÀÌ ±¸Çö ±â´ÉÀº DECIMAL¿¡¼ CANADIAN_DOLLAR·Î, CANADIAN_DOLLAR¿¡¼ DECIMAL·Î À¯Çüº¯È¯ÇÒ ¼ö ÀÖ´ÂÁö¿¡ µû¶ó ´Þ¶óÁöÁö¸¸, DECIMALÀÌ CANADIAN_DOLLARÀÇ ¼Ò½º À¯ÇüÀ̹ǷΠÀÌ·¯ÇÑ À¯Çüº¯È¯ÀÌ ±â´ÉÇÒ °ÍÀÓÀ» ¾Ð´Ï´Ù.
CREATE FUNCTION AVG (CANADIAN_DOLLAR) RETURNS CANADIAN_DOLLAR SOURCE "SYSIBM".AVG(DECIMAL(9,2))
SOURCEÀý¿¡¼ ÇÔ¼ö À̸§À» ±ÔÁ¤ÈÇß°í, ÇÔ¼ö °æ·Î¿¡ ÀáÀçµÈ ±âŸ AVG ÇÔ¼ö°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù.
»ç¿ëÀÚÀÇ °£´ÜÇÑ Ä«¿îÆÃ ÇÔ¼ö´Â óÀ½¿¡ 1À» ¸®ÅÏÇϰí, È£ÃâµÉ ¶§¸¶´Ù °á°ú°¡ 1¾¿ Áõ°¡µË´Ï´Ù. ÀÌ ÇÔ¼ö´Â SQL Àμö¸¦ ÃëÇÏÁö ¾Ê°í, ±× ÀÀ´äÀÌ È£Ã⸶´Ù ´Ù¸£¹Ç·Î Á¤ÀÇ¿¡ ÀÇÇØ NOT DETERMINISTIC ÇÔ¼ö°¡ µË´Ï´Ù. ½ºÅ©·¡Ä¡ ÆÐµå¸¦ »ç¿ëÇÏ¿© ¸®ÅϵǴ ÃÖÁ¾ °ªÀ» ÀúÀåÇϰí, È£ÃâµÉ ¶§¸¶´Ù ÀÌ °ªÀ» Áõ°¡½ÃÄÑ ¸®ÅÏÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö¸¦ ¾ö°ÝÇÏ°Ô Å×½ºÆ®Çß°í µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ DBADM ±ÇÇÑÀ» ¼ÒÀ¯Çϰí ÀÖÀ¸¹Ç·Î À̸¦ NOT FENCED·Î¼ Á¤ÀÇÇÕ´Ï´Ù. (DBADMÀº CREATE_NOT_FENCED¸¦ ³»Æ÷ÇÕ´Ï´Ù.)
CREATE FUNCTION COUNTER () RETURNS INT EXTERNAL NAME '/u/roberto/myfuncs/util!ctr' LANGUAGE C PARAMETER STYLE DB2SQL NO SQL NOT DETERMINISTIC NOT FENCED SCRATCHPAD DISALLOW PARALLEL
¸Å°³º¯¼ö Á¤Àǰ¡ Á¦°øµÇÁö ¾Ê°í ºó °ýÈ£¸¸ Á¦°øµË´Ï´Ù. À§ ÇÔ¼ö´Â SCRATCHPAD¸¦ ÁöÁ¤Çϰí, ±âº» ½ºÆåÀÎ NO FINAL CALLÀ» »ç¿ëÇÕ´Ï´Ù. ÀÌ °æ¿ì, (100 ¹ÙÀÌÆ®) ½ºÅ©·¡Ä¡ ÆÐµå ±âº» Å©±â°¡ ÃæºÐÇϹǷΠÃÖÁ¾ È£ÃâÀ» ÀÌ¿ëÇÏ¿© ÀúÀ念¿ªÀ» ºñ¿ï Çʿ䰡 ¾øÀ¸¸ç µû¶ó¼ NO FINAL CALLÀÌ ÁöÁ¤µË´Ï´Ù. COUNTER ÇÔ¼ö°¡ Á¦´ë·Î ÀÛµ¿µÇ±â À§Çؼ´Â ´ÜÀÏ ½ºÅ©·¡Ä¡ ÆÐµå¸¦ »ç¿ëÇØ¾ß ÇϹǷÎ, DISALLOW PARALLELÀÌ Ãß°¡µÇ¾î DB2°¡ º´·Ä ÀÛµ¿µÇÁö ¸øÇϵµ·Ï ÇÕ´Ï´Ù. ÀÌ COUNTER ÇÔ¼öÀÇ ±¸ÇöÀº ¿¹: °è¼ö±â(Counter)ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
ÀÌ ¿¹´Â ÀνºÅϽº º¯¼ö, nbrOfInvoke¸¦ °¡Áø OLE(Object Linking and Embedding) ÀÚµ¿È ¿ÀºêÁ§Æ®ÀÎ counter·Î¼ ÀÌÀüÀÇ Ä«¿îÆÃ ¿¹¸¦ ±¸ÇöÇÏ¿© È£Ãâ Ƚ¼ö¸¦ ÃßÀûÇÕ´Ï´Ù. UDF°¡ È£ÃâµÉ ¶§¸¶´Ù ¿ÀºêÁ§Æ®ÀÇ increment ¸Þ¼Òµå´Â nbrOfInvoke ÀνºÅϽº º¯¼ö¸¦ Áõ°¡½Ã۰í ÇöÀç »óŸ¦ ¸®ÅÏÇÕ´Ï´Ù. OLE ÇÁ·Î±×·¥ ½Äº°ÀÚ(progID) bert.bcounter·Î ÀÚµ¿È ¿ÀºêÁ§Æ®°¡ Windows ·¹Áö½ºÆ®¸®¿¡¼ µî·ÏµÈ »óÅÂÀÔ´Ï´Ù.
CREATE FUNCTION bcounter () RETURNS integer EXTERNAL NAME 'bert.bcounter!increment' LANGUAGE OLE PARAMETER STYLE DB2SQL SCRATCHPAD NOT DETERMINISTIC FENCED NULL CALL NO SQL NO EXTERNAL ACTION DISALLOW PARALLEL;
counter Ŭ·¡½ºÀÇ ±¸ÇöÀº ¿¹: BASICÀ¸·Î ÀÛ¼ºÇÑ °è¼ö±â(Counter) OLE ÀÚµ¿ UDF ¹× ¿¹: C++·Î ÀÛ¼ºÇÑ °è¼ö±â(Counter) OLE ÀÚµ¿ UDF¿¡ ³ª¿Í ÀÖ½À´Ï´Ù. DB2¿¡¼ÀÇ OLE Áö¿ø¿¡ ´ëÇÑ ¼¼ºÎ»çÇ×Àº OLE ÀÚµ¿ UDF ÀÛ¼ºÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
Á¦°øµÈ ÁÖÁ¦ ¿µ¿ª(ù¹øÂ° ¸Å°³º¯¼ö)°ú ÀÏÄ¡Çϸç Á¦°øµÈ ¹®ÀÚ¿(µÎ ¹øÂ° ¸Å°³º¯¼ö)ÀÌ Æ÷ÇÔµÈ ÅØ½ºÆ® °ü¸® ½Ã½ºÅÛ¿¡ ÀÖ´Â ¾Ë·ÁÁø °¢ ¹®¼¿¡ ´ëÇØ ´ÜÀÏ ¹®¼ ½Äº°ÀÚ Ä÷³À¸·Î ±¸¼ºµÈ ÇàÀ» ¸®ÅÏÇÏ´Â Å×À̺í ÇÔ¼ö¸¦ ÀÛ¼ºÇß½À´Ï´Ù. ÀÌ UDF´Â ÅØ½ºÆ® °ü¸® ½Ã½ºÅÛ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¹®¼¸¦ ½Å¼ÓÇÏ°Ô ½Äº°ÇÕ´Ï´Ù.
CREATE FUNCTION DOCMATCH (VARCHAR(30), VARCHAR(255)) RETURNS TABLE (DOC_ID CHAR(16)) EXTERNAL NAME '/common/docfuncs/rajiv/udfmatch' LANGUAGE C PARAMETER STYLE DB2SQL NO SQL DETERMINISTIC NO EXTERNAL ACTION NOT FENCED SCRATCHPAD NO FINAL CALL DISALLOW PARALLEL CARDINALITY 20
´ÜÀÏ ¼¼¼ÇÀÇ ¹®¸Æ ³»¿¡¼ Ç×»ó °°Àº Å×À̺íÀ» ¸®ÅÏÇϹǷÎ, DETERMINISTIC·Î¼ Á¤Àǵ˴ϴÙ. DOC_ID Ä÷³ À̸§À» Æ÷ÇÔÇÏ¿©, DOCMATCH·ÎºÎÅÍ Ãâ·ÂÀ» Á¤ÀÇÇÏ´Â RETURNSÀýÀ» º¸½Ê½Ã¿À. FINAL CALLÀº °¢ Å×À̺í ÇÔ¼ö¿¡ ´ëÇØ ÁöÁ¤ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. ¶ÇÇÑ, Å×À̺í ÇÔ¼ö·Î¼ Ãß°¡µÇ´Â DISALLOW PARALLEL Ű¿öµå´Â º´·Ä·Î 󸮵ÇÁö ¾Ê½À´Ï´Ù. DOCMATCH·ÎºÎÅÍÀÇ Ãâ·Â Å©±â°¡ ¸Å¿ì °¡º¯ÀûÀ̾ CARDINALITY 20ÀÌ ´ëÇ¥°ªÀ̰í, DB2 ÃÖÀûÈ ¾Ë°í¸®ÁòÀÌ °áÁ¤À» Àß ÇÒ ¼ö ÀÖµµ·Ï ÁöÁ¤µË´Ï´Ù.
ÀϹÝÀûÀ¸·Î ÀÌ Å×À̺í ÇÔ¼ö´Â ´ÙÀ½°ú °°Àº ¹®¼ ÅØ½ºÆ®°¡ Æ÷ÇÔµÈ Å×À̺í°úÀÇ Á¶Àο¡ »ç¿ëµË´Ï´Ù.
SELECT T.AUTHOR, T.DOCTEXT FROM DOCS as T, TABLE(DOCMATCH('MATHEMATICS', 'ZORN''S LEMMA')) as F WHERE T.DOCID = F.DOC_ID
FROMÀý¿¡ Å×À̺í ÇÔ¼ö¸¦ ÁöÁ¤Çϱâ À§ÇÑ Æ¯¼ö ±¸¹®(TABLE Ű¿öµå)¿¡ À¯ÀÇÇϽʽÿÀ. ÀÌ È£Ãâ¿¡¼ docmatch() Å×À̺í ÇÔ¼ö´Â Zorn's Lemma¸¦ ÂüÁ¶ÇÏ´Â °¢ mathematics ¹®¼¿¡ ´ëÇØ ´ÜÀÏ Ä÷³ DOC_ID°¡ Æ÷ÇÔµÈ ÇàÀ» ¸®ÅÏÇÕ´Ï´Ù. ÀÌ DOC_ID °ªµéÀº ÀúÀÚÀÇ À̸§ ¹× ¹®¼ ÅØ½ºÆ®¸¦ °Ë»öÇÏ¿© ¸¶½ºÅÍ ¹®¼ Å×ÀÌºí¿¡ Á¶Àε˴ϴÙ.