½ºÄ®¶ó ¹× Ä÷³ UDF ¹× ¸Þ¼Òµå´Â Ç¥Çö½ÄÀÌ À¯È¿ÇÑ SQL¹® ³»¿¡¼ È£ÃâµÉ ¼ö ÀÖ½À´Ï´Ù.(À¯È¿¼ºÀ»Á¦ÇÑÇÏ´Â ¸ðµç Ä÷³ ÇÔ¼ö¿¡ ´ëÇÑ Ãß°¡ ±ÔÄ¢ÀÌ ÀÖ½À´Ï´Ù.) Å×À̺í UDF´Â SELECTÀÇ FROMÀý¿¡¼¸¸ ÂüÁ¶µÉ ¼ö ÀÖ½À´Ï´Ù. SQL ÂüÁ¶¼¿¡¼´Â ÀÌ·¯ÇÑ ¸ðµç ¹®¸Æ¿¡ ´ëÇØ ÀÚ¼¼È÷ ¼³¸íµÇ¾î ÀÖ½À´Ï´Ù. ÀÌ Àý¿¡¼ »ç¿ëµÇ´Â ³íÀÇ ¹× ¿¹´Â »ó´ëÀûÀ¸·Î °£´ÜÇÑ SELECT¹® ¹®¸ÆÀ» Áß½ÉÀ¸·Î ÇÏÁö¸¸, ±× »ç¿ëÀº ÀÌ·¯ÇÑ ¹®¸ÆÀ¸·Î Á¦ÇѵÇÁö ¾Ê½À´Ï´Ù.
ÇÔ¼ö °æ·Î ¹× ÇÔ¼ö ¼±Åà ¾Ë°í¸®ÁòÀÇ »ç¿ë ¹× Á߿伺¿¡ ´ëÇÑ ¿ä¾àÀº UDF ¹× Method °³³äÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. SQL ÂüÁ¶¼¿¡ ÀÌ µÎ °³³ä ¸ðµÎ¿¡ ´ëÇÑ ¼¼ºÎ»çÇ×ÀÌ ÀÖ½À´Ï´Ù. ÇÔ¼ö¿¡ ´ëÇÑ DML(Data Manipulation Language) ÂüÁ¶ÀÇ ÇØ»óµµ´Â ÇÔ¼ö ¼±Åà ¾Ë°í¸®ÁòÀ» »ç¿ëÇϹǷÎ, ÀÛµ¿ ¹æ¹ýÀ» ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù.
UDF ÇÔ¼öÀÎÁö ³»Àå ÇÔ¼öÀÎÁö¿¡ °ü°è¾øÀÌ, ÇÔ¼ö¿¡ ´ëÇÑ °¢ ÂüÁ¶¿¡´Â ´ÙÀ½°ú °°Àº ±¸¹®ÀÌ µé¾î ÀÖ½À´Ï´Ù.
>>-function_name--(--+--------------------+---)---------------->< | .-,------------. | | V | | '----expression---+--'
À§ ¿¹¿¡¼ function_nameÀº ±ÔÁ¤ÈµÇÁö ¾ÊÀº ÇÔ¼ö À̸§ ¶Ç´Â ±ÔÁ¤ÈµÈ ÇÔ¼ö À̸§ÀÌ µÉ ¼ö ÀÖ°í, ÀμöÀÇ ¼ö´Â 0¿¡¼ 90±îÁö °¡´ÉÇϸç, Ç¥Çö½Ä¿¡´Â ´ÙÀ½ »çÇ×ÀÌ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù.
ÀμöÀÇ À§Ä¡°¡ Áß¿äÇϰí, Àǹ̰¡ Á¤Á¤µÇ·Á¸é ÇÔ¼ö Á¤ÀǸ¦ µû¶ó¾ß ÇÕ´Ï´Ù. ÀμöÀÇ À§Ä¡¿Í ÇÔ¼ö Á¤ÀÇ´Â ÇÔ¼ö ³»¿ë ÀÚü¸¦ µû¶ó¾ß ÇÕ´Ï´Ù. DB2´Â ÇÔ¼ö Á¤ÀÇ¿Í ´õ Àß ÀÏÄ¡ÇÏ´Â Àμö¸¦ ¼¯À¸·Á ÇÏÁö ¾ÊÀ¸¸ç, DB2´Â °³º° ÇÔ¼ö ¸Å°³º¯¼öÀÇ Àǹ̸¦ ÀÌÇØÇÏÁö ¸øÇÕ´Ï´Ù.
UDF Àμö Ç¥Çö½Ä¿¡¼ Ä÷³ À̸§À» »ç¿ëÇÒ ¶§´Â Ä÷³ÀÌ Æ÷ÇÔµÈ Å×À̺í ÂüÁ¶¿¡ ÀûÀýÇÑ ¹üÀ§°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. Á¶Àο¡¼ ÂüÁ¶µÇ´Â Å×À̺í ÇÔ¼öÀÇ °æ¿ì, ÀÌ´Â ´Ù¸¥ Å×ÀÌºí ¶Ç´Â Å×À̺í ÇÔ¼ö·ÎºÎÅÍÀÇ Ä÷³À» Æ÷ÇÔ½ÃŰ´Â ÀμöÀÇ °æ¿ì ±× Å×ÀÌºí ¶Ç´Â Å×À̺í ÇÔ¼ö´Â FROMÀý¿¡¼ ÂüÁ¶°¡ Æ÷ÇÔµÈ Å×À̺í ÇÔ¼ö ¾Õ¿¡ ³ª¿Í¾ß ÇÔÀ» ÀǹÌÇÕ´Ï´Ù. Å×À̺í ÇÔ¼ö Àμö¿¡¼ÀÇ Ä÷³ »ç¿ë ±ÔÄ¢¿¡ ´ëÇÑ Àüü ³íÀÇ´Â SQL ÂüÁ¶¼ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
ÇÔ¼ö È£ÃâÀÇ À¯È¿ÇÑ ¸î°¡Áö ¿¹´Â ´ÙÀ½°ú °°½À´Ï´Ù.
AVG(FLOAT_COLUMN) BLOOP(COLUMN1) BLOOP(FLOAT_COLUMN + CAST(? AS INTEGER)) BLOOP(:hostvar :indicvar) BRIAN.PARSE(CHAR_COLUMN CONCAT USER, 1, 0, 0, 1) CTR() FLOOR(FLOAT_COLUMN) PABLO.BLOOP(A+B) PABLO.BLOOP(:hostvar) "search_schema"(CURRENT FUNCTION PATH, 'GENE') SUBSTR(COLUMN2,8,3) SYSFUN.FLOOR(AVG(EMP.SALARY)) SYSFUN.AVG(SYSFUN.FLOOR(EMP.SALARY)) SYSIBM.SUBSTR(COLUMN2,11,LENGTH(COLUMN3)) SQRT(SELECT SUM(length*length) FROM triangles WHERE id= 'J522' AND legtype <> 'HYP')
À§ ÇÔ¼ö Áß¿¡¼ Å×À̺í ÇÔ¼ö°¡ ÀÖ´Â °æ¿ì À̸¦ ÂüÁ¶ÇÏ´Â ±¸¹®Àº À§¿¡ Á¦½ÃµÈ ±¸¹®°ú´Â ¾à°£ Â÷À̰¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, PABLO.BLOOP°¡ Å×À̺í ÇÔ¼öÀÎ °æ¿ì Á¦´ë·Î ÂüÁ¶ÇÏ·Á¸é ´ÙÀ½À» »ç¿ëÇϽʽÿÀ.
TABLE(PABLO.BLOOP(A+B)) AS Q
ÁÖ¿ä Á¦ÇÑ»çÇ׿¡´Â ¸Å°³º¯¼ö Ç¥½Ã¹®ÀÚ°¡ Æ÷ÇԵ˴ϴÙ. ´ÙÀ½À» ÄÚµåÈÇÒ ¼ö ¾ø½À´Ï´Ù.
BLOOP(?)
ÇÔ¼ö ¼±Åà ³í¸®°¡ ÀμöÀÇ µ¥ÀÌÅÍ À¯ÇüÀÌ ¾î¶»°Ô µÉ Áö ¾ËÁö ¸øÇϹǷΠÂüÁ¶¸¦ ºÐ¼®ÇÒ ¼ö ¾ø½À´Ï´Ù. CAST ½ºÆåÀ» »ç¿ëÇÏ¿© INTEGER¿Í °°Àº ¸Å°³º¯¼ö Ç¥½Ã¹®ÀÚ À¯ÇüÀ» Ç¥½ÃÇÒ ¼ö ÀÖ°í, ±×·¯¸é ÇÔ¼ö ¼±Åà ³í¸®°¡ ÁøÇàµÉ ¼ö ÀÖ½À´Ï´Ù.
BLOOP(CAST(? AS INTEGER))
±ÔÁ¤ÈµÈ ÇÔ¼ö ÂüÁ¶¸¦ »ç¿ëÇÒ °æ¿ì ÀÏÄ¡ ÇÔ¼ö¿¡ ´ëÇÑ DB2 °Ë»öÀ» ±× ½ºÅ°¸¶·Î Á¦ÇÑÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½°ú °°Àº ¸í·É¹®ÀÌ ÀÖ½À´Ï´Ù.
SELECT PABLO.BLOOP(COLUMN1) FROM T
PABLO ½ºÅ°¸¶¿¡ ÀÖ´Â BLOOP ÇÔ¼ö¸¸ °í·ÁµË´Ï´Ù. SERGE »ç¿ëÀÚ°¡ BLOOP ÇÔ¼ö¸¦ Á¤ÀÇÇß´ÂÁö, ³»Àå BLOOP ÇÔ¼ö°¡ ÀÖ´ÂÁö´Â ¹®Á¦°¡ µÇÁö ¾Ê½À´Ï´Ù. PABLO »ç¿ëÀÚ°¡ ½ºÅ°¸¶¿¡ µÎ °³ÀÇ BLOOP ÇÔ¼ö¸¦ Á¤ÀÇÇß´Ù°í °¡Á¤ÇϽʽÿÀ.
CREATE FUNCTION BLOOP (INTEGER) RETURNS ... CREATE FUNCTION BLOOP (DOUBLE) RETURNS ...
µû¶ó¼ BLOOP´Â PABLO ½ºÅ°¸¶ ³»¿¡¼ ¿Àºê·ÎµåµÇ°í, ÇÔ¼ö ¼±Åà ¾Ë°í¸®ÁòÀº ÀμöÀÇ µ¥ÀÌÅÍ À¯Çü, column1¿¡ µû¶ó ÃÖ°íÀÇ BLOOP¸¦ ¼±ÅÃÇÕ´Ï´Ù. ÀÌ·± °æ¿ì, µÎ PABLO.BLOOP ¸ðµÎ ¼öÄ¡ Àμö¸¦ ÃëÇϸç, column1ÀÌ ¼öÄ¡ À¯Çü Áß Çϳª°¡ ¾Æ´Ñ °æ¿ì ¸í·É¹®ÀÌ ½ÇÆÐÇÕ´Ï´Ù. ¹Ý´ë·Î, column1ÀÌ SMALLINTÀ̰ųª INTEGERÀ̸é ÇÔ¼ö ¼±ÅÃÀº ù¹øÂ° BLOOP·Î µÇ°í, column1ÀÌ DECIMAL, DOUBLE, REAL ¶Ç´Â BIGINTÀ̸é, µÎ ¹øÂ° BLOOP°¡ ¼±Åõ˴ϴÙ.
ÀÌ ¿¹¿¡¼ÀÇ ¸î°¡Áö À¯ÀÇ»çÇ×:
SELECT PABLO.BLOOP(DOUBLE(COLUMN1)) FROM T
SELECT PABLO.BLOOP(INTEGER(COLUMN1)) FROM T SELECT PABLO.BLOOP(FLOOR(COLUMN1)) FROM T SELECT PABLO.BLOOP(CEILING(COLUMN1)) FROM T SELECT PABLO.BLOOP(INTEGER(ROUND(COLUMN1,0))) FROM T
±âŸ ÇÔ¼ö¸¦ °ËÅäÇÏ·Á¸é SQL ÂüÁ¶¼ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. INTEGER ÇÔ¼ö´Â SYSIBM ½ºÅ°¸¶¿¡ ÀÖ´Â ³»Àå ÇÔ¼öÀÔ´Ï´Ù. FLOOR, CEILING ¹× ROUND ÇÔ¼ö´Â DB2¿Í ÇÔ²² Á¦°øµÇ´Â UDF·Î¼, ´Ù¸¥ ¸¹Àº À¯¿ëÇÑ ÇÔ¼ö¿Í ÇÔ²² SYSFUN ½ºÅ°¸¶¿¡¼ ãÀ» ¼ö ÀÖ½À´Ï´Ù.
±ÔÁ¤ÈµÈ ÇÔ¼ö ÂüÁ¶ ´ë½Å ±ÔÁ¤ÈµÇÁö ¾ÊÀº ÇÔ¼ö ÂüÁ¶¸¦ »ç¿ëÇÒ °æ¿ì ÀϹÝÀûÀ¸·Î DB2´Â ÀÏÄ¡ÇÏ´Â ÇÔ¼ö¸¦ °Ë»öÇÒ ¶§ ÀÌ ÇÔ¼ö °æ·Î¸¦ »ç¿ëÇÏ¿© ÂüÁ¶¸¦ ±ÔÁ¤ÈÇÕ´Ï´Ù. DROP FUNCTION ¶Ç´Â COMMENT ON FUNCTION ÇÔ¼öÀÇ °æ¿ì, ±ÔÁ¤ÈµÇÁö ¾Ê¾ÒÀ¸¸é ÇöÀç ±ÇÇÑ ºÎ¿© ID¸¦ »ç¿ëÇÏ¿© ÂüÁ¶°¡ ±ÔÁ¤ÈµË´Ï´Ù. µû¶ó¼, ÇÔ¼ö °æ·Î°¡ ¹«¾ùÀÎÁö, ±×¸®°í ÇöÀç ÇÔ¼ö °æ·Î ½ºÅ°¸¶¿¡ ¾î¶² Ãæµ¹ ÇÔ¼ö°¡ Á¸ÀçÇÏ´ÂÁö ¾Ë¾Æ¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, »ç¿ëÀÚ°¡ PABLOÀ̰í Á¤Àû SQL¹®Àº ´ÙÀ½°ú °°´Ù°í °¡Á¤ÇϽʽÿÀ. ¿©±â¼ COLUMN1Àº INTEGER µ¥ÀÌÅÍ À¯ÇüÀÔ´Ï´Ù.
SELECT BLOOP(COLUMN1) FROM T
±ÔÁ¤ÈµÈ ÇÔ¼ö ÂüÁ¶ »ç¿ë¿¡ ÀοëµÈ µÎ °³ÀÇ BLOOP ÇÔ¼ö¸¦ ÀÛ¼ºÇß°í, ÀÌ Áß Çϳª¸¦ ¼±ÅÃÇÏ·Á°í ÇÕ´Ï´Ù. ´ÙÀ½°ú °°Àº ±âº» ÇÔ¼ö °æ·Î°¡ »ç¿ëµÉ °æ¿ì (Ä÷³1ÀÌ INTEGERÀ̹ǷÎ) ù¹øÂ° BLOOP°¡ ¼±Åõǰí, SYSIBM ¶Ç´Â SYSFUN¿¡ Ãæµ¹ÇÏ´Â BLOOP°¡ ¾øÀ» °æ¿ì,
"SYSIBM","SYSFUN","PABLO"
±×·¯³ª, ´Ù¸¥ ¸ñÀûÀ¸·Î ÀÌÀü¿¡ ÀÛ¼ºÇÑ »çÀü ó¸® ÄÄÆÄÀÏ ¹× ¹ÙÀεù¿ë ½ºÅ©¸³Æ®¸¦ »ç¿ëÇϰí ÀÖ´Ù´Â »ç½ÇÀ» Àؾú´Ù°í °¡Á¤ÇϽʽÿÀ. ÀÌ ½ºÅ©¸³Æ®¿¡¼ ÇöÀç ÀÛ¾÷¿¡ Àû¿ëµÇÁö ¾Ê´Â ´Ù¸¥ ÀÌÀ¯·Î ´ÙÀ½°ú °°Àº ÇÔ¼ö °æ·Î¸¦ ÁöÁ¤Çϱâ À§ÇØ FUNCPATH ¸Å°³º¯¼ö¸¦ ¸í½ÃÀûÀ¸·Î ÄÚµåÈÇß½À´Ï´Ù.
"KATHY","SYSIBM","SYSFUN","PABLO"
Kathy°¡ °³ÀοëÀ¸·Î BLOOP ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ °æ¿ì, ÀÌ ÇÔ¼ö ¼±ÅÃÀº KathyÀÇ ÇÔ¼ö·Î µÉ °¡´É¼ºÀÌ ¸Å¿ì ³ôÀ¸¸ç »ç¿ëÀÚÀÇ ¸í·É¹®Àº ¿À·ù ¾øÀÌ ½ÇÇàµÉ °ÍÀÔ´Ï´Ù. DB2´Â »ç¿ëÀÚ°¡ ¹«¾ùÀ» ¼öÇàÇϰí ÀÖ´ÂÁö ¾Ë°í ÀÖ´Ù°í ÀüÁ¦ÇϹǷΠ»ç¿ëÀÚ¿¡°Ô´Â À̰ÍÀÌ Å뺸µÇÁö ¾Ê½À´Ï´Ù. »ç¿ëÀÚ°¡ »ç¿ëÀÚ ¸í·É¹®À¸·ÎºÎÅÍ À߸øµÈ Ãâ·ÂÀ» ½Äº°ÇÏ¿© ÇÊ¿äÇÑ Á¤Á¤ Á¶Ä¡¸¦ ÃëÇØ¾ß ÇÕ´Ï´Ù.
±ÔÁ¤ÈµÈ ÇÔ¼ö ÂüÁ¶ ¹× ±ÔÁ¤ÈµÇÁö ¾ÊÀº ÇÔ¼ö ÂüÁ¶ ¸ðµÎ¿¡ ´ëÇØ ÇÔ¼ö ¼±Åà ¾Ë°í¸®ÁòÀº ´ÙÀ½ Ç׸ñµéÀÌ ÀÖ´Â Àû¿ë°¡´ÉÇÑ ÇÔ¼öµé, ³»Àå ÇÔ¼ö ¹× »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¸¦ Æ÷ÇÔÇÑ ¸ðµç ÇÔ¼öµéÀ» °ËÅäÇÕ´Ï´Ù.
(Àû¿ë°¡´É ÇÔ¼ö¶õ ±ÔÁ¤ÈµÈ ÂüÁ¶ÀÇ °æ¿ì ¸í¸íµÈ ½ºÅ°¸¶¿¡ ÀÖ´Â ÇÔ¼ö¸¦, ±ÔÁ¤ÈµÇÁö ¾ÊÀº ÂüÁ¶ÀÇ °æ¿ì ÇÔ¼ö °æ·ÎÀÇ ½ºÅ°¸¶¿¡ ÀÖ´Â ÇÔ¼ö¸¦ ÀǹÌÇÕ´Ï´Ù.) ¾Ë°í¸®ÁòÀº ¿ì¼± ¿ÏÀüÇÏ°Ô ÀÏÄ¡ÇÏ´Â ÇÔ¼ö¸¦ ã°í, ±×·± ÇÔ¼ö°¡ ¾øÀ¸¸é °¡Àå ÀÏÄ¡ÇÏ´Â °ÍÀ» ã½À´Ï´Ù. ±ÔÁ¤ÈµÇÁö ¾ÊÀº ÂüÁ¶¿¡ ÇÑÇØ, µ¿ÀÏÇÑ µÎ ÀÏÄ¡ Ç׸ñÀÌ ´Ù¸¥ ½ºÅ°¸¶¿¡ ÀÖ´Â °æ¿ì °áÁ¤ ¿äÀÎÀ¸·Î¼ ÇöÀç ÇÔ¼ö °æ·Î°¡ »ç¿ëµË´Ï´Ù. ¾Ë°í¸®Áò¿¡ ´ëÇÑ ¼¼ºÎ»çÇ×Àº SQL ÂüÁ¶¼ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
±ÔÁ¤ÈµÈ ÇÔ¼ö ÂüÁ¶ »ç¿ë ³¡ºÎºÐ¿¡ ³ª¿À´Â ¿¹¿¡¼ Á¦½ÃµÈ Èï¹Ì·Î¿î ±â´ÉÀº ÇÔ¼ö ÂüÁ¶°¡ ÁßøµÉ ¼ö ÀÖÀ¸¸ç, µ¿ÀÏÇÑ ÇÔ¼ö¸¦ ÂüÁ¶Çϱ⵵ ÇÕ´Ï´Ù. ÀÌ´Â UDF »Ó¸¸ ¾Æ´Ï¶ó ³»Àå ÇÔ¼öÀÇ °æ¿ì¿¡µµ ÀϹÝÀûÀ¸·Î Àû¿ëµË´Ï´Ù. ±×·¯³ª, Ä÷³ ÇÔ¼ö°¡ Æ÷Ç﵃ ¶§ ¸î°¡Áö Á¦ÇÑ»çÇ×ÀÌ ÀÖ½À´Ï´Ù.
¾ÕÀÇ ¿¹¸¦ Á¤¸®ÇØ º¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.
CREATE FUNCTION BLOOP (INTEGER) RETURNS INTEGER ... CREATE FUNCTION BLOOP (DOUBLE) RETURNS INTEGER ...
ÀÌÁ¦ ´ÙÀ½ DML¹®À» »ìÆì º¸½Ê½Ã¿À.
SELECT BLOOP( BLOOP(COLUMN1)) FROM T
column1ÀÌ DECIMAL Ä÷³À̰ųª DOUBLE Ä÷³ÀÎ °æ¿ì ³»ºÎ BLOOP ÂüÁ¶´Â À§¿¡¼ Á¤ÀÇµÈ µÎ ¹øÂ° BLOOPÀ¸·Î µË´Ï´Ù. ÀÌ BLOOP°¡ INTEGER¸¦ ¸®ÅÏÇϹǷÎ, ¿ÜºÎ BLOOP´Â ù¹øÂ° BLOOP·Î µË´Ï´Ù.
column1ÀÌ SMALLINT Ä÷³À̰ųª INTEGER Ä÷³ÀÎ °æ¿ì ³»ºÎ bloop ÂüÁ¶´Â À§¿¡¼ Á¤ÀÇµÈ Ã¹¹øÂ° BLOOP°¡ µË´Ï´Ù. ÀÌ BLOOP°¡ INTEGER¸¦ ¸®ÅÏÇϹǷÎ, ¿ÜºÎ BLOOPµµ ù¹øÂ° BLOOP·Î µË´Ï´Ù. ÀÌ·± °æ¿ì µ¿ÀÏÇÑ ÇÔ¼ö¿¡ ´ëÇØ ÁßøµÈ ÂüÁ¶°¡ ³ªÅ¸³³´Ï´Ù.
ÇÔ¼ö ÂüÁ¶¿¡ Áß¿äÇÑ ¸î°¡Áö Ãß°¡ ÁöÁ¡Àº ´ÙÀ½°ú °°½À´Ï´Ù.
CREATE FUNCTION "+" (BOAT, BOAT) RETURNS ...
±×·± ÈÄ ´ÙÀ½°ú °°Àº À¯È¿ÇÑ SQL¹®À» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
SELECT BOAT_COL1 + BOAT_COL2 FROM BIG_BOATS WHERE BOAT_OWNER = 'Nelson Mattos'
±×·¯³ª µ¿µîÇÏ°Ô À¯È¿ÇÑ ¸í·É¹®À» ÀÛ¼ºÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
SELECT "+"(BOAT_COL1, BOAT_COL2) FROM BIG_BOATS WHERE BOAT_OWNER = 'Nelson Mattos'
»ç¿ëÀÚ´Â >, =, LIKE, IN µîÀÇ ³»Àå Á¶°Ç ¿¬»êÀÚ¸¦ ÀÌ·± ¹æ½ÄÀ¸·Î ¿À¹ö·ÎµåÇÒ ¼ö ¾ø½À´Ï´Ù. ³ª´©±â(/) ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµåÇÏ´Â UDFÀÇ ¿¹´Â ¿¹: Á¤¼ö ³ª´©±â ¿¬»êÀÚÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
CREATE FUNCTION BLOOP (INTEGER) RETURNS INTEGER ... CREATE FUNCTION BLOOP (DOUBLE) RETURNS CHAR(10)...
ÀÌÁ¦ ´ÙÀ½°ú °°Àº SELECT¹®À» ÀÛ¼ºÇÕ´Ï´Ù.
SELECT 'ABCDEFG' CONCAT BLOOP(SMALLINT_COL) FROM T
SMALLINT Àμö¸¦ »ç¿ëÇÏ¿© °Ë»öµÈ °¡Àå ÀÏÄ¡ÇÏ´Â ÇÔ¼ö°¡ À§¿¡ Á¤ÀÇµÈ Ã¹¹øÂ° BLOOPÀ̹ǷÎ, CONCATÀÇ µÎ ¹øÂ° ÇÇ¿¬»êÀÚ´Â INTEGER µ¥ÀÌÅÍ À¯ÇüÀ¸·Î µË´Ï´Ù. CONCAT´Â ¹®ÀÚ¿ Àμö¸¦ ¿ä±¸ÇϹǷΠ¸í·É¹®ÀÌ ½ÇÆÐÇÕ´Ï´Ù. ù¹øÂ° BLOOP°¡ ¾ø´Â °æ¿ì¿¡´Â ±âŸ BLOOP°¡ ¼±ÅÃµÇ°í ¸í·É¹® ½ÇÇàÀÌ ¼º°øÇÕ´Ï´Ù.
¸í·É¹®À» ½ÇÆÐ½ÃŰ´Â ¶Ç´Ù¸¥ À¯ÇüÀÇ ¹®¸Æ ºÒÀÏÄ¡´Â, Á¦°øµÈ ÇÔ¼ö ÂüÁ¶°¡ ½ºÄ®¶ó ¶Ç´Â Ä÷³ ÇÔ¼ö°¡ ÇÊ¿äÇÑ ¹®¸Æ¿¡¼ Å×À̺í ÇÔ¼ö·Î µÇ´Â °æ¿ìÀÔ´Ï´Ù. ±× ¹Ý´ëÀÇ °æ¿ìµµ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. ÂüÁ¶´Â Å×À̺í ÇÔ¼ö°¡ ÇÊ¿äÇÒ ¶§ ½ºÄ®¶ó ¶Ç´Â Ä÷³ ÇÔ¼ö·Î µË´Ï´Ù.
EXEC SQL BEGIN DECLARE SECTION; SQL TYPE IS CLOB(150K) clob150K ; /* LOB host var */ SQL TYPE IS CLOB_LOCATOR clob_locator1; /* LOB locator host var */ char string[40]; /* string host var */ EXEC SQL END DECLARE SECTION;
È£½ºÆ® º¯¼ö :clob150K ¶Ç´Â :clob_locator1ÀÌ ÇØ´ç ¸Å°³º¯¼ö°¡ CLOB(500K)·Î¼ Á¤ÀÇµÈ ÇÔ¼ö¿¡ ´ëÇÑ Àμö·Î¼ À¯È¿ÇÕ´Ï´Ù. µû¶ó¼, ¿¹: ¹®ÀÚ¿ °Ë»ö¿¡ Á¤ÀÇµÈ FINDSTRINGÀ» ÂüÁ¶ÇϹǷΠÇÁ·Î±×·¥¿¡¼ ´ÙÀ½ µÎ Ç׸ñÀÌ ¸ðµÎ À¯È¿ÇÕ´Ï´Ù.
... SELECT FINDSTRING (:clob150K, :string) FROM ... ... SELECT FINDSTRING (:clob_locator1, :string) FROM ...
¶ÇÇÑ LOB¿¡ ±âÃÊÇÑ ±¸º° À¯ÇüÀ» °¡Áø °á°ú ¶Ç´Â UDF ¸Å°³º¯¼ö¿¡ ´ëÇØ ÀÌ ±â´ÉÀ» »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ ±â´ÉÀº ºñºÐ¸®·Î¼ Á¤ÀÇµÈ UDF¿¡ Á¦Çѵ˴ϴÙ. ±×·¯ÇÑ ÇÔ¼ö¿¡ ´ëÇÑ Àμö´Â Á¤ÀÇµÈ À¯ÇüÀÇ LOB °ªÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. Áï, LOCATOR À¯Çü Áß Çϳª·Î¼ Á¤ÀÇµÈ È£½ºÆ® º¯¼ö°¡ ¾Æ´Ï¾îµµ µË´Ï´Ù. Àμö·Î¼ È£½ºÆ® º¯¼ö À§Ä¡ ÁöÁ¤ÀÚ¸¦ »ç¿ëÇÏ´Â °ÍÀº UDF ¸Å°³º¯¼öÀÇ AS LOCATOR ¹× °á°ú Á¤ÀǸ¦ »ç¿ëÇÏ´Â °Í°ú ¿ÏÀüÈ÷ ´ëºñµË´Ï´Ù.
È£½ºÆ® º¯¼ö¿¡¼ ½ÃÀ۵Ǹç ÇØ´ç ¸Å°³º¯¼ö°¡ ±¸º° À¯ÇüÀ¸·Î¼ Á¤ÀÇµÈ UDF·Î Àμö·Î¼ »ç¿ëµÇ´Â ±¸º° À¯Çü °ªÀº »ç¿ëÀÚ¿¡ ÀÇÇØ ±¸º° À¯ÇüÀ¸·Î ¸í½ÃÀûÀ¸·Î À¯Çüº¯È¯µÇ¾î¾ß ÇÕ´Ï´Ù. ±¸º° À¯Çü¿¡ ´ëÇÑ È£½ºÆ® ¾ð¾î À¯ÇüÀº ¾ø½À´Ï´Ù. DB2ÀÇ ¸í¹éÇÑ À¯Çü ÁöÁ¤ÀÇ °æ¿ì À̰ÍÀÌ ÇʼöÀûÀÔ´Ï´Ù. ±×·¸Áö ¾ÊÀ» °æ¿ì »ç¿ëÀÚ °á°ú°¡ ¸íÈ®ÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼, BLOB¸¦ ÅëÇØ Á¤ÀǵǾî ÀÖ´Â BOAT ±¸º° À¯ÇüÀ» °í·ÁÇϰí, Àμö·Î¼ BOAT À¯ÇüÀÇ ¿ÀºêÁ§Æ®¸¦ ÃëÇÏ´Â ¿¹: UDT ¸Å°³º¯¼ö°¡ ÀÖ´Â ¿ÜºÎ ÇÔ¼ö¿¡¼ BOAT_COST UDF¸¦ °í·ÁÇϽʽÿÀ. C¾ð¾î ÀÀ¿ëÇÁ·Î±×·¥ÀÇ ´ÙÀ½ ºÎºÐ¿¡¼, :ship È£½ºÆ® º¯¼ö´Â BOAT_COST ÇÔ¼ö·Î Àü´ÞµÈ BLOB °ªÀ» º¸À¯ÇÕ´Ï´Ù.
EXEC SQL BEGIN DECLARE SECTION; SQL TYPE IS BLOB(150K) ship; EXEC SQL END DECLARE SECTION;
´ÙÀ½ ¸í·É¹® ¸ðµÎ°¡ :ship È£½ºÆ® º¯¼ö¸¦ BOAT À¯ÇüÀ¸·Î º¯È¯ÇϹǷΠBOAT_COST ÇÔ¼ö·Î µË´Ï´Ù.
... SELECT BOAT_COST (BOAT(:ship)) FROM ... ... SELECT BOAT_COST (CAST(:ship AS BOAT)) FROM ...
µ¥ÀÌÅͺ£À̽º¿¡ ¿©·¯ °³ÀÇ BOAT ±¸º° À¯ÇüÀÌ Àְųª ´Ù¸¥ ½ºÅ°¸¶¿¡ BOAT UDF°¡ ÀÖ´Â °æ¿ì, ÇÔ¼ö °æ·Î¿¡ ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀ» °æ¿ì »ç¿ëÀÚ °á°ú°¡ ¸íÈ®ÇÒ ¼ö ÀÖ½À´Ï´Ù.