ÀÀ¿ëÇÁ·Î±×·¥ °³¹ß ¾È³»¼­


UDF ¹× ¸Þ¼Òµå µî·ÏÀÇ ¿¹

´ÙÀ½ ¿¹´Â 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 ±âº»°ªÀÌ »ç¿ëµË´Ï´Ù.

¿¹: BLOB ¹®ÀÚ¿­ °Ë»ö

ÀÌ ÇÔ¼ö°¡ 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¿Í ÀÏÄ¡ÇÏ´ÂÁö¸¦ Á¡°ËÇÏÁö ¾Ê½À´Ï´Ù.

¿¹: UDT¿¡¼­ÀÇ ¹®ÀÚ¿­ °Ë»ö

ÀÌ ¿¹´Â ¾Õ ¿¹ÀÇ ¿¬¼ÓÀÔ´Ï´Ù. ¿¹: 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 ¹®ÀÚ¿­ °Ë»ö¿¡ ¸í½ÃÀûÀ¸·Î Á¦°øµÈ ¼¼ºÎ ÇÔ¼ö À̸§À» »ç¿ëÇϰí ÀÖ´ÂÁö º¸½Ê½Ã¿À. À̰ÍÀÌ ±ÔÁ¤È­µÇÁö ¾ÊÀº ÂüÁ¶À̹ǷÎ, ÀÌ ¼Ò½º ÇÔ¼ö°¡ »óÁÖÇÏ´Â ½ºÅ°¸¶´Â ÇÔ¼ö °æ·Î¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é ÂüÁ¶°¡ ºÐ¼®µÇÁö ¾Ê½À´Ï´Ù.

¿¹: UDT ¸Å°³º¯¼ö°¡ ÀÖ´Â ¿ÜºÎ ÇÔ¼ö

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°¡ ¼±Åõ˴ϴÙ.

¿¹: UDTÀÇ AVG

ÀÌ ¿¹´Â 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)ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

¿¹: OLE ÀÚµ¿È­ ¿ÀºêÁ§Æ®¿¡¼­ÀÇ Ä«¿îÆÃ

ÀÌ ¿¹´Â ÀνºÅϽº º¯¼ö, 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 ÀÛ¼ºÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

¿¹: ¹®¼­ ID¸¦ ¸®ÅÏÇÏ´Â Å×À̺í ÇÔ¼ö

Á¦°øµÈ ÁÖÁ¦ ¿µ¿ª(ù¹øÂ° ¸Å°³º¯¼ö)°ú ÀÏÄ¡Çϸç Á¦°øµÈ ¹®ÀÚ¿­(µÎ ¹øÂ° ¸Å°³º¯¼ö)ÀÌ Æ÷ÇÔµÈ ÅØ½ºÆ® °ü¸® ½Ã½ºÅÛ¿¡ ÀÖ´Â ¾Ë·ÁÁø °¢ ¹®¼­¿¡ ´ëÇØ ´ÜÀÏ ¹®¼­ ½Äº°ÀÚ Ä÷³À¸·Î ±¸¼ºµÈ ÇàÀ» ¸®ÅÏÇÏ´Â Å×À̺í ÇÔ¼ö¸¦ ÀÛ¼ºÇß½À´Ï´Ù. ÀÌ 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 °ªµéÀº ÀúÀÚÀÇ À̸§ ¹× ¹®¼­ ÅØ½ºÆ®¸¦ °Ë»öÇÏ¿© ¸¶½ºÅÍ ¹®¼­ Å×ÀÌºí¿¡ Á¶Àε˴ϴÙ.


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