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


UDF ¸Å°³º¯¼ö ¶Ç´Â °á°ú·Î LOB À§Ä¡ ÁöÁ¤ÀÚ »ç¿ë

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·Î Àü´ÞµÇ´Â ¸®ÅÏ ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ ÇØ¼®µË´Ï´Ù.

0
¼º°ø.
-1
API·Î Àü´ÞµÈ À§Ä¡ ÁöÁ¤ÀÚ°¡ È£ÃâÇϱâ Àü¿¡ sqludf_free_locator()¿¡ ÀÇÇØ ÇØÁ¦µÇ¾ú½À´Ï´Ù.
-2
FENCED ¸ðµå UDF¿¡¼­ È£ÃâÀÌ ½ÃµµµÇ¾ú½À´Ï´Ù.
-3
API¿¡ ºÒ·® ÀÔ·Â °ªÀÌ Á¦°øµÇ¾ú½À´Ï´Ù. °¢ API¿¡ °íÀ¯ÇÑ ºÒ·® ÀÔ·Â °ªÀÇ ¿¹´Â ¾Æ·¡ ¼³¸íÀ» ÂüÁ¶ÇϽʽÿÀ.
±âŸ
À¯È¿ÇÏÁö ¾ÊÀº À§Ä¡ ÁöÁ¤ÀÚ ¶Ç´Â ¸Þ¸ð¸® ¿À·ù¿Í °°Àº ±âŸ ¿À·ù. ÀÌ °æ¿ì¿¡ ¸®ÅϵǴ °ªÀº ÇØ´ç ¿À·ù Á¶°Ç¿¡ ´ëÀÀÇÏ´Â SQLCODEÀÔ´Ï´Ù. ¿¹¸¦ µé¾î, -423Àº À¯È¿ÇÏÁö ¾ÊÀº À§Ä¡ ÁöÁ¤ÀÚ °ªÀ» ÀǹÌÇÕ´Ï´Ù. ÀÌ·¯ÇÑ "±âŸ" ÄÚµå Áß Çϳª¸¦ °¡Áö°í UDF·Î ¸®ÅÏÇϱâ Àü¿¡ DB2´Â ¿À·ùÀÇ ½É°¢µµ¿¡ ´ëÇØ ÆÇ´ÜÇÕ´Ï´Ù. ½É°¢ÇÑ ¿À·ùÀÇ °æ¿ì, DB2´Â ¿À·ù°¡ ¹ß»ýÇßÀ½À» ±â¾ïÇϰí, UDF°¡ DB2·Î ¸®ÅÏÇÒ ¶§ UDF°¡ DB2·Î ¿À·ù SQLSTATE¸¦ ¸®ÅÏÇÏ´ÂÁö ¿©ºÎ¿¡ °ü°è¾øÀÌ, DB2´Â ¿À·ù Á¶°Ç¿¡ ÀûÀýÇÑ Á¶Ä¡¸¦ ÃëÇÕ´Ï´Ù. ½É°¢ÇÏÁö ¾ÊÀº ¿À·ùÀÇ °æ¿ì, DB2´Â ¿À·ù°¡ ¹ß»ýÇß´Ù´Â °ÍÀ» Àذí, Á¤Á¤ Á¶Ä¡¸¦ ÃëÇÒ °ÍÀÎÁö ¶Ç´Â DB2·Î ¿À·ù SQLSTATE¸¦ ¸®ÅÏÇÒ °ÍÀÎÁö ¿©ºÎ¸¦ UDF°¡ °áÁ¤Çϵµ·Ï ¸Ã±é´Ï´Ù.

´ÙÀ½ÀÇ ÁÖÀÇ»çÇ×Àº À̵é API »ç¿ë½Ã Àû¿ëµË´Ï´Ù.

ÁÖ:

  1. LOB À§Ä¡ ÁöÁ¤ÀÚ¸¦ ¸®ÅÏÇϵµ·Ï Á¤ÀÇµÈ UDF¿¡´Â ¸î °¡Áö °¡´É¼ºÀ» °¡Áö°í ÀÖ½À´Ï´Ù. À̰ÍÀº ´ÙÀ½À» ¸®ÅÏÇÕ´Ï´Ù.

  2. Å×À̺í ÇÔ¼ö´Â Çϳª ÀÌ»óÀÇ LOB À§Ä¡ ÁöÁ¤ÀÚ¸¦ ¸®ÅÏÇϵµ·Ï Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌµé °¢°¢Àº ¾ÕÀÇ Ç׸ñ¿¡¼­ ³íÀÇµÈ °¡´É¼ºÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¶ÇÇÑ ±×·¯ÇÑ Å×À̺í ÇÔ¼ö¿¡ ´ëÇÏ¿© ¿©·¯°³ÀÇ Å×À̺í ÇÔ¼ö Ä÷³¿¡ ´ëÇÑ Ãâ·ÂÀ¸·Î °°Àº À§Ä¡ ÁöÁ¤ÀÚ¸¦ ¸®ÅÏÇÏ´Â °Íµµ À¯È¿ÇÕ´Ï´Ù.

  3. ÀÔ·Â Àμö·Î Å×À̺í ÇÔ¼ö·Î Àü´ÞµÈ LOB À§Ä¡ ÁöÁ¤ÀÚ´Â Çà »ý¼º ÇÁ·Î¼¼½º ³»³» »ì¾Æ ÀÖ½À´Ï´Ù. ½ÇÁ¦·Î, Å×À̺í ÇÔ¼ö´Â ÇÑ ÇàÀ» »ý¼ºÇÏ´Â µ¿¾È ±×·¯ÇÑ LOB À§Ä¡ ÁöÁ¤ÀÚ¸¦ »ç¿ëÇÏ¿© LOB¿¡ Ãß°¡Çϰí Ãß°¡µÈ ¹ÙÀÌÆ®¸¦ ±× ´ÙÀ½ Çà¿¡¼­ º¼ ¼ö ÀÖ½À´Ï´Ù.

  4. UDF(Å×ÀÌºí ¶Ç´Â ½ºÄ®¶ó ÇÔ¼ö)·ÎºÎÅÍÀÇ LOB À§Ä¡ ÁöÁ¤ÀÚ Ãâ·ÂÀ¸·Î DB2¿¡¼­ ½ÃÀÛµÈ LOB¸¦ ³ªÅ¸³»±â À§ÇÑ ³»ºÎ Á¦¾î ¸ÞÄ«´ÏÁòÀº 1950 ¹ÙÀÌÆ®¸¦ Â÷ÁöÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÀÌÀ¯¿Í Á¤·Ä¿¡ ´ëÇÑ ÀÔ·ÂÀÌ µÇ´Â Çà Å©±âÀÇ ÇѰè·Î ÀÎÇØ, UDF LOB À§Ä¡ ÁöÁ¤Àڷμ­ ½ÃÀ۵Ǵ ¿©·¯°³ÀÇ ±×·¯ÇÑ LOB¸¦ Á¤·ÄÇÏ·Á´Â Á¶È¸´Â ¿¬°üµÈ ´Ù¸¥ Ä÷³ÀÇ Å©±â¿¡ µû¶ó ÇÑ Çà¿¡ (ÃÖ´ë) µÎ °³ÀÇ °ªÀ¸·Î Á¦Çѵ˴ϴÙ. °°Àº Á¦ÇÑÀÌ Å×ÀÌºí¿¡ »ðÀԵǴ Çà¿¡ Àû¿ëµË´Ï´Ù.

LOB À§Ä¡ ÁöÁ¤ÀÚ »ç¿ë¿¡ ´ëÇÑ ½Ã³ª¸®¿À

À̰ÍÀº LOB À§Ä¡ ÁöÁ¤ÀÚÀÇ À¯¿ëÇÔÀ» º¸¿©ÁÖ´Â ¸î °¡Áö °¡´ÉÇÑ ½Ã³ª¸®¿À¿¡ ´ëÇÑ °£·«ÇÑ ¿ä¾àÀÔ´Ï´Ù. ÀÌ ³× °³ÀÇ ½Ã³ª¸®¿À´Â À§Ä¡ ÁöÁ¤ÀÚÀÇ »ç¿ëÀ» ´ë·«ÀûÀ¸·Î º¸¿©ÁÖ¸ç, ¿ä±¸µÇ´Â °ø°£À» Àý¾àÇϰí È¿À²¼ºÀ» Áõ°¡½Ãų ¼ö ÀÖ´Â ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.


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