CREATE FUNCTION¹®¿¡¼ ¾î¶² LOB µ¥ÀÌÅÍ À¯ÇüÀ̳ª LOB À¯Çü¿¡ ±Ù°ÅÇÑ ±¸º° À¯Çü¿¡µµ AS LOCATOR¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº Àü´ÞµÈ ¸Å°³º¯¼ö¿Í ¸®ÅÏµÈ °á°ú ¸ðµÎ¿¡ Àû¿ëµË´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì DB2´Â ´ÙÀ½À» ¼öÇàÇÕ´Ï´Ù.
À§Ä¡ ÁöÁ¤ÀÚ °ªÀ» ¼öÁ¤ÇÏ´Â °æ¿ì, »ç¿ëÇÒ ¼ö ¾ø°Ô µÇ¹Ç·Î ¼öÁ¤ÇÏÁö ¸¶½Ê½Ã¿À. API°¡ ¿À·ù¸¦ ¸®ÅÏÇÒ °ÍÀÔ´Ï´Ù.
ÀÌ Æ¯¼öÇÑ APIµéÀº NOT FENCED·Î Á¤ÀÇµÈ UDF¿¡¼¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº ¹ö±×°¡ ÀÖ´Â UDF°¡ ½Ã½ºÅÛÀ» ¼Õ»ó½Ãų ¼ö ÀÖ´Â °¡´É¼º ¶§¹®¿¡, Å×½ºÆ® ´Ü°èÀÇ À̵é UDF°¡ ½ÇÁ¦ µ¥ÀÌÅͺ£À̽º¿¡¼ »ç¿ëµÇ¾î¼´Â ¾ÈµÊÀ» ÀǹÌÇÕ´Ï´Ù. Å×½ºÆ® µ¥ÀÌÅͺ£À̽º¿¡¼ ¼öÇàµÉ ¶§, ¹ö±×°¡ ÀÖ´Â °æ¿ì, UDF·ÎºÎÅÍ Áö¼ÓÀûÀÎ ¼Õ»óÀÌ ¹ß»ýµÉ ¼ö´Â ¾ø½À´Ï´Ù. UDF¿¡ ¿À·ù°¡ ¾ø´Â °ÍÀ¸·Î ÆÇ¸íµÇ¸é, À̰ÍÀº ½ÇÁ¦ µ¥ÀÌÅͺ£À̽º¿¡ Àû¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½¿¡ ³ª¿À´Â APIµéÀº sqludf.h UDF include ÆÄÀÏ¿¡ µé¾î ÀÖ´Â ÇÔ¼ö ÇÁ·ÎÅäŸÀÔÀ» »ç¿ëÇÏ¿© Á¤ÀÇµÈ °ÍÀÔ´Ï´Ù.
extern int sqludf_length( sqludf_locator* udfloc_p, /* in: User-supplied LOB locator value */ sqlint32* Return_len_p /* out: Return the length of the LOB value */ ); extern int sqludf_substr( sqludf_locator* udfloc_p, /* in: User-supplied LOB locator value */ sqlint32 start, /* in: Substring start value (starts at 1) */ sqlint32 length, /* in: Get this many bytes */ unsigned char* buffer_p, /* in: Read into this buffer */ sqlint32* Return_len_p /* out: Return the length of the LOB value */ ); extern int sqludf_append( sqludf_locator* udfloc_p, /* in: User-supplied LOB locator value */ unsigned char* buffer_p, /* in: User's data buffer */ sqlint32 length, /* in: Length of data to be appended */ sqlint32* Return_len_p /* out: Return the length of the LOB value */ ); extern int sqludf_create_locator( int loc_type, /* in: BLOB, CLOB or DBCLOB? */ sqludf_locator** Loc_p /* out: Return a ptr to a new locator */ ); extern int sqludf_free_locator( sqludf_locator* loc_p /* in: User-supplied LOB locator value */ );
´ÙÀ½Àº ÀÌ APIµéÀÌ Á¶À۵Ǵ ¹æ½Ä¿¡ ´ëÇÑ ¼³¸íÀÔ´Ï´Ù. ¸ðµç ±æÀÌ´Â µ¥ÀÌÅÍ À¯Çü¿¡ °ü°è¾øÀÌ ¹ÙÀÌÆ® ´ÜÀ§À̰í, 1 ¹ÙÀÌÆ® ¶Ç´Â 2 ¹ÙÀÌÆ® ¹®Àڿ͵µ °ü°è ¾ø½À´Ï´Ù.
¸®ÅÏ ÄÚµå. °¢ API¿¡ ´ëÇÏ¿© DB2¿¡ ÀÇÇØ UDF·Î Àü´ÞµÇ´Â ¸®ÅÏ ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ ÇØ¼®µË´Ï´Ù.
LOB À§Ä¡ ÁöÁ¤ÀÚ°¡ ÁÖ¾îÁø °æ¿ì, À§Ä¡ ÁöÁ¤ÀÚ¿¡ ÀÇÇØ Ç¥½ÃµÇ´Â LOB °ªÀÇ ±æÀ̸¦ ¸®ÅÏÇÕ´Ï´Ù. ¹®Á¦°¡ µÇ´Â À§Ä¡ ÁöÁ¤ÀÚ´Â º¸Åë DB2¿¡ ÀÇÇØ UDF·Î Àü´ÞµÇ´Â À§Ä¡ ÁöÁ¤ÀÚÀÌÁö¸¸, UDF¿¡ ÀÇÇØ sqludf_append()¸¦ »ç¿ëÇÏ¿© ±¸ÃàµÇ´Â °á°ú °ªÀ» ³ªÅ¸³»´Â À§Ä¡ ÁöÁ¤ÀÚÀÏ ¼ö ÀÖ½À´Ï´Ù.
ÀϹÝÀûÀ¸·Î UDF°¡ À§Ä¡ ÁöÁ¤ÀÚ¸¦ ¼ö½ÅÇÒ ¶§ LOB °ªÀÇ ±æÀ̸¦ ¾Ë°íÀÚ ÇÏ´Â °æ¿ì UDF´Â ÀÌ API¸¦ »ç¿ëÇÕ´Ï´Ù.
¸®ÅÏ ÄÚµå 3Àº ´ÙÀ½À» ³ªÅ¸³À´Ï´Ù.
LOB À§Ä¡ ÁöÁ¤ÀÚ, LOB ³»ÀÇ ½ÃÀÛ À§Ä¡, ¿øÇÏ´Â ±æÀÌ ¹× ¹öÆÛ¿¡ ´ëÇÑ Æ÷ÀÎÅÍ µîÀÌ ÁÖ¾îÁø °æ¿ì, ÀÌ API´Â ¹öÆÛ¿¡ ¹ÙÀÌÆ®¸¦ À§Ä¡½Ã۰í, À̵¿ÇÒ ¼ö ÀÖ´Â ¹ÙÀÌÆ® ¼ö¸¦ ¸®ÅÏÇÕ´Ï´Ù. ¹°·Ð UDF´Â ¿øÇÏ´Â ±æÀÌ¿¡ ÃæºÐÇÑ ¹öÆÛ¸¦ Á¦°øÇØ¾ß ÇÕ´Ï´Ù. À̵¿µÈ ¹ÙÀÌÆ® ¼ö´Â ¿øÇÏ´Â ±æÀ̺¸´Ù ªÀ» ¼öµµ Àִµ¥, ¿¹¸¦ µé¾î, À§Ä¡ 101¿¡¼ ½ÃÀÛÇÏ´Â 50 ¹ÙÀÌÆ®¸¦ ¿äûÇÑ °æ¿ì, LOB °ªÀº ´ÜÁö 120 ¹ÙÀÌÆ® ±æÀÌÀ̰í API´Â 20 ¹ÙÀÌÆ®¸¸À» À̵¿½Ãų °ÍÀÔ´Ï´Ù.
ÀϹÝÀûÀ¸·Î À̰ÍÀº UDF°¡ À§Ä¡ ÁöÁ¤ÀÚ¸¦ ¼ö½ÅÇÒ ¶§, LOB °ªÀÇ ¹ÙÀÌÆ®¸¦ º¸°íÀÚÇÏ´Â °æ¿ì UDF°¡ »ç¿ëÇÏ´Â APIÀÔ´Ï´Ù.
¸®ÅÏ ÄÚµå 3Àº ´ÙÀ½À» ³ªÅ¸³À´Ï´Ù.
LOB À§Ä¡ ÁöÁ¤ÀÚ, ¾È¿¡ µ¥ÀÌÅͰ¡ µé¾î ÀÖ´Â µ¥ÀÌÅÍ ¹öÆÛ¿¡ ´ëÇÑ Æ÷ÀÎÅÍ ¹× Ãß°¡ÇÒ µ¥ÀÌÅÍ ±æÀÌ µîÀÌ ÁÖ¾îÁ³À» ¶§, ÀÌ API´Â µ¥ÀÌÅ͸¦ LOB °ªÀÇ ³¡¿¡ Ãß°¡Çϰí Ãß°¡µÈ ¹ÙÀÌÆ® ±æÀ̸¦ ¸®ÅÏÇÕ´Ï´Ù. Ãß°¡µÈ ±æÀÌ´Â Ç×»ó Ãß°¡Çϱâ À§ÇØ ÁÖ¾îÁø ±æÀÌ¿Í °°½À´Ï´Ù. Àüü ±æÀ̸¦ Ãß°¡ÇÒ ¼ö ¾ø´Â °æ¿ì, sqludf_append() È£ÃâÀº ±âŸ ¸®ÅÏ ÄÚµå¿Í ÇÔ²² ½ÇÆÐÇÏ°Ô µË´Ï´Ù.
ÀϹÝÀûÀ¸·Î À̰ÍÀº °á°ú°¡ AS LOCATER¸¦ »ç¿ëÇÏ¿© Á¤ÀÇµÉ ¶§ ±×¸®°í UDF°¡ sqludf_create_locator()¸¦ »ç¿ëÇÏ¿© À§Ä¡ ÁöÁ¤ÀÚ¸¦ ÀÛ¼ºÇÑ ÈÄ ÇÑ ¹ø¿¡ ÇϳªÀÇ Ãß°¡¸¦ ±¸ÃàÇÒ ¶§ UDF°¡ »ç¿ëÇÏ´Â APIÀÔ´Ï´Ù. ÀÌ °æ¿ì ±¸Ãà ÇÁ·Î¼¼½º¸¦ ¿Ï·áÇÑ ÈÄ UDF´Â À§Ä¡ ÁöÁ¤ÀÚ¸¦ °á°ú Àμö°¡ °¡¸®Å°´Â °÷À¸·Î À̵¿½Ãŵ´Ï´Ù.
ÀÌ API¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚÀÇ ÀÔ·Â À§Ä¡ ÁöÁ¤ÀÚ¿¡µµ Ãß°¡ÇÒ ¼ö Àִµ¥, À̰ÍÀº UDF ³»¿¡¼ »ç¿ëÀÚ °ªÀ» Á¶ÀÛÇÒ ¼ö ÀÖ´Â ÃÖ´ëÇÑÀÇ À¶Å뼺À» Á¦°øÇÑ´Ù´Â Á¡¿¡¼ ¸Å¿ì À¯¿ëÇÏÁö¸¸, SQL¹®À̳ª µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåµÈ LOB °ª¿¡´Â ¾Æ¹«·± ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê½À´Ï´Ù.
ÀÌ API´Â Á¶±Ý¾¿ ¸Å¿ì Å« LOB °ªÀ» ±¸ÃàÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. °á°ú¸¦ ±¸ÃàÇÏ´Â µ¥ ¸¹Àº ¼öÀÇ Ãß°¡°¡ »ç¿ëµÇ´Â °æ¿ì, ÀÌ Å¸½ºÅ©ÀÇ ¼º´ÉÀº ´ÙÀ½À» ¼öÇàÇÔÀ¸·Î½á Çâ»óµÉ ¼ö ÀÖ½À´Ï´Ù.
sqludf_append() API¸¦ »ç¿ëÇÏ¿© ¸¹Àº ¼öÀÇ Å« LOB °ªÀ» ±¸ÃàÇÏ´Â SQL ÀÀ¿ëÇÁ·Î±×·¥µéÀº »ç¿ëÇÒ ¼ö ÀÖ´Â µð½ºÅ© °ø°£ÀÇ ¾ç¿¡ ÀÖ¾î¼ Á¦ÇÑÀ» ¹ÞÀ¸¹Ç·Î ¿À·ù°¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ¿À·ù°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Â °¡´É¼ºÀº ´ÙÀ½À» ¼öÇàÇÔÀ¸·Î½á °¨¼ÒÇÒ ¼ö ÀÖ½À´Ï´Ù.
¸®ÅÏ ÄÚµå 3Àº ´ÙÀ½À» ³ªÅ¸³À´Ï´Ù.
¿¹¸¦ µé¾î SQL_TYP_CLOB¿Í °°Àº µ¥ÀÌÅÍ À¯ÇüÀÌ ÁÖ¾îÁø °æ¿ì, À§Ä¡ ÁöÁ¤ÀÚ¸¦ ÀÛ¼ºÇÕ´Ï´Ù. µ¥ÀÌÅÍ À¯Çü °ªÀº ¿ÜºÎ ÀÀ¿ëÇÁ·Î±×·¥ Çì´õ ÆÄÀÏÀÎ sql.h¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù.
ÀϹÝÀûÀ¸·Î UDF´Â UDF °á°ú°¡ AS LOCATOR¸¦ »ç¿ëÇÏ¿© Á¤Àǵǰí, UDF°¡ sqludf_append()¸¦ »ç¿ëÇÏ¿© °á°ú °ªÀ» ±¸ÃàÇϰíÀÚ ÇÒ ¶§ ÀÌ API¸¦ »ç¿ëÇÕ´Ï´Ù. ¶Ç ´Ù¸¥ »ç¿ë¹ýÀº ³»ºÎÀûÀ¸·Î LOB °ªÀ» Á¶ÀÛÇÒ ¶§ »ç¿ëÇÕ´Ï´Ù.
¸®ÅÏ ÄÚµå 3Àº ´ÙÀ½À» ³ªÅ¸³À´Ï´Ù.
Àü´ÞµÈ À§Ä¡ ÁöÁ¤ÀÚ¸¦ ÇØÁ¦ÇÕ´Ï´Ù.
sqludf_create_locator() API¸¦ »ç¿ëÇÏ¿© ÀÛ¼ºµÇ¾ú°í, ³»ºÎ Á¶ÀÛ¿¡¸¸ »ç¿ëµÈ À§Ä¡ ÁöÁ¤ÀÚ¸¦ ÇØÁ¦ÇÒ ¶§ ÀÌ API¸¦ »ç¿ëÇϽʽÿÀ. UDF·Î Àü´ÞµÈ À§Ä¡ ÁöÁ¤ÀÚ´Â ÇØÁ¦ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. ÇØ´ç À§Ä¡ ÁöÁ¤ÀÚ°¡ Ãâ·ÂÀ¸·Î UDF·ÎºÎÅÍ Àü´ÞµÇ´Â °æ¿ì, sqludf_create_locator()¸¦ ÅëÇØ UDF¿¡ ÀÇÇØ ÀÛ¼ºµÈ À§Ä¡ ÁöÁ¤ÀÚ´Â ÇØÁ¦ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù.
¸®ÅÏ ÄÚµå 3Àº ´ÙÀ½À» ³ªÅ¸³À´Ï´Ù.
´ÙÀ½ÀÇ ÁÖÀÇ»çÇ×Àº À̵é API »ç¿ë½Ã Àû¿ëµË´Ï´Ù.
ÁÖ:
À̰ÍÀº LOB À§Ä¡ ÁöÁ¤ÀÚÀÇ À¯¿ëÇÔÀ» º¸¿©ÁÖ´Â ¸î °¡Áö °¡´ÉÇÑ ½Ã³ª¸®¿À¿¡ ´ëÇÑ °£·«ÇÑ ¿ä¾àÀÔ´Ï´Ù. ÀÌ ³× °³ÀÇ ½Ã³ª¸®¿À´Â À§Ä¡ ÁöÁ¤ÀÚÀÇ »ç¿ëÀ» ´ë·«ÀûÀ¸·Î º¸¿©ÁÖ¸ç, ¿ä±¸µÇ´Â °ø°£À» Àý¾àÇϰí È¿À²¼ºÀ» Áõ°¡½Ãų ¼ö ÀÖ´Â ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.
UDF´Â sqludf_substr()À» »ç¿ëÇÏ¿© LOB °ªÀÇ Ã³À½ ºÎºÐÀ» º¸°í, ¿©±â¿¡¼ ¹ß°ßÇÑ Å©±â º¯¼ö¿¡ ±Ù°ÅÇÏ¿© 1¾ï ¹ÙÀÌÆ® LOB °ªÀÇ ¾îµò°¡¿¡¼ ´Ù½Ã sqludf_substr()À» »ç¿ëÇÏ¿© ¸î ¹ÙÀÌÆ®¸¸À» ÀаíÀÚ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ UDF´Â LOB °ª¿¡¼ ¹«¾ð°¡¸¦ ã½À´Ï´Ù. ´ëºÎºÐÀº ¾Õ ÂÊ¿¡¼ ã°Ô µÇÁö¸¸, ¶§·Î´Â 1¾ï ¹ÙÀÌÆ® °ª Àüü¸¦ ½ºÄµÇØ¾ß ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ UDF´Â sqludf_length()¸¦ »ç¿ëÇÏ¿© ÀÌ Æ¯Á¤ °ªÀÇ Å©±â¸¦ ã¾Æ, ·çÇÁ¿¡¼ sqludf_substr()¿¡ ´ëÇÑ È£ÃâÀ» ÁöÁ¤ÇÏ¿© ÇÑ ¹ø¿¡ 1 000 ¹ÙÀÌÆ®¾¿ ´Ü°èÀûÀ¸·Î Ž»öÇÕ´Ï´Ù. ¿©±â¿¡¼ ½ÃÀÛ À§Ä¡·Î º¯¼ö¸¦ »ç¿ëÇϴµ¥, ÀÌ º¯¼ö´Â ·çÇÁ¸¦ ¹Ýº¹ÇÒ ¶§¸¶´Ù ¸Å¹ø 1 000¾¿ Áõ°¡ÇÕ´Ï´Ù. ã°íÀÚ ÇÏ´Â °ÍÀ» ãÀ» ¶§±îÁö ÀÌ·± ½ÄÀ¸·Î °è¼ÓµË´Ï´Ù.
ÀÌ UDF´Â ÀÔ·ÂÀ¸·Î µÎ °³ÀÇ LOB À§Ä¡ ÁöÁ¤ÀÚ¸¦ °®À¸¸ç, Ãâ·ÂÀ¸·Î LOB À§Ä¡ ÁöÁ¤ÀÚ¸¦ ¸®ÅÏÇÕ´Ï´Ù. À̰ÍÀº sqludf_substr()À» »ç¿ëÇÏ¿© ¼ö½ÅÇÑ ¹ÙÀÌÆ®¸¦ ÀÐ¾î¼ µÎ °³ÀÇ ÀÔ·ÂÀ» °ËÅäÇÏ°í ºñ±³ÇÑ ÈÄ, ƯÁ¤ ¾Ë°í¸®Áò¿¡ ±Ù°ÅÇÏ¿© µÑ Áß ¾î¶² °ÍÀ» ¼±ÅÃÇÒ °ÍÀÎÁö¸¦ ÆÇº°ÇÕ´Ï´Ù. À̰ÍÀ» °áÁ¤ÇÒ¶§, ¼±ÅÃµÈ ÀÔ·ÂÀÇ À§Ä¡ ÁöÁ¤ÀÚ¸¦ UDF °á°ú Àμö¿¡ ÀÇÇØ ³ªÅ¸³ª´Â ¹öÆÛ·Î º¹»çÇÕ´Ï´Ù.
ÀÌ UDF´Â LOB °ª°ú ÁøÇà ¹æ½ÄÀ» ¾Ë·ÁÁÖ´Â ÀϺΠ´Ù¸¥ ÀμöµéÀ» Àü´Þ¹Þ½À´Ï´Ù. À̰ÍÀº Ãâ·ÂÀ» À§ÇØ À§Ä¡ ÁöÁ¤ÀÚ¸¦ ÀÛ¼ºÇϰí, ´Ù¸¥ ÀÔ·Â Àμö¿¡ µé¾î ÀÖ´Â Áö½Ã»çÇ׿¡ ±Ù°ÅÇÏ¿© sqludf_substr()À» »ç¿ëÇÏ¿© ÀÐ¾î µéÀÌ´Â ÀÔ·Â LOBÀÇ ¼·Î ´Ù¸¥ ¿©·¯ ºÎºÐÀ¸·ÎºÎÅÍ ´ëºÎºÐÀÇ °á°ú °ªÀ» ¹Þ¾Æ ¼øÂ÷ÀûÀ¸·Î Ãâ·Â °ªÀ» ±¸ÃàÇÕ´Ï´Ù. ¸ðµÎ ¿Ï·áµÇ¸é, °á°ú À§Ä¡ ÁöÁ¤ÀÚ¸¦ UDF °á°ú Àμö°¡ °¡¸®Å°´Â ¹öÆÛ·Î º¹»çÇϰí Á¾·áÇÕ´Ï´Ù.