DB2 ÀÀ¿ëÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â µ¥ ÀÖ¾î¼ »ç¿ëÀÚ´Â ¿øÇÏ´Â Á¶Ä¡ ¶Ç´Â ÀÛ¾÷À» ±¸ÇöÇÒ ¶§ ¼±ÅÃÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ ¼ºê·çƾÀ¸·Î¼ »õ·Î¿î Á¶ÀÛÀ» ±¸ÇöÇÏ´Â °ÍÀÌ´õ ½¬¿ö º¸¿©µµ UDF »ç¿ëÀ» °í·ÁÇØ¾ß ÇÒ ÃæºÐÇÑ ÀÌÀ¯°¡ ÀÖ½À´Ï´Ù.
»õ·Î¿î ÀÛ¾÷ÀÌ »ç¿ëÀÚ »çÀÌÆ®¿¡¼ ´Ù¸¥ »ç¿ëÀÚ ¶Ç´Â ÇÁ·Î±×·¥ÀÌ ÀåÁ¡À» ÃëÇÒ ¼ö ÀÖ´Â °ÍÀ̸é UDF ¹× ¸Þ¼Òµå°¡ À̸¦ Àç»ç¿ëÇϵµ·Ï µµ¿ï ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ, Ç¥Çö½ÄÀ» µ¥ÀÌÅͺ£À̽º »ç¿ëÀÚ°¡ »ç¿ëÇÒ ¼ö ÀÖ´Â SQL¿¡¼ ÀÛ¾÷À» Á÷Á¢È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. UDF¿¡ ´ëÇØ µ¥ÀÌÅͺ£À̽º´Â ÇÔ¼ö ÀμöÀÇ ¿©·¯ µ¥ÀÌÅÍ À¯ÇüÀ» ÀÚµ¿À¸·Î ½Â°Ý(¿¹:DECIMAL¿¡¼ DOUBLE·Î)½Ãŵ´Ï´Ù. À̸¦ ÅëÇØ ¼·Î ´Ù¸¥Áö¸¸ È£È °¡´ÉÇÑ µ¥ÀÌÅÍ À¯Çü¿¡ Á¶ÀÛÀ» Àû¿ë½Ãų ¼ö ÀÖ½À´Ï´Ù.
»õ Á¶ÀÛÀ» ½±°Ô ¼ºê·çƾÀ¸·Î ±¸ÇöÇÏ°í ´Ù¸¥ »ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ ÇÁ·Î±×·¥¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ°Ô ¸¸µé¾î DB2¿¡¼ ÇÔ¼ö¸¦ Á¤ÀÇÇÏÁö ¾Ê¾Æµµ µÇ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ ¸ðµç ÀÀ¿ëÇÁ·Î±×·¥ °³¹ßÀÚ¿¡°Ô ¾Ë·Á¾ß ÇϰíÈ¿À²ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¼ºê·çƾÀ» ÆÐŰÁö·Î ¸¸µé¾î¾ß ÇÕ´Ï´Ù. ±×·¯³ª, ÀϹÝÀûÀ¸·Î ¸í·ÉÇà 󸮱â(CLP)¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅͺ£À̽º¿¡ ¾×¼¼½ºÇÏ´Â »ç¶÷µé°ú ¸¶Âù°¡Áö·Î ´ëÈ½Ä »ç¿ëÀÚ¸¦ ¹«½ÃÇÕ´Ï´Ù. CLP »ç¿ëÀÚ´Â µ¥ÀÌÅͺ£À̽º¿¡ ÀÖ´Â UDF ¶Ç´Â ¸Þ¼Òµå°¡ ¾Æ´Ñ ÇÑ »ç¿ëÀÚ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ´Â ¶ÇÇÑ ÀçÄÄÆÄÀ쵃 ¼ö ¾ø´Â SQL(¿¹:Lotus Approach)À» »ç¿ëÇÏ´Â ±âŸ µµ±¸¿¡µµ Àû¿ëµË´Ï´Ù.
ÀÀ¿ëÇÁ·Î±×·¥ ´ë½Å Á÷Á¢ µ¥ÀÌÅͺ£À̽º ¿£Áø¿¡¼ UDF³ª ¸Þ¼Òµå¸¦ È£ÃâÇÏ¸é Æ¯È÷ µ¥ÀÌÅ͸¦ ´õ ½Éµµ ÀÖ°Ô Ã³¸®ÇÒ ¼ö ÀÖµµ·Ï ±ÔÁ¤ÇÏ´Â °æ¿ì »ó´çÇÑ ¼º´É Çâ»óÀ» ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. SELECTION_CRITERIA() ÇÔ¼ö·Î¼ Ç¥ÇöÇÒ ¼ö ÀÖ´Â ÀϺΠ¼±Åà ±âÁØÀ» ÃæÁ·½Ãų ¼ö ÀÖ´Ù¸é, ÀϺΠµ¥ÀÌÅ͸¦ ó¸®ÇϰíÀÚ ÇÏ´Â °£´ÜÇÑ ½Ã³ª¸®¿À¸¦ °í·ÁÇϽʽÿÀ. »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº select¹®À» ¹ßÇàÇßÀ» ¼ö ÀÖ½À´Ï´Ù.
SELECT A,B,C FROM T
°¢ ÇàÀ» ¹ÞÀ» ¶§ µ¥ÀÌÅ͸¦ ½ÉÈ Ã³¸®ÇÏ´Â µ¥ °ü½ÉÀÌ ÀÖ´ÂÁö °áÁ¤Çϱâ À§ÇØ µ¥ÀÌÅÍ¿¡ ´ëÇØ SELECTION_CRITERIA¸¦ ¼öÇàÇÕ´Ï´Ù. ¿©±â¼ °¢ ÇàÀÇ Å×À̺í T´Â ´Ù½Ã ÀÀ¿ëÇÁ·Î±×·¥À¸·Î Àü´ÞµÇ¾î¾ß ÇÕ´Ï´Ù. ±×·¯³ª SELECTION_CRITERIA()°¡ UDF·Î¼ ±¸ÇöµÇ¸é »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥Àº ´ÙÀ½ ¸í·É¹®À» ¹ßÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
SELECT A,B,C FROM T WHERE SELECTION_CRITERIA(A,B) = 1
ÀÌ·± °æ¿ì, ÀÀ¿ëÇÁ·Î±×·¥°ú µ¥ÀÌÅͺ£À̽º »çÀÌÀÇ ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ °ü½É ÀÖ´Â Çàµé¸¸ Àü´ÞµË´Ï´Ù. ´ëÇü Å×À̺íÀÇ °æ¿ì, ¶Ç´Â SELECTION_CRITERIA°¡ ÁÖ¿ä ÇÊÅ͸µÀ» Á¦°øÇÏ´Â °æ¿ì ¼º´É Çâ»óÀÌ ¸Å¿ì Áß¿äÇÒ °ÍÀÔ´Ï´Ù.
UDF°¡ ¼º´É Çâ»óÀ» Á¦°øÇÒ ¼ö ÀÖ´Â ¶Ç´Ù¸¥ °æ¿ì´Â ´ëÇü ¿ÀºêÁ§Æ®(LOB)¸¦ ´Ù·ê ¶§ÀÔ´Ï´Ù. LOB À¯ÇüÀÇ °ª¿¡¼ ¾î¶² Á¤º¸¸¦ ÃßÃâÇÏ´Â °ÍÀÌ ¸ñÀûÀÎ ÇÔ¼öÀÎ °æ¿ì, µ¥ÀÌÅͺ£À̽º ¼¹ö¿¡¼ Á÷Á¢ ÀÌ Á¤º¸¸¦ ÃßÃâÇÏ¿© ÃßÃâµÈ °ª¸¸ ´Ù½Ã ÀÀ¿ëÇÁ·Î±×·¥À¸·Î Àü´ÞÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ´Â Àüü LOB °ªÀ» ´Ù½Ã ÀÀ¿ëÇÁ·Î±×·¥À¸·Î Àü´ÞÇÑ ÈÄ ÃßÃâÀ» ¼öÇàÇÏ´Â °Íº¸´Ù ÈξÀ È¿À²ÀûÀÔ´Ï´Ù. UDF·Î¼ ÀÌ ÇÔ¼ö¸¦ ÆÐŰÁöÈÇÏ´Â ¼º´É °ªÀº »óȲ¿¡ µû¶ó ¸Å¿ì Ŭ ¼ö ÀÖ½À´Ï´Ù.(LOB À§Ä¡ ÁöÁ¤ÀÚ¸¦ »ç¿ëÇÏ¿© LOBÀÇ ÀϺεµ ÃßÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. À¯»çÇÑ ½Ã³ª¸®¿ÀÀÇ ¿¹´Â ¿¹: LOB Ç¥Çö½Ä Æò°¡ ¿¬±âÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.)
ÀÌ ¿Ü¿¡µµ, CREATE FUNCTION¹®ÀÇ RETURNS TABLEÀýÀ» »ç¿ëÇÏ¿© Å×À̺í ÇÔ¼ö¶ó°í ÇÏ´Â UDF¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. Å×À̺í ÇÔ¼ö·Î (ºñ°ü°èÇü µ¥ÀÌÅÍ ÀúÀåÀ» Æ÷ÇÔÇÏ¿©) DB2 µ¥ÀÌÅͺ£À̽º ¿ÜºÎ¿¡ »óÁÖÇÏ´Â µ¥ÀÌÅÍ¿¡ ´ëÇØ SQLÀÇ °ü°èÇü ÀÛ¾÷°ú ¼º´ÉÀ» ¸Å¿ì È¿À²ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Å×À̺í ÇÔ¼ö´Â Àμö·Î¼ °³º°ÀûÀÎ ½ºÄ®¶ó °ªÀÇ ´Ù¸¥ À¯Çü ¹× Àǹ̸¦ ÃëÇØ, À̸¦ È£ÃâÇÏ´Â SQL¹®À¸·Î Å×À̺íÀ» ¸®ÅÏÇÕ´Ï´Ù. ¿øÇÏÁö ¾Ê´Â Çà ¶Ç´Â Ä÷³Àº Á¦°Å½ÃŰ°í °ü½ÉÀÖ´Â µ¥ÀÌÅ͸¸ »ý¼ºÇÏ´Â Å×À̺í ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. »ç¿ëÇÒ ¼ö ÀÖ´Â °æ¿ì¿¡ ´ëÇÑ ±ÔÄ¢À» Æ÷ÇÔÇÏ¿© Å×À̺í ÇÔ¼ö¿¡ ´ëÇÑ ¼¼ºÎ»çÇ×Àº SQL ÂüÁ¶¼ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
Å×À̺íÀ» ¸®ÅÏÇÏ´Â ¸Þ¼Òµå¸¦ ÀÛ¼ºÇÒ ¼ö ¾ø½À´Ï´Ù.
UDF¸¦ »ç¿ëÇÏ¿© ±¸º° À¯ÇüÀ̶ó°íµµ ÇÏ´Â »ç¿ëÀÚ Á¤ÀÇ ±¸º° À¯Çü(UDT)ÀÇ Á¶ÀÛÀ» ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. UDT¿¡ ´ëÇÑ ¼¼ºÎ»çÇ×Àº »ç¿ëÀÚ Á¤ÀÇ ±¸º° À¯ÇüÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. UDT¿¡ ´ëÇÑ ¼¼ºÎ»çÇ× ¹× ±× ¾È¿¡¼ ³íÀÇµÈ À¯Çüº¯È¯ ±â´É¿¡ ´ëÇÑ ÁÖ¿ä °³³äÀº SQL ÂüÁ¶¼ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. ±¸º° À¯ÇüÀ» ÀÛ¼ºÇÒ ¶§ ±¸º° À¯Çü°ú ¼Ò½º À¯Çü »çÀÌ¿¡ À¯Çüº¯È¯(cast) ÇÔ¼ö°¡ ÀÚµ¿À¸·Î Á¦°øµÇ¸ç, ¼Ò½º À¯Çü¿¡ µû¶ó =, >, < µîÀÇ ºñ±³ ¿¬»êÀÚ°¡ Á¦°øµË´Ï´Ù. »ç¿ëÀÚ ½º½º·Î Ãß°¡ Á¶ÀÛÀ» Á¦°øÇØ¾ß ÇÕ´Ï´Ù. ±¸º° À¯ÇüÀÇ ¸ðµç »ç¿ëÀÚ°¡ ½±°Ô ¾×¼¼½ºÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅͺ£À̽º¿¡ ±¸º° À¯ÇüÀÇ Á¶ÀÛÀ» º¸À¯ÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇϹǷÎ, UDF¸¦ ±¸Çö ¸ÞÄ«´ÏÁòÀ¸·Î¼ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿¹¸¦ µé¾î, 1MB BLOB¸¦ ÅëÇØ Á¤ÀÇµÈ BOAT ±¸º° À¯ÇüÀÌ ÀÖ´Ù°í °¡Á¤ÇϽʽÿÀ. BLOB¿¡´Â ´Ù¾çÇÑ Ç×ÇØ ½ºÆå ¹× µå·ÎÀ×ÀÌ µé¾î ÀÖ½À´Ï´Ù. º¸Æ® Å©±â¸¦ ºñ±³ÇÏ°í ½ÍÁö¸¸, BLOB ¼Ò½º À¯ÇüÀ» ÅëÇØ Á¤ÀÇµÈ ±¸º° À¯ÇüÀ» °¡Áö°í ÀÚµ¿À¸·Î »ý¼ºµÈ ºñ±³ ÀÛ¾÷À» ¾òÀ» ¼ö ¾ø½À´Ï´Ù. ¼±ÅÃÇÑ ÃøÁ¤ ´ÜÀ§¸¦ ±âÃÊ·Î ÇÏ¿© ÇÑ º¸Æ®°¡ ´Ù¸¥ º¸Æ®º¸´Ù Å«Áö °áÁ¤ÇÏ´Â BOAT_COMPARE ÇÔ¼ö¸¦ ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ġȯ, Àüü ±æÀÌ, Åæ Áß·® ¶Ç´Â BOAT ¿ÀºêÁ§Æ®¿¡ ±âÃÊÇÑ ´Ù¸¥ °è»êÀÌ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½°ú °°Àº BOAT_COMPARE ÇÔ¼ö¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
CREATE FUNCTION BOAT_COMPARE (BOAT, BOAT) RETURNS INTEGER ...
ù¹øÂ° BOAT°¡ ´õ Ŭ °æ¿ì »ç¿ëÀÚ ÇÔ¼ö°¡ 1À» ¸®ÅÏÇϰí, µÎ ¹øÂ°°¡ ´õ Ŭ °æ¿ì 2¸¦, µÎ Å©±â°¡ °°À» °æ¿ì 0À» ¸®ÅÏÇϸé, SQL Äڵ忡¼ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© º¸Æ®¸¦ ºñ±³ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ Å×À̺íÀ» ÀÛ¼ºÇØ º¾´Ï´Ù.
CREATE TABLE BOATS_INVENTORY ( BOAT_ID CHAR(5), BOAT_TYPE VARCHAR(25), DESIGNER VARCHAR(40), OWNER VARCHAR(40), DESIGN_DATE DATE, SPEC BOAT, ... ) CREATE TABLE MY_BOATS ( BOAT_ID CHAR(5), BOAT_TYPE VARCHAR(25), DESIGNER VARCHAR(40), DESIGN_DATE DATE, ACQUIRE_DATE DATE, ACQUIRE_PRICE CANADIAN_DOLLAR, CURR_APPRAISL CANADIAN_DOLLAR, SPEC BOAT, ... )
´ÙÀ½°ú °°Àº SQL SELECT¹®À» ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
SELECT INV.BOAT_ID, INV.BOAT_TYPE, INV.DESIGNER, INV.OWNER, INV.DESIGN_DATE FROM BOATS_INVENTORY INV, MY_BOATS MY WHERE MY.BOAT_ID = '19GCC' AND BOAT_COMPARE(INV.SPEC, MY.SPEC) = 1
ÀÌ °£´ÜÇÑ ¿¹¿¡¼´Â BOATS_INVENTORY·ÎºÎÅÍ MY_BOATSÀÇ Æ¯Á¤ º¸Æ®º¸´Ù Å« ¸ðµç º¸Æ®¸¦ ¸®ÅÏÇÕ´Ï´Ù. µ¥ÀÌÅͺ£À̽º ¼¹ö¿¡¼ ºñ±³°¡ ¹ß»ýÇϹǷÎ, ÀÌ ¿¹´Â °ü½ÉÀÖ´Â Çุ ´Ù½Ã ÀÀ¿ëÇÁ·Î±×·¥À¸·Î Àü´ÞÇÕ´Ï´Ù. »ç½Ç µ¥ÀÌÅÍ À¯Çü BOAT °ªÀ» Àü´ÞÇÒ ¿©Áö°¡ ¿ÏÀüÈ÷ ¾ø¾îÁý´Ï´Ù. ÀÌ´Â BOAT°¡ 1MBÀÇ BLOB µ¥ÀÌÅÍ À¯Çü¿¡ ±âÃÊÇϹǷΠÀúÀ念¿ª ¹× ¼º´ÉÀÌ Çâ»óµË´Ï´Ù.