ÀÌ Àý¿¡¼´Â DB2¿Í UDF°£ÀÇ ÀÎÅÍÆäÀ̽º ¼¼ºÎ»çÇ×°ú ÀÎÅÍÆäÀ̽º¸¦ °ü¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â sqludf.h Include ÆÄÀÏ¿¡ ´ëÇØ ¼³¸íµË´Ï´Ù. ÀÌ Include ÆÄÀÏÀº C ¹× C++ UDF¿¡¸¸ Àû¿ëµË´Ï´Ù. Java·Î UDF¸¦ ÄÚµùÇÏ´Â °Í¿¡ ´ëÇÑ Á¤º¸´Â Java UDF ÄÚµùÀÇ Á¤º¸¸¦ ÂüÁ¶ÇϽʽÿÀ.
DB2´Â ÇÔ¼ö¿¡ ´ëÇÑ DML ÂüÁ¶¿¡¼ ÁöÁ¤µÈ SQL Àμö¿Í ÇÔ²² Ãß°¡ Àμö¸¦ ¿ÜºÎ UDF¿¡ Àü´ÞÇÕ´Ï´Ù. C ¹× C++ÀÇ °æ¿ì, À̵é ÀμöµéÀº Àμö¸¦ UDF·Î Àü´Þ ¼ø¼´ë·Î Àü´ÞµË´Ï´Ù. Java UDF´Â SQL-argument¿Í SQL-result Àμö¸¸À» ÃëÇÏÁö¸¸, ´Ù¸¥ ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ´Ù¸¥ Á¤º¸¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ½À´Ï´Ù. Java UDF´Â ¾Æ·¡¿¡ ¼³¸íµÈ SQL-state¿Í diagnostic-message Àμö¿¡ ´ëÇØ µ¿ÀÏÇÑ Á¦ÇÑ»çÇ×ÀÌ Àû¿ëµË´Ï´Ù. Java·Î UDF¸¦ ÄÚµùÇÏ´Â °Í¿¡ ´ëÇÑ Á¤º¸´Â Java UDF ÄÚµùÀÇ Á¤º¸¸¦ ÂüÁ¶ÇϽʽÿÀ.
Àμö¸¦ UDF·Î Àü´ÞÇϱâ À§ÇÑ ±¸¹® .--------------. V | >>-+----------------------+-----SQL-result---+------------------> | .----------------. | | V | | '----SQL-argument---+--' .------------------. V | >-----+--------------------------+-----SQL-result-ind---+-------> | .--------------------. | | V | | '----SQL-argument-ind---+--' >----SQL-state---function-name---specific-name------------------> >----diagnostic-message---+------------+---+-----------+--------> '-scratchpad-' '-call-type-' >----+--------+------------------------------------------------>< '-dbinfo-'
ÁÖ: | ¿ÜºÎ ÇÔ¼ö·Î Àü´ÞµÈ À§ÀÇ ÀμöµéÀº °¢°¢ ½ÇÁ¦ °ªÀÌ ¾Æ´Ñ ÇØ´ç °ª¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÔ´Ï´Ù. |
ÀÌ ÀμöµéÀº ´ÙÀ½°ú °°½À´Ï´Ù.
DB2´Â µ¥ÀÌÅÍ À¯Çü°ú ¼¹ö Ç÷§Æû¿¡ µû¶ó SQL-argument¿¡ ´ëÇØ µ¥ÀÌÅ͸¦ Á¤·ÄÇÕ´Ï´Ù.
½ºÄ®¶ó ÇÔ¼ö¿Í Å×À̺í ÇÔ¼ö ¸ðµÎÀÇ °æ¿ì, DB2´Â ¹öÆÛ¸¦ ÇÒ´çÇϰí, ÇØ´ç ÁÖ¼Ò¸¦ UDF·Î Àü´ÞÇÕ´Ï´Ù. UDF´Â °¢ °á°ú °ªÀ» ¹öÆÛ¿¡ ³Ö½À´Ï´Ù. ÇØ´ç µ¥ÀÌÅÍ À¯ÇüÀ¸·Î Ç¥ÇöµÈ °ªÀ» Æ÷ÇÔÇϱ⿡ ÃæºÐÇÑ ¹öÆÛ °ø°£ÀÌ DB2¿¡ ÀÇÇØ ÇÒ´çµË´Ï´Ù. ½ºÄ®¶ó ÇÔ¼öÀÇ °æ¿ì, ÀÌ µ¥ÀÌÅÍ À¯ÇüÀº CAST FROMÀýÀÌ ÀÖ´Â °æ¿ì ¿©±â¿¡ Á¤Àǵǰí, CAST FROMÀýÀÌ ¾ø´Â °æ¿ì RETURNSÀý¿¡ Á¤Àǵ˴ϴÙ. Å×À̺í ÇÔ¼öÀÇ °æ¿ì, µ¥ÀÌÅÍ À¯ÇüÀº RETURNS TABLE(...) Àý¿¡ Á¤Àǵ˴ϴÙ. À̵é À¯ÇüÀÌ C ¾ð¾î ±¸Á¶¿¡ ¸ÊÇεǴ ¹æ¹ý¿¡ ´ëÇÑ Á¤º¸´Â SQL µ¥ÀÌÅÍ À¯ÇüÀÌ UDF·Î Àü´ÞµÇ´Â ¹æ¹ýÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
Å×À̺í ÇÔ¼öÀÇ °æ¿ì, DB2´Â ¸ðµç °è»ê °á°ú Ä÷³ÀÌ DB2·Î ¸®Å쵃 Çʿ䰡 ¾ø´Â ¼º´É ÃÖÀûȸ¦ Á¤ÀÇÇÕ´Ï´Ù. ÀÌ ±â´ÉÀ» Ȱ¿ëÇϱâ À§ÇØ UDF¸¦ ÀÛ¼ºÇÏ´Â °æ¿ì, Å×À̺í ÇÔ¼ö¸¦ ÂüÁ¶ÇÏ´Â ¸í·É¹®¿¡ ÇÊ¿äÇÑ Ä÷³¸¸À» ¸®ÅÏÇÕ´Ï´Ù.
100°³ÀÇ °á°ú Ä÷³À» »ç¿ëÇÏ¿© Á¤ÀÇµÈ Å×À̺í ÇÔ¼ö¿¡ ´ëÇÑ CREATE FUNCTION¹®À» ¿¹·Î µì´Ï´Ù. ÀÌ ÇÔ¼ö¸¦ ÂüÁ¶ÇÏ´Â ÇØ´ç ¸í·É¹®ÀÌ ÀÌ Ä÷³µé Áß µÎ °³¿¡¸¸ °ü½ÉÀÌ ÀÖ´Ù¸é, ÀÌ ÃÖÀûÈ ±â´ÉÀ» ÅëÇØ UDF´Â °¢ ¿¿¡ ´ëÇÏ¿© ÀÌµé µÎ °³ÀÇ Ä÷³¸¸À» ¸®ÅÏÇϰí, ³ª¸ÓÁö 98°³ÀÇ Ä÷³¿¡ ´ëÇÏ¿© ½Ã°£À» ¼ÒºñÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ ÃÖÀûÈ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â ¾Æ·¡ÀÇ dbinfo Àμö¸¦ ÂüÁ¶ÇϽʽÿÀ.
¸®ÅÏµÈ °¢ °ª(Áï, ½ºÄ®¶ó ÇÔ¼öÀÇ °æ¿ì ´ÜÀÏ °ªÀ̰í, ÀϹÝÀûÀ¸·Î Å×À̺í ÇÔ¼öÀÇ °æ¿ì º¹¼ö °ª)¿¡ ´ëÇÏ¿©, UDF ÄÚµå´Â µ¥ÀÌÅÍ À¯Çü°ú °á°úÀÇ ±æÀÌ¿¡ ÇÊ¿äÇÑ °Í ÀÌ»óÀ» ¸®ÅÏÇØ¼´Â ¾ÈµË´Ï´Ù. DB2´Â UDF º»¹®ÀÌ °á°ú ¹öÆÛ ³¡À» ³Ñ¾î¼ ±â·ÏµÇ¾ú´ÂÁö ¿©ºÎÀÇ ÆÇº°À» ½ÃµµÇϰí, SQLCODE -450(SQLSTATE 39501)À» ¸®ÅÏÇÕ´Ï´Ù. ±×·¯³ª DB2°¡ Ž»öÇÏÁö ¸øÇÑ UDFÀÇ ÁÖ¿ä °ãÃľ²±â°¡ ¿¹»óÄ¡ ¸øÇÑ °á°ú ¶Ç´Â ºñÁ¤»ó Á¾·á¸¦ ÀÏÀ¸Å³ ¼ö ÀÖ½À´Ï´Ù.
DB2´Â µ¥ÀÌÅÍ À¯Çü°ú ¼¹ö Ç÷§Æû¿¡ µû¶ó SQL-result¿¡ ´ëÇØ µ¥ÀÌÅ͸¦ Á¤·ÄÇÕ´Ï´Ù.
ÇÔ¼ö°¡ NOT NULL CALLÀ» »ç¿ëÇÏ¿© Á¤ÀÇµÈ °æ¿ì, UDF º»¹®Àº ³Î(NULL) °ªÀ» È®ÀÎÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. ±×·¯³ª NULL CALLÀ» »ç¿ëÇÏ¿© Á¤ÀÇµÈ °æ¿ì, ¾î¶² Àμöµç NULLÀÌ µÉ ¼ö ÀÖÀ¸¸ç, UDF´Â À̰ÍÀ» È®ÀÎÇØ¾ß ÇÕ´Ï´Ù.
Ç¥½Ã±â´Â SMALLINT °ªÀÇ ÇüÅÂÀ̸ç, À̰ÍÀº SQL µ¥ÀÌÅÍ À¯ÇüÀÌ UDF·Î Àü´ÞµÇ´Â ¹æ¹ý¿¡ ¼³¸íµÈ ´ë·Î »ç¿ëÀÚ UDF¿¡ Á¤ÀÇµÉ ¼ö ÀÖ½À´Ï´Ù. DB2´Â µ¥ÀÌÅÍ À¯Çü°ú ¼¹ö Ç÷§Æû¿¡ µû¶ó SQL-argument-ind¿¡ ´ëÇØ µ¥ÀÌÅ͸¦ Á¤·ÄÇÕ´Ï´Ù.
ÀÌ Àμö´Â ƯÁ¤ °á°ú °ªÀÌ ³Î(NULL)ÀÎÁö ¿©ºÎ¸¦ ¾Ë¸®±â À§ÇØ UDF¿¡ ÀÇÇØ »ç¿ëµË´Ï´Ù.
DB2´Â ´ÙÀ½ÀÌ ÂüÀÎ °æ¿ì, ÇÔ¼ö °á°ú¸¦ ³Î(-2)·Î Ãë±ÞÇÕ´Ï´Ù.
¶ÇÇÑ NOT NULL CALL ¿É¼ÇÀ» »ç¿ëÇÏ¿© ÇÔ¼ö¸¦ Á¤ÀÇÇÑ °æ¿ìµµ ÂüÀÌ µË´Ï´Ù.
NOT NULL CALLÀ» »ç¿ëÇÏ¿© ÇÔ¼ö°¡ Á¤ÀÇµÈ °æ¿ì¿¡µµ, UDF º»¹®Àº °á°ú Ç¥½Ã±â¸¦ ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ³ª´©±â ÇÔ¼ö´Â ºÐ¸ð°¡ 0ÀÏ ¶§, °á°ú¸¦ ³Î(NULL)·Î ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
Ç¥½Ã±â´Â SMALLINT °ªÀÇ ÇüŸ¦ ¶ì¸ç, À̰ÍÀº SQL µ¥ÀÌÅÍ À¯ÇüÀÌ UDF·Î Àü´ÞµÇ´Â ¹æ¹ý¿¡ ¼³¸íµÈ´ë·Î »ç¿ëÀÚ UDF¿¡ Á¤ÀÇµÉ ¼ö ÀÖ½À´Ï´Ù.
UDF°¡ RESULT Ä÷³ ¸ñ·ÏÀ» »ç¿ëÇÏ¿© Å×À̺í ÇÔ¼ö ÃÖÀûȸ¦ »ç¿ëÇϸé Çʼö Ä÷³¿¡ ÇØ´çµÇ´Â Ç¥½Ã±â¸¸ ¼³Á¤µÇ¾î¾ß ÇÕ´Ï´Ù.
DB2´Â µ¥ÀÌÅÍ À¯Çü°ú ¼¹ö Ç÷§Æû¿¡ µû¶ó SQL-°á°ú-ind¿¡ ´ëÇØ µ¥ÀÌÅ͸¦ Á¤·ÄÇÕ´Ï´Ù.
±âŸ ´Ù¸¥ °ªÀº ¿À·ù »óÅ·Π󸮵Ǿî SQLCODE -463(SQLSTATE 39001)À» ¹ß»ý½Ãŵ´Ï´Ù.
Àü´ÞµÇ´Â ÇÔ¼ö À̸§ÀÇ Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.
<schema-name>.<function-name>
°¢ ºÎºÐÀº ¸¶Ä§Ç¥·Î ±¸ºÐµË´Ï´Ù. ´ÙÀ½°ú °°Àº µÎ °¡Áö ¿¹°¡ ÀÖ½À´Ï´Ù.
PABLO.BLOOP WILLIE.FINDSTRING
ÀÌ Çü½ÄÀ» »ç¿ëÇÏ¿© »ç¿ëÀÚ´Â µ¿ÀÏÇÑ UDF º»¹®À» º¹¼öÀÇ ¿ÜºÎ ÇÔ¼ö¿¡ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, È£ÃâµÉ ¶§ ÀÌ ÇÔ¼öµéÀ» ±¸º°ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÁÖ: | ¿ÀºêÁ§Æ® À̸§°ú ½ºÅ°¸¶ À̸§¿¡ ¸¶Ä§Ç¥¸¦ Æ÷ÇÔ½Ãų ¼ö ÀÖÀ¸³ª, ±ÇÀåµÇÁö´Â ¾Ê½À´Ï´Ù. ¿¹¸¦ µé¾î, ÇÔ¼ö rotate°¡ ½ºÅ°¸¶ obj.op¿¡ ÀÖ´Â °æ¿ì ¸®ÅϵǴ ÇÔ¼ö À̸§Àº obj.op.rotateÀε¥, ÀÌ·¯ÇÑ °æ¿ì, ½ºÅ°¸¶ À̸§ÀÌ objÀÎÁö ¶Ç´Â obj.opÀÎÁö ºÐ¸íÇÏÁö ¾Ê½À´Ï´Ù. |
willie_find_feb99 SQL9904281052440430
ù¹øÂ° °ªÀº »ç¿ëÀÚÀÇ CREATE FUNCTION¹®¿¡¼ »ç¿ëÀÚ°¡ ÁöÁ¤ÇÕ´Ï´Ù. »ç¿ëÀÚ°¡ °ªÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é µÑ° °ªÀº ÇöÀç ½Ã°£¼ÒÀο¡¼ DB2¿¡ ÀÇÇØ »ý¼ºµË´Ï´Ù.
function-name Àμö¿¡¼¿Í °°ÀÌ, ÀÌ °ªÀ» Àü´ÞÇÏ´Â ÀÌÀ¯´Â UDF¿¡°Ô ¾î¶² ¼¼ºÎ ÇÔ¼ö°¡ À̰ÍÀ» È£ÃâÇß´ÂÁö¸¦ Á¤È®È÷ ½Äº°ÇÒ ¼ö ÀÖ´Â ¼ö´ÜÀ» Á¦°øÇϱâ À§ÇÑ °ÍÀÔ´Ï´Ù.
UDF°¡ À§¿¡¼ ¼³¸íÇÑ SQL-state Àμö¸¦ »ç¿ëÇÏ¿© ¿À·ù³ª °æ°í¸¦ ¸®ÅÏÇÒ ¶§, ¿©±â¿¡´Â ¼³¸í Á¤º¸°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. DB2´Â ÀÌ Á¤º¸¸¦ ¸Þ½ÃÁöÀÇ ÅäÅ«À¸·Î Æ÷ÇÔÇÕ´Ï´Ù.
DB2´Â UDF¸¦ È£ÃâÇϱâ Àü¿¡ ù¹øÂ° ¹®ÀÚ¸¦ ³Î(NULL)·Î ¼³Á¤ÇÕ´Ï´Ù. ¸®ÅϽÃ, ÀÌ ¹®ÀÚ¿Àº CÀÇ ³Î(NULL)·Î Á¾·áÇÏ´Â ¹®ÀÚ¿·Î 󸮵˴ϴÙ. ÀÌ ¹®ÀÚ¿Àº ¿À·ù Á¶°ÇÀÇ ÅäÅ«À¸·Î SQLCA¿¡ Æ÷ÇԵ˴ϴÙ. ÃÖ¼ÒÇÑ ÀÌ ¹®ÀÚ¿ÀÇ Ã¹¹øÂ° ºÎºÐÀÌ SQLCA³ª DB2 CLP ¸Þ½ÃÁö¿¡ Ç¥½ÃµË´Ï´Ù. ±×·¯³ª Ç¥½ÃµÇ´Â ½ÇÁ¦ ¹®ÀÚ ¼ö´Â ´Ù¸¥ ÅäÅ«ÀÇ ±æÀÌ¿¡ µû¶ó ´Þ¶óÁö´Âµ¥, À̰ÍÀº DB2°¡ SQLCA°¡ ÁöÁ¤ÇÏ´Â Àüü ÅäÅ« ±æÀÌ¿¡ ´ëÇÑ ÇѰ踦 ÁؼöÇϱâ À§ÇØ ÅäÅ«À» Àý´ÜÇÒ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù. X'FF'´Â SQLCA¿¡¼ ÅäÅ«À» ±¸ºÐÇÏ´Â µ¥ »ç¿ëµÇ¹Ç·Î, ÅØ½ºÆ®¿¡¼´Â ÀÌ ¹®ÀÚ¸¦ »ç¿ëÇÏÁö ¸¶½Ê½Ã¿À.
UDF ÄÚµå´Â Àü´ÞµÈ VARCHAR(70) ¹öÆÛÀÇ ¿ë·®º¸´Ù ´õ ¸¹Àº ÅØ½ºÆ®¸¦ ¸®ÅÏÇØ¼´Â ¾ÈµË´Ï´Ù. DB2´Â UDF º»¹®ÀÌ ÀÌ ¹öÆÛ ³¡ ³Ê¸Ó¿¡ ±â·ÏµÇ¾ú´ÂÁö ¿©ºÎÀÇ ÆÇº°À» ½ÃµµÇϰí, SQLCODE -450(SQLSTATE 39501)À» ¸®ÅÏÇÕ´Ï´Ù. ±×·¯³ª UDF¿¡ ÀÇÇÑ °ãÃľ²±â´Â DB2¿¡ ÀÇÇØ ¹ß°ßµÇÁö ¾ÊÀ» ¼öµµ ÀÖÀ¸¹Ç·Î, ¿¹»óÄ¡ ¸øÇÑ °á°ú³ª ÀÌ»ó Á¾·á¸¦ À¯¹ßÇÒ ¼ö ÀÖ½À´Ï´Ù.
DB2´Â UDF¿¡¼ DB2·Î ¸®ÅϵǴ ¸Þ½ÃÁö ÅäÅ«Àº µ¥ÀÌÅͺ£À̽º¿Í °°Àº ÄÚµå ÆäÀÌÁö¿¡ ÀÖ´Â °ÍÀ¸·Î °£ÁÖÇÕ´Ï´Ù. »ç¿ëÀÚÀÇ UDF´Â ÀÌ »ç½ÇÀ» È®ÀÎÇØ¾ß ÇÕ´Ï´Ù. »ç¿ëÀÚ°¡ 7 ºñÆ® ºÒº¯ ASCII ºÎ¼Ó ÁýÇÕÀ» »ç¿ëÇÏ´Â °æ¿ì, »ç¿ëÀÚÀÇ UDF´Â ¾î¶² ÄÚµå ÆäÀÌÁö·Îµç ¸Þ½ÃÁö ÅäÅ«À» ¸®ÅÏÇÒ ¼ö ÀÖ½À´Ï´Ù.
½ºÄ®¶ó ÇÔ¼öÀÇ °æ¿ì, ù¹øÂ° È£Ãâ ÀÌÀü¿¡ ÃʱâȵǸç, º¸Åë ±× ÀÌÈÄ¿¡ DB2¿¡ ÀÇÇØ °Ë»öµÇ°Å³ª ¼öÁ¤µÇÁö ¾Ê½À´Ï´Ù.
Å×À̺í ÇÔ¼öÀÇ °æ¿ì, CREATE FUNCTION¿¡ FINAL CALLÀÌ ÁöÁ¤µÈ °æ¿ì, À§¿¡¼¿Í °°ÀÌ UDF·ÎÀÇ Ã¹¹øÂ° È£Ãâ ÀÌÀü¿¡ Ãʱâȵ˴ϴÙ. ÀÌ È£Ãâ ÀÌÈÄ ½ºÅ©·¡Ä¡ ÆÐµå ³»¿ëÀº ¿ÏÀüÈ÷ Å×À̺í ÇÔ¼öÀÇ Á¦¾î ÇÏ¿¡ ³õÀÌ°Ô µË´Ï´Ù.
NO FINAL CALLÀÌ ÁöÁ¤µÇ¾ú°Å³ª Å×À̺í ÇÔ¼öÀÇ µðÆúÆ®ÀÎ °æ¿ì, ½ºÅ©·¡Ä¡ ÆÐµå´Â À§¿¡¼¿Í °°ÀÌ °¢ OPEN È£Ãâ¿¡ ´ëÇÏ¿© Ãʱ⼳Á¤µÇ°í, ½ºÅ©·¡Ä¡ ÆÐµå ³»¿ëÀº OPEN È£Ãâµé »çÀÌ¿¡¼ Å×À̺í ÇÔ¼öÀÇ Á¦¾î¸¦ ¹Þ°ÔµË´Ï´Ù. À̰ÍÀº Á¶ÀÎÀ̳ª ºÎ¼Ó Á¶È¸¿¡¼ »ç¿ëµÇ´Â Å×À̺í ÇÔ¼öÀÇ °æ¿ì ¸Å¿ì Áß¿äÇÕ´Ï´Ù. ¿©·¯°³ÀÇ OPEN È£Ãâµé¿¡¼ ½ºÅ©·¡Ä¡ ÆÐµåÀÇ ³»¿ëÀ» À¯Áöº¸¼öÇÒ Çʿ䰡 ÀÖ´Â °æ¿ì, »ç¿ëÀÚÀÇ CREATE FUNCTION¹®¿¡ FINAL CALLÀ» ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù. ÀϹÝÀûÀÎ OPEN, FETCH ¹× CLOSE È£Ãâ°ú ÇÔ²² FINAL CALLÀ» ÁöÁ¤Çϸé, ½ºÅ©·¡Ä¡ ÆÐµå À¯Áöº¸¼ö ¹× ÀÚ¿ø ¸±¸®½ºÀÇ ¸ñÀûÀ¸·Î Å×À̺í ÇÔ¼ö ¿ª½Ã FIRST¿Í FINAL È£ÃâÀ» ¼ö½ÅÇÏ°Ô µË´Ï´Ù.
Àü´ÞµÈ Àμö°¡ °°Àº ±¸Á¶¸¦ °¡Áö°í ÀÖÀ¸¹Ç·Î, CLOB³ª BLOB Áß Çϳª¿Í µ¿ÀÏÇÑ À¯ÇüÀ» »ç¿ëÇÏ¿© UDF¿¡ ½ºÅ©·¡Ä¡ ÆÐµå¸¦ ¸ÊÇÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº SQL µ¥ÀÌÅÍ À¯ÇüÀÌ UDF·Î Àü´ÞµÇ´Â ¹æ¹ýÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
UDF ÄÚµå´Â ½ºÅ©·¡Ä¡ ÆÐµå ¹öÆÛ ¿ÜºÎ¿¡¼´Â º¯°æÀ» ¼öÇàÇÏÁö ¾ÊÀ½À» ÁÖÀÇÇϽʽÿÀ. DB2´Â UDF º»¹®ÀÌ ÀÌ ¹öÆÛ ³¡ ÀÌÈÄ·Î ±â·ÏÇß´ÂÁö¸¦ ¸î ¸î ¹®ÀÚ, SQLCODE -450(SQLSTATE 39501)À¸·Î ÆÇº°ÇÏ·Á Çϴµ¥, UDF¿¡ ÀÇÇÑ ÁÖ¿ä °ãÃľ²±â°¡ ¿¹»óÄ¡ ¸øÇÑ °á°ú³ª ÀÌ»ó Á¾·á¸¦ ¹ß»ý½Ãų ¼ö ÀÖÀ¸¸ç, ¹ß»ýµÇ´Â Àå¾Ö°¡ DB2¿¡¼ Çã¿ëµÇÁö ¾Ê´Â °ÍÀÏ ¼ö ÀÖ½À´Ï´Ù.
½ºÅ©·¡Ä¡ ÆÐµå¸¦ »ç¿ëÇÏ´Â ½ºÄ®¶ó UDF°¡ ºÎ¼Ó Á¶È¸¿¡¼ ÂüÁ¶µÈ °æ¿ì, DB2´Â ºÎ¼Ó Á¶È¸ È£Ãâµé »çÀÌ¿¡¼ ½ºÅ©·¡Ä¡ ÆÐµå¸¦ »õ·Î °íÄ¡±â·Î °áÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ »õ·Î °íħÀº UDF¿¡ FINAL CALLÀÌ ÁöÁ¤µÈ °æ¿ì, ÃÖÁ¾ È£ÃâÀÌ ÀÌ·ç¾îÁø ÈÄ¿¡ ¹ß»ýÇÕ´Ï´Ù.
DB2´Â µ¥ÀÌÅÍ Çʵ尡 µ¥ÀÌÅÍ À¯ÇüÀÇ ÀúÀå¿¡ ´ëÇØ Á¤·ÄµÇµµ·Ï ½ºÅ©·¡Ä¡ ÆÐµå¸¦ ÃʱâÈÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÏ¸é ±æÀÌ Çʵ带 Æ÷ÇÔÇÑ Àüü ½ºÅ©·¡Ä¡ ÆÐµå°¡ Á¦´ë·Î Á¤·ÄµÇÁö ¾Ê½À´Ï´Ù. ½ºÅ©·¡Ä¡ ÆÐµå ¼±¾ð ¹× ¾×¼¼½º¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº 32-ºñÆ® ¹× 64-ºñÆ® Ç÷§Æû¿¡¼ÀÇ ½ºÅ©·¡Ä¡ ÆÐµå ÀÛ¼ºÀ» ÂüÁ¶ÇϽʽÿÀ.
ÇöÀç »ç¿ëÇÒ ¼ö ÀÖ´Â ¸ðµç °ªµéÀÌ ¾Æ·¡¿¡ ³ª¿µÇ¾î À־, »ç¿ëÀÚÀÇ UDF¿¡ "if A do AA, else if B do BB, else it must be C so do CC" À¯ÇüÀÇ ³í¸®°¡ ¾Æ´Ñ, ¿¹»óµÇ´Â ¸ðµç °ªµéÀ» ¸í¹éÇÏ°Ô Å×½ºÆ®ÇÏ´Â switch³ª case¹®ÀÌ Æ÷ÇԵǾî¾ß ÇÕ´Ï´Ù. À̰ÍÀº Ãß°¡ÀûÀΠȣÃâ À¯ÇüÀÌ ¾ÕÀ¸·Î Ãß°¡µÉ ¼öµµ ÀÖÀ¸¸ç, ¸í¹éÇÏ°Ô Á¶°Ç C¿¡ ´ëÇÏ¿© Å×½ºÆ®ÇÏÁö ¾Ê´Â °æ¿ì, »õ·Î¿î °¡´É¼ºÀÌ Ãß°¡µÉ ¶§ ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.
ÁÖ:
½ºÄ®¶ó ÇÔ¼ö¿¡ ´ëÇØ call-type¿¡´Â ´ÙÀ½ÀÌ Æ÷ÇԵ˴ϴÙ.
SCRATCHPAD°¡ ÁöÁ¤µÇ¾úÀ¸³ª FINAL CALLÀÌ ÁöÁ¤µÇÁö ¾ÊÀº °æ¿ì, UDF´Â ÃÖÃÊÀÇ È£ÃâÀ» ½Äº°Çϱâ À§ÇÑ ÀÌ·¯ÇÑ call-type Àμö¸¦ °®Áö ¾Ê½À´Ï´Ù. ´ë½Å ½ºÅ©·¡Ä¡ ÆÐµåÀÇ ¿ÏÀü Á¦·Î(all-zero) »óÅ¿¡ ÀÇÁ¸ÇØ¾ß ÇÕ´Ï´Ù.
ÀÚ¿ø ¸±¸®½º
½ºÄ®¶ó UDF´Â ¿¹¸¦ µé¾î ¸Þ¸ð¸®¿Í °°Àº ÀÚ½ÅÀÌ ÇÊ¿ä·Î Çß´ø ÀÚ¿øÀ» ¸±¸®½ºÇÏ°Ô µË´Ï´Ù. FINAL CALLÀÌ UDF¿¡ ÁöÁ¤µÇ¸é, SCRATCHPADµµ ¿ª½Ã ÁöÁ¤µÇ°í ÀÚ¿øÀ» ÃßÀûÇÏ´Â µ¥ »ç¿ëµÈ °æ¿ì, ÇØ´ç FINAL È£ÃâÀÌ ÀÚ¿øÀ» ¸±¸®½ºÇÏ´Â À§Ä¡°¡ µË´Ï´Ù. FINAL CALLÀÌ ÁöÁ¤µÇÁö ¾ÊÀº °æ¿ì, ȹµæÇÑ ÀÚ¿øÀº µ¿ÀÏÇÑ È£Ãâ¿¡¼ ¸±¸®½ºµÇ¾î¾ß ÇÕ´Ï´Ù.
Å×À̺í ÇÔ¼öÀÇ °æ¿ì call-type¿¡´Â ´ÙÀ½ÀÌ Æ÷ÇԵ˴ϴÙ.
Á¶ÀÎÀ̳ª ºÎ¼Ó Á¶È¸¸¦ »ç¿ëÇÏ´Â °æ¿ì, OPEN/FETCH.../CLOSE È£Ãâ ÀýÂ÷´Â ¸í·É¹® ½ÇÇà ³»¿¡¼ ¹Ýº¹µÉ ¼ö ÀÖÀ¸³ª, ´Ü ÇϳªÀÇ FIRST È£Ãâ°ú ´Ü ÇϳªÀÇ FINAL È£Ã⸸ÀÌ ÀÖ½À´Ï´Ù. FIRST¿Í FINAL È£ÃâÀº ÇØ´ç Å×À̺í ÇÔ¼ö¿¡ ´ëÇÏ¿© FINAL CALLÀÌ ÁöÁ¤µÈ °æ¿ì¿¡¸¸ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÚ¿ø ¸±¸®½º
UDF¸¦ ÀÛ¼ºÇÏ¿© È®º¸ÇÑ ÀÚ¿øÀ» ¸±¸®½ºÇϽʽÿÀ. Å×À̺í ÇÔ¼öÀÇ °æ¿ì, ÀÌ ¸±¸®½º¿¡´Â CLOSE È£Ãâ°ú FINAL È£ÃâÀÇ µÎ °¡Áö ¹ß»ý À§Ä¡°¡ ÀÖ½À´Ï´Ù. CLOSE È£ÃâÀº °¢°¢ÀÇ OPEN È£Ãâ°ú ¦À» ÀÌ·ç¸ç, ¸í·É¹® ½ÇÇà½Ã ¿©·¯¹ø ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. FINAL È£ÃâÀº UDF¿¡ FINAL CALLÀÌ ÁöÁ¤µÇ¾î ÀÖ´Â °æ¿ì ¹ß»ýÇÒ ¼ö ÀÖÀ¸¸ç, ¸í·É¹®¿¡¼ ÇÑ ¹ø¸¸ ¹ß»ýÇÕ´Ï´Ù.
UDFÀÇ ¸ðµç OPEN/FETCH/CLOSE ÀýÂ÷¿¡ ÀÚ¿øÀ» Àû¿ëÇÒ ¼ö ÀÖ´Â °æ¿ì, FIRST È£Ãâ¿¡¼ ÀÚ¿øÀ» È®º¸Çϰí FINAL È£Ãâ¿¡¼ À̰ÍÀ» ÇØÁ¦Çϵµ·Ï UDF¸¦ ÀÛ¼ºÇϽʽÿÀ. ½ºÅ©·¡Ä¡ ÆÐµå´Â ÀÌ ÀÚ¿øÀ» ÃßÀûÇϱâ À§ÇÑ ¹ß»ý À§Ä¡ÀÔ´Ï´Ù. Å×À̺í ÇÔ¼öÀÇ °æ¿ì, FINAL CALLÀÌ ÁöÁ¤µÈ °æ¿ì, FIRST È£Ãâ ÀÌÀü¿¡¸¸ ½ºÅ©·¡Ä¡ ÆÐµå°¡ Ãʱâȵ˴ϴÙ. FINAL CALLÀÌ ÁöÁ¤µÇÁö ¾ÊÀº °æ¿ì, °¢ OPEN È£Ãâ Àü¿¡ ´Ù½Ã Ãʱâȵ˴ϴÙ.
ÀÚ¿øÀÌ OPEN/FETCH/CLOSE ÀýÂ÷¿¡ °íÀ¯ÇÑ °æ¿ì, CLOSE È£Ãâ½Ã ÀÚ¿øÀ» ÇØÁ¦Çϵµ·Ï UDF¸¦ ÀÛ¼ºÇϽʽÿÀ. Å×À̺í ÇÔ¼ö°¡ ºÎ¼Ó Á¶È¸³ª Á¶ÀÎ ³»¿¡ ÀÖ´Â °æ¿ì, DB2 ÃÖÀûÈ ¾Ë°í¸®ÁòÀÌ ¸í·É¹® ½ÇÇàÀ» Á¶Á÷ÈÇϱâ À§ÇØ ¼±ÅÃÇÏ´Â ¹æ¹ý¿¡ µû¶ó, OPEN/FETCH/CLOSE°¡ ¿©·¯ ¹ø ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.
µ¥ÀÌÅͺ£À̽º À̸§ÀÇ ±æÀÌ´Â ´ÙÀ½°ú °°½À´Ï´Ù. ÀÌ Çʵå´Â ºÎÈ£¾ø´Â short Á¤¼öÀÔ´Ï´Ù.
ÇöÀç ¿¬°áµÈ µ¥ÀÌÅͺ£À̽ºÀÇ À̸§. ÀÌ Çʵå´Â 128ÀÚÀÇ ±ä ½Äº°ÀÚÀÔ´Ï´Ù. À§¿¡¼ ¼³¸íÇÑ µ¥ÀÌÅͺ£À̽º À̸§ ±æÀÌ Çʵå´Â ÀÌ ÇʵåÀÇ ½ÇÁ¦ ±æÀ̸¦ ½Äº°ÇÕ´Ï´Ù. ¿©±â¿¡´Â ³Î(NULL) Á¾·áÀÚ³ª ÆÐµùÀÌ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù.
¾Æ·¡ÀÇ ÀÀ¿ëÇÁ·Î±×·¥ ±ÇÇÑ ºÎ¿© IDÀÇ ±æÀÌ. ÀÌ Çʵå´Â ºÎÈ£¾ø´Â short Á¤¼öÀÔ´Ï´Ù.
ÀÀ¿ëÇÁ·Î±×·¥ ·±Å¸ÀÓ ±ÇÇÑ ºÎ¿© ID. ÀÌ Çʵå´Â 128ÀÚÀÇ ±ä ½Äº°ÀÚÀÔ´Ï´Ù. ¿©±â¿¡´Â ³Î(NULL) Á¾·áÀÚ³ª ÆÐµùÀÌ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. À§¿¡¼ ¼³¸íÇÑ ÀÀ¿ëÇÁ·Î±×·¥ ±ÇÇÑ ºÎ¿© ID ±æÀÌ Çʵå´Â ÀÌ ÇʵåÀÇ ½ÇÁ¦ ±æÀ̸¦ ½Äº°ÇÕ´Ï´Ù.
À̰ÍÀº 48 ¹ÙÀÌÆ® ±æÀÌÀÇ ±¸Á¶ µÎ °³·Î ±¸¼ºµÈ À¯´Ï¿ÂÀ¸·Î Çϳª´Â DB2 Universal Database¿¡ ÀÇÇØ »ç¿ëµÇ°í ´Ù¸¥ Çϳª´Â Â÷ÈÄ »ç¿ëÀ» À§ÇØ ¿¹¾àµÈ °ÍÀÔ´Ï´Ù. DB2 Universal Database¿¡ ÀÇÇØ »ç¿ëµÇ´Â ±¸Á¶¿¡´Â ´ÙÀ½°ú °°Àº Çʵ尡 Æ÷ÇԵ˴ϴÙ.
¾Æ·¡ÀÇ ½ºÅ°¸¶ À̸§ÀÇ ±æÀÌ. Å×À̺í À̸§ÀÌ Àü´ÞµÇÁö ¾ÊÀ¸¸é 0ÀÌ Æ÷ÇԵ˴ϴÙ. ÀÌ Çʵå´Â ºÎÈ£¾ø´Â short Á¤¼öÀÔ´Ï´Ù.
¾Æ·¡ÀÇ Å×À̺í À̸§¿¡ ´ëÇÑ ½ºÅ°¸¶. ÀÌ Çʵå´Â 128ÀÚÀÇ ±ä ½Äº°ÀÚÀÔ´Ï´Ù. ¿©±â¿¡´Â ³Î(NULL) Á¾·áÀÚ³ª ÆÐµùÀÌ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. À§¿¡¼ ¼³¸íÇÑ ½ºÅ°¸¶ À̸§ ±æÀÌ Çʵå´Â ÀÌ ÇʵåÀÇ ½ÇÁ¦ ±æÀ̸¦ ½Äº°ÇÕ´Ï´Ù.
¾Æ·¡ÀÇ Å×À̺í À̸§ÀÇ ±æÀÌ. Å×À̺í À̸§ÀÌ Àü´ÞµÇÁö ¾ÊÀ¸¸é 0ÀÌ Æ÷ÇԵ˴ϴÙ. ÀÌ Çʵå´Â ºÎÈ£¾ø´Â short Á¤¼öÀÔ´Ï´Ù.
À̰ÍÀº °»½ÅµÇ°Å³ª »ðÀԵǴ Å×À̺íÀÇ À̸§ÀÔ´Ï´Ù. ÀÌ Çʵå´Â UDF ÂüÁ¶°¡ UPDATE¹®¿¡¼ SETÀýÀÇ ¿À¸¥ÂÊ¿¡ Àְųª INSERT¹®ÀÇ VALUES ¸ñ·ÏÀÇ Ç׸ñÀÎ °æ¿ì¿¡¸¸ ¼³Á¤µË´Ï´Ù. ÀÌ Çʵå´Â 128ÀÚÀÇ ±ä ½Äº°ÀÚÀÔ´Ï´Ù. ¿©±â¿¡´Â ³Î(NULL) Á¾·áÀÚ³ª ÆÐµùÀÌ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. À§¿¡¼ ¼³¸íÇÑ Å×À̺í À̸§ ±æÀÌ Çʵå´Â ÀÌ ÇʵåÀÇ ½ÇÁ¦ ±æÀ̸¦ ½Äº°ÇÕ´Ï´Ù. À§ÀÇ ½ºÅ°¸¶ À̸§ Çʵå´Â ÀÌ Çʵå¿Í ÇÔ²² ¿ÏÀüÇÑ Å×À̺í À̸§À» ±¸¼ºÇÕ´Ï´Ù.
¾Æ·¡ÀÇ Ä÷³ À̸§ÀÇ ±æÀÌ. Ä÷³ À̸§ÀÌ Àü´ÞµÇÁö ¾ÊÀ¸¸é 0ÀÌ Æ÷ÇԵ˴ϴÙ. ÀÌ Çʵå´Â ºÎÈ£¾ø´Â short Á¤¼öÀÔ´Ï´Ù.
Å×À̺í À̸§°ú ¿ÏÀüÈ÷ ¶È°°Àº Á¶°Ç ÇÏ¿¡¼, ÀÌ Çʵå´Â °»½ÅµÇ°Å³ª »ðÀԵǴ Ä÷³ÀÇ À̸§ÀÌ Æ÷ÇԵǸç, ±×·¸Áö ¾ÊÀº °æ¿ì ¿¹ÃøÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ Çʵå´Â 128ÀÚÀÇ ±ä ½Äº°ÀÚÀÔ´Ï´Ù. ¿©±â¿¡´Â ³Î(NULL) Á¾·áÀÚ³ª ÆÐµùÀÌ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. À§¿¡¼ ¼³¸íÇÑ Ä÷³ À̸§ ±æÀÌ Çʵå´Â ÀÌ ÇʵåÀÇ ½ÇÁ¦ ±æÀ̸¦ ½Äº°ÇÕ´Ï´Ù.
Á¦Ç°°ú À̰ÍÀÇ ¹öÀü, ¸±¸®½º ¹× ¼öÁ¤ ·¹º§À» ½Äº°ÇÏ´Â 8ÀÚ Çʵå·Î, Çü½ÄÀº pppvvrrmÀÌ°í ¿©±â¿¡¼,
ÀÀ¿ëÇÁ·Î±×·¥ ¼¹ö¿¡ ´ëÇÑ ¿î¿µ Ç÷§ÆûÀº ´ÙÀ½°ú °°½À´Ï´Ù.
À§ ¸ñ·Ï¿¡ ¾ø´Â ±âŸ Ç÷§ÆûÀÇ °æ¿ì, sqludf.h ÆÄÀÏÀ» ÂüÁ¶ÇϽʽÿÀ.
¾Æ·¡ÀÇ Å×À̺í ÇÔ¼ö Ä÷³ ¸ñ·Ï¿¡ ÁöÁ¤µÈ Å×À̺í ÇÔ¼ö Ä÷³ ¸ñ·ÏÀÇ 0ÀÌ ¾Æ´Ñ Ç׸ñÀÇ ¼ö.
ÀÌ Çʵå´Â Â÷ÈÄ »ç¿ëÀ» À§ÇÑ °ÍÀÔ´Ï´Ù. À̰ÍÀº 24 ¹®ÀÚ ±æÀÌ·Î Á¤Àǵ˴ϴÙ.
À̰ÍÀÌ Å×À̺í ÇÔ¼öÀÎ °æ¿ì, ÀÌ Çʵå´Â DB2¿¡ ÀÇÇØ µ¿ÀûÀ¸·Î ÇÒ´çµÇ´Â short Á¤¼ö ¹è¿¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÔ´Ï´Ù. ½ºÄ®¶ó ÇÔ¼öÀÎ °æ¿ì, ÀÌ Æ÷ÀÎÅÍ´Â ³Î(NULL)ÀÔ´Ï´Ù.
ÀÌ Çʵå´Â Å×À̺í ÇÔ¼ö¿¡ ´ëÇØ¼¸¸ »ç¿ëµË´Ï´Ù. nÀÌ Å×À̺í ÇÔ¼ö Ä÷³ ¸ñ·Ï Ç׸ñ ¼ö ÇʵåÀÎ numtfcol¿¡ ÁöÁ¤µÇ¾î Àִ ù¹øÂ° n Ç׸ñ¸¸ÀÌ °ü°è°¡ ÀÖ½À´Ï´Ù. nÀº 0À̰ųª CREATE FUNCTION¹®ÀÇ RETURNS TABLE(...)ÀýÀÇ ÇÔ¼ö¿¡ Á¤ÀÇµÈ °á°ú Ä÷³ÀÇ ¼ö¿Í °°°Å³ª À̺¸´Ù ÀÛ½À´Ï´Ù. ÀÌ °ªµéÀº ÀÌ ¸í·É¹®ÀÌ Å×À̺í ÇÔ¼ö·ÎºÎÅÍ ÇÊ¿ä·Î ÇÏ´Â Ä÷³ÀÇ ¼ø¹ø¿¡ ´ëÀÀµË´Ï´Ù. Áï, '1' °ªÀº ù¹øÂ°·Î Á¤ÀÇµÈ °á°ú Ä÷³À» ÀǹÌÇϸç, '2'´Â µÎ¹øÂ°·Î Á¤ÀÇµÈ °á°ú Ä÷³À» ÀǹÌÇϰí, ÀÌ °ªÀº ¾î¶² ¼ø¼µµ °¡´ÉÇÕ´Ï´Ù. nÀÌ 0ÀÏ ¼ö ÀÖÀ½¿¡ ÁÖÀÇÇϽʽÿÀ. Áï, Á¶È¸°¡ ½ÇÁ¦ Ä÷³ °ªÀ» ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â SELECT COUNT(*) FROM TABLE(TF(...)) AS QQ¿Í À¯»çÇÑ ¸í·É¹®¿¡ ´ëÇÏ¿© º¯¼ö numtfcolÀÌ 0ÀÏ ¼öµµ ÀÖ½À´Ï´Ù.
ÀÌ ¹è¿Àº ÃÖÀûÈ¿¡ ´ëÇÑ ±âȸ¸¦ ³ªÅ¸³À´Ï´Ù. UDF´Â Å×À̺í ÇÔ¼öÀÇ ¸ðµç °á°ú Ä÷³¿¡ ´ëÇÑ ¸ðµç °ªÀ» ¸®ÅÏÇÒ Çʿ䰡 ¾øÀ¸¸ç, ƯÁ¤ ¹®¸Æ¿¡¼ ÇÊ¿ä·Î ÇÏ´Â °ªµé¸¸À» ¸®ÅÏÇϸç, À̰ÍÀº ¹è¿¿¡¼ ¼ýÀÚ¿¡ ÀÇÇØ ½Äº°µÇ´Â Ä÷³ÀÔ´Ï´Ù. ÀÌ ÃÖÀûȰ¡ ¼º´ÉÀ» Çâ»ó½Ã۱â À§ÇØ UDF ³í¸®¸¦ º¹ÀâÇÏ°Ô ÇÒ ¼ö ÀÖÀ¸¹Ç·Î, UDF´Â ¸ðµç °è»ê °á°ú Ä÷³À» ¸®ÅÏÇÏ´Â °ÍÀ¸·Î ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ Çʵå´Â ÀÀ¿ëÇÁ·Î±×·¥°ú DB2ÀÇ ¿¬°áÀ» °íÀ¯ÇÏ°Ô ½Äº°ÇÏ´Â CÀÇ ³Î(NULL) Á¾·á ¹®ÀÚ¿¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÔ´Ï´Ù. À̰ÍÀº °¢°¢ÀÇ µ¥ÀÌÅͺ£À̽º ¿¬°á½Ã ´Ù½Ã »ý¼ºµË´Ï´Ù.
¹®ÀÚ¿Àº ÃÖ´ë 32ÀÚ ±æÀÌÀ̸ç, Á¤È®ÇÑ Çü½ÄÀº Ŭ¶óÀÌ¾ðÆ®¿Í DB2°£¿¡ ¼³Á¤µÈ ¿¬°á À¯Çü¿¡ µû¶ó ´Ù¸¨´Ï´Ù. ÀϹÝÀûÀ¸·Î Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.
<x>.<y>.<ts>
¿©±â¿¡¼ <x>¿Í <y>´Â ¿¬°á À¯Çü¿¡ µû¶ó ´Ù¸£Áö¸¸, <ts>´Â 12ÀÚÀÇ YYMMDDHHMMSS Çü½ÄÀÇ ½Ã°£¼ÒÀÎÀ¸·Î ÀáÀçÀûÀ¸·Î DB2¿¡ ÀÇÇØ °íÀ¯ÇÑ »óŸ¦ À¯ÁöÇϵµ·Ï Á¶Á¤µË´Ï´Ù.
¿¹: *LOCAL.db2inst.980707130144
ÀÌ Çʵå´Â Â÷ÈÄ »ç¿ëÀ» À§ÇÑ °ÍÀÔ´Ï´Ù. À̰ÍÀº 20 ¹®ÀÚ ±æÀÌ·Î Á¤Àǵ˴ϴÙ.
´ÙÀ½Àº À§¿¡¼ ¼³¸íµÈ Àμöµé¿¡ ´ëÇÑ ¿ä¾à ¹× DB2¿Í ¿ÜºÎ UDF°£ÀÇ ÀÎÅÍÆäÀ̽º¿¡¼ À̵éÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.
½ºÄ®¶ó ÇÔ¼öÀÇ °æ¿ì Àμö´Â ´ÙÀ½°ú °°½À´Ï´Ù.
ÀÌ Àμö´Â ÇÔ¼ö ÂüÁ¶¿¡¼ ½Äº°µÈ °ªÀ» DB2¿¡¼ UDF·Î Àü´ÞÇÕ´Ï´Ù. °¢ SQL Àμö¿¡ À̵é Àμöµé Áß Çϳª°¡ ÀÖ½À´Ï´Ù.
ÀÌ Àμö´Â UDF¿¡ ÀÇÇØ »ý¼ºµÈ °á°ú °ªÀ» DB2 ¹× ÇÔ¼ö ÂüÁ¶°¡ ¹ß»ýÇÏ´Â SQL¹®À¸·Î Àü´ÞÇÕ´Ï´Ù.
ÀÌ Àμö´Â À§Ä¡¿¡ ÀÖ¾î¼ SQL-argument¿¡ ´ëÀÀÇϰí, ƯÁ¤ Àμö°¡ ³Î(NULL)ÀÎÁö ¿©ºÎ¸¦ UDF¿¡ ¾Ë·ÁÁÝ´Ï´Ù. °¢ SQL-argument¿¡ À̵é Àμöµé Áß Çϳª°¡ ÀÖ½À´Ï´Ù.
ÀÌ Àμö´Â ÇÔ¼ö °á°ú SQL-result¿¡ ³Î(NULL)ÀÌ µé¾î ÀÖ´ÂÁö ¿©ºÎ¸¦ ´Ù½Ã DB2¿¡ º¸°íÇϱâ À§ÇØ UDF°¡ »ç¿ëÇÕ´Ï´Ù.
ÀÌ ÀμöµéÀº ¿¹¿Ü Á¤º¸¸¦ ´Ù½Ã DB2·Î ¾Ë¸®±â À§ÇØ UDF¿¡ ÀÇÇØ »ç¿ëµË´Ï´Ù.
ÀÌ ÀμöµéÀº ÂüÁ¶µÈ ÇÔ¼öÀÇ ½Äº°ÀÚ¸¦ UDF·Î Àü´ÞÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù.
ÀÌ ÀμöµéÀº È£Ãâ°ú È£Ãâ »çÀÌ¿¡¼ UDF »óÅ ÀúÀåÀ» °ü¸®ÇÏ´Â µ¥ DB2¿¡ ÀÇÇØ »ç¿ëµË´Ï´Ù. DB2¿¡ ÀÇÇØ ½ºÅ©·¡Ä¡ ÆÐµå°¡ ÀÛ¼ºµÇ°í ÃʱâȵǸç, UDF°¡ À̸¦ °ü¸®ÇÕ´Ï´Ù. DB2´Â call-type Àμö¸¦ »ç¿ëÇÏ¿© UDF·Î È£Ãâ À¯ÇüÀ» ½ÅÈ£ÇÕ´Ï´Ù.
DB2¿¡ ÀÇÇØ UDF·Î Àü´ÞµÇ´Â, Ãß°¡ Á¤º¸¸¦ ´ã°í ÀÖ´Â ±¸Á¶.
Å×À̺í ÇÔ¼ö´Â ³í¸®ÀûÀ¸·Î À̰ÍÀ» ÂüÁ¶ÇÏ´Â SQL¹®À¸·Î Å×À̺íÀ» ¸®ÅÏÇÏÁö¸¸, DB2¿Í Å×À̺í ÇÔ¼ö°£ÀÇ ½ÇÁ¦ ÀÎÅÍÆäÀ̽º´Â Çà ´ÜÀ§ÀÔ´Ï´Ù. Å×À̺í ÇÔ¼öÀÇ °æ¿ì, Àμö´Â ´ÙÀ½°ú °°½À´Ï´Ù.
ÀÌ Àμö´Â ÇÔ¼ö ÂüÁ¶¿¡¼ ½Äº°µÈ °ªÀ» DB2¿¡¼ UDF·Î Àü´ÞÇÕ´Ï´Ù. ÀÌ Àμö´Â OPEN ¹× FIRST È£Ãâ¿¡¼¿Í °°ÀÌ FETCH È£Ãâ¿¡ ´ëÇÏ¿© µ¿ÀÏÇÑ °ªÀ» °®½À´Ï´Ù. °¢ SQL Àμö¿¡ À̵é Áß Çϳª°¡ ÀÖ½À´Ï´Ù.
ÀÌ Àμö´Â UDF¿¡ ÀÇÇØ ¸®ÅϵǴ Çà¿¡ ´ëÇÑ °¢ Ä÷³ °ªÀ» ´Ù½Ã Àü´ÞÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. CREATE FUNCTION¹®ÀÇ RETURNS TABLE (...) Àý¿¡ Á¤ÀÇµÈ °¢ °á°ú Ä÷³ °ª¿¡ ´ëÇÏ¿© À̵é Àμöµé Áß Çϳª°¡ ÀÛ½À´Ï´Ù.
ÀÌ Àμö´Â À§Ä¡¿¡ ÀÖ¾î¼ SQL-argument °ª¿¡ ´ëÀÀÇϰí, ƯÁ¤ Àμö°¡ ³Î(NULL)ÀÎÁö ¿©ºÎ¸¦ UDF¿¡°Ô ¾Ë·ÁÁÝ´Ï´Ù. °¢ SQL Àμö¿¡ À̵é Áß Çϳª°¡ ÀÖ½À´Ï´Ù.
ÀÌ Àμö´Â Å×À̺í ÇÔ¼ö Ãâ·Â Çà¿¡ ¸®ÅÏµÈ °³º°ÀûÀÎ Ä÷³ °ªÀÌ ³Î(NULL)ÀÎÁö ¿©ºÎ¸¦ ´Ù½Ã DB2¿¡ º¸°íÇϱâ À§ÇØ UDF¿¡ ÀÇÇØ »ç¿ëµË´Ï´Ù. À̰ÍÀº À§Ä¡¿¡ ÀÖ¾î¼ SQL-result Àμö¿¡ ´ëÀÀµË´Ï´Ù.
ÀÌ Àμö´Â ¿¹¿Ü Á¤º¸ ¹× Å×ÀÌºí ³¡ Á¶°ÇÀ» ´Ù½Ã DB2·Î ½ÅÈ£Çϱâ À§ÇØ UDF¿¡ ÀÇÇØ »ç¿ëµË´Ï´Ù.
ÀÌ ÀμöµéÀº ÂüÁ¶µÈ ÇÔ¼öÀÇ ½Äº°ÀÚ¸¦ UDF·Î Àü´ÞÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù.
ÀÌ ÀμöµéÀº È£Ãâ°ú È£Ãâ »çÀÌ¿¡¼ UDF »óÅ ÀúÀåÀ» °ü¸®ÇÏ´Â µ¥ DB2¿¡ ÀÇÇØ »ç¿ëµË´Ï´Ù. DB2¿¡ ÀÇÇØ ½ºÅ©·¡Ä¡ ÆÐµå°¡ ÀÛ¼ºµÇ°í ÃʱâȵǸç, UDF°¡ À̸¦ °ü¸®ÇÕ´Ï´Ù. DB2´Â call-type Àμö¸¦ »ç¿ëÇÏ¿© UDF·Î È£Ãâ À¯ÇüÀ» ½ÅÈ£ÇÕ´Ï´Ù. Å×À̺í ÇÔ¼öÀÇ °æ¿ì À̵é È£Ãâ À¯ÇüÀº OPEN, FETCH, CLOSEÀ̸ç, ¿É¼ÇÀº FIRST¿Í FINALÀÔ´Ï´Ù.
À̰ÍÀº Ãß°¡ Á¤º¸¸¦ ´ã°í ÀÖ´Â, DB2¿¡ ÀÇÇØ UDF·Î Àü´ÞµÇ´Â ±¸Á¶ÀÔ´Ï´Ù.
DB2¿¡¼ UDF·Î Àü´ÞµÇ´Â Àμö¸¦ »ç¿ëÇÏ¿© SQL-result, SQL-result-ind ¹× SQL-state »Ó¸¸ ¾Æ´Ï¶ó Á¤»óÀûÀÎ UDFÀÇ °ª Ãâ·ÂÀÌ DB2·Î ¸®ÅϵǴ °ÍÀ» ÁöÄÑ º¸½Ê½Ã¿À. »ç½Ç UDF´Â ÇÔ¼öÀû Àǹ̿¡¼´Â ¾Æ¹«°Íµµ ¸®ÅÏÇÏÁö ¾Êµµ·Ï ÀÛ¼ºµË´Ï´Ù. Áï, ÇÔ¼öÀÇ ¸®ÅÏ À¯ÇüÀº voidÀÔ´Ï´Ù. ´ÙÀ½ ¿¹¿¡¼ void Á¤ÀÇ¿Í return¹®À» ÂüÁ¶ÇϽʽÿÀ.
#include ... void SQL_API_FN divid( ... arguments ... ) { ... UDF body ... return; }
À§ÀÇ ¿¹¿¡¼ SQL_API_FNÀº Áö¿øµÇ´Â ¿î¿µ üÁ¦¿¡ µû¶ó ´Ù¸¦ ¼ö ÀÖ´Â ÇÔ¼ö¿¡ ´ëÇÑ È£Ãâ ±Ô¾àÀ» ÁöÁ¤ÇÏ´Â ¸¶Å©·ÎÀÔ´Ï´Ù. ÀÌ ¸¶Å©·Î´Â ÀúÀå ÇÁ·Î½Ãµà¾î³ª UDF¸¦ ÀÛ¼ºÇÒ ¶§ ÇÊ¿äÇÕ´Ï´Ù.
UDFÀÇ ÇÁ·Î±×·¡¹Ö ¿¹´Â UDF ÄÚµå ¿¹ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
ÀÌ Àý¿¡¼´Â UDFÀÇ ¸Å°³º¯¼ö¿Í °á°ú ¸ðµÎ¿¡ À¯È¿ÇÑ À¯ÇüÀ» ½Äº°Çϰí, ÇØ´ç Àμö°¡ »ç¿ëÀÚÀÇ C ¶Ç´Â C++ ¾ð¾îÀÇ UDF¿¡¼ Á¤ÀǵǴ ¹æ½ÄÀ» °¢°¢ ÁöÁ¤ÇÕ´Ï´Ù. Java UDF¿¡¼ÀÇ À¯Çü Á¤ÀÇ´Â Java¿¡¼ Áö¿øµÇ´Â SQL µ¥ÀÌÅÍ À¯ÇüÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. »ç¿ëÀÚ°¡ sqludf.h include ÆÄÀÏ ¹× ¿©±â¿¡ Á¤ÀÇµÈ À¯ÇüÀ» »ç¿ëÇÏ´Â °æ¿ì, ¼·Î ´Ù¸¥ µ¥ÀÌÅÍ À¯Çü ¹× ÄÄÆÄÀÏ·¯¿¡ ¿Ã¹Ù¸¥ ¾ð¾î º¯¼ö¿Í ±¸Á¶¸¦ ÀÚµ¿À¸·Î »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, BIGINTÀÇ °æ¿ì, SQLUDF_BIGINT µ¥ÀÌÅÍ À¯ÇüÀ» »ç¿ëÇÏ¿© ¼·Î ´Ù¸¥ ÄÄÆÄÀÏ·¯°£¿¡ 64ºñÆ® Á¤¼ö À¯ÇüÀÇ À̸§À¸·Î Â÷À̸¦ ¼û±æ ¼ö ÀÖ½À´Ï´Ù. ÀÌ include ÆÄÀÏÀº UDF include ÆÄÀÏ: sqludf.h¿¡¼ ³íÀǵ˴ϴÙ.
À̰ÍÀº Àμö °ªÀÇ Çü½ÄÀ» Á¦¾îÇÏ´Â, CREATE FUNCTION¹®¿¡ Á¤ÀÇµÈ °¢ ÇÔ¼ö ¸Å°³º¯¼ö¿¡ ´ëÇÑ µ¥ÀÌÅÍ À¯ÇüÀÔ´Ï´Ù. ÀÌ Çü½ÄÀÇ °ªÀ» ±¸ÇÏ·Á¸é, Àμö µ¥ÀÌÅÍ À¯ÇüÀ¸·ÎºÎÅÍÀÇ ½Â°ÝÀÌ ÇÊ¿äÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ½Â°ÝÀº DB2¿¡ ÀÇÇØ Àμö °ª¿¡¼ ÀÚµ¿À¸·Î ¼öÇàµË´Ï´Ù. Àμö ½Â°ÝÀº SQL ÂüÁ¶¼¿¡¼ ¼³¸íµË´Ï´Ù.
ÇÔ¼ö °á°úÀÇ °æ¿ì, À̰ÍÀº Çü½ÄÀ» Á¤ÀÇÇÏ´Â CREATE FUNCTION¹®ÀÇ CAST FROMÀý¿¡ ÁöÁ¤µÈ µ¥ÀÌÅÍ À¯ÇüÀÔ´Ï´Ù. CAST FROMÀýÀÌ ¾ø´Â °æ¿ì, RETURNSÀý¿¡ ÁöÁ¤µÈ µ¥ÀÌÅÍ À¯ÇüÀÌ Çü½ÄÀ» Á¤ÀÇÇÕ´Ï´Ù.
´ÙÀ½ ¿¹¿¡¼, CAST FROMÀýÀÌ Á¸ÀçÇÑ´Ù´Â °ÍÀº UDF º»¹®ÀÌ SMALLINT¸¦ ¸®ÅÏÇÔÀ» ÀǹÌÇϸç, DB2°¡ ÀÌ °ªÀ» ÇÔ¼ö ÂüÁ¶°¡ ¹ß»ýÇÏ´Â ¸í·É¹®À¸·Î Àü´ÞÇϱâ Àü¿¡ INTEGER·Î À¯Çüº¯È¯ÇÔÀ» ÀǹÌÇÕ´Ï´Ù.
... RETURNS INTEGER CAST FROM SMALLINT ...
ÀÌ °æ¿ì ¾Æ·¡¿¡ Á¤ÀÇµÈ ´ë·Î SMALLINT¸¦ »ý¼ºÇϱâ À§ÇØ UDF¸¦ ÀÛ¼ºÇØ¾ß ÇÕ´Ï´Ù. CAST FROM µ¥ÀÌÅÍ À¯ÇüÀº RETURNS µ¥ÀÌÅÍ À¯ÇüÀ¸·Î À¯Çüº¯È¯ °¡´ÉÇÏ°Ô ÇÏ¿© ÀÓÀÇ·Î ´Ù¸¥ µ¥ÀÌÅÍ À¯ÇüÀ» ¼±ÅÃÇÒ ¼ö ¾øµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. µ¥ÀÌÅÍ À¯Çü°£ À¯Çüº¯È¯¿¡ ´ëÇØ¼´Â SQL ÂüÁ¶¼¿¡¼ ¼³¸íÇÕ´Ï´Ù.
´ÙÀ½Àº SQL À¯Çü ¹× À̵éÀÇ C ¾ð¾î¿¡¼ÀÇ Ç¥±â ¸ñ·ÏÀÔ´Ï´Ù. Java¿¡¼ÀÇ SQL À¯Çü Ç¥±â ¸ñ·ÏÀº Java¿¡¼ Áö¿øµÇ´Â SQL µ¥ÀÌÅÍ À¯ÇüÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. ¿©±â¿¡´Â °¢ À¯ÇüÀÌ ¸Å°³º¯¼ö³ª °á°ú·Î¼ À¯È¿ÇÑÁö ¿©ºÎ¿¡ ´ëÇÑ Á¤º¸°¡ Æ÷ÇԵ˴ϴÙ. ¶ÇÇÑ »ç¿ëÀÚÀÇ C ¶Ç´Â C++ ¾ð¾î UDF¿¡¼ÀÇ Àμö Á¤ÀÇ·Î À¯ÇüÀÌ ³ªÅ¸³¯ ¼ö ÀÖ´Â ¹æ¹ýÀÇ ¿¹µµ Æ÷ÇԵ˴ϴÙ.
À¯È¿ÇÔ. C ¾ð¾î¿¡¼´Â short·Î Ç¥½ÃÇÕ´Ï´Ù.
Á¤¼ö UDF ¸Å°³º¯¼ö¸¦ Á¤ÀÇÇÒ¶§, DB2°¡ SMALLINT Àμö¸¦ INTEGER·Î ½Â°ÝÇÏÁö ¾ÊÀ¸¹Ç·Î, SMALLINTº¸´Ù´Â INTEGER »ç¿ëÀ» °í·ÁÇϽʽÿÀ. ¿¹¸¦ µé¾î, UDF¸¦ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÑ´Ù°í °¡Á¤ÇϽʽÿÀ.
CREATE FUNCTION SIMPLE(SMALLINT)...
¿¹:
short *arg1; /* example for SMALLINT */ short *arg1_null_ind; /* example for any null indicator */
INTEGER µ¥ÀÌÅ͸¦ »ç¿ëÇÏ¿© SIMPLE ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °æ¿ì(... SIMPLE(1)...), ÇØ´ç ÇÔ¼ö¸¦ ãÀ» ¼ö ¾ø´Ù´Â ¿À·ù ¸Þ½ÃÁö SQLCODE -440(SQLSTATE 42884)ÀÌ Ç¥½ÃµÇ¸ç, ÀÌ ÇÔ¼öÀÇ ÀÏ¹Ý »ç¿ëÀÚ´Â ÀÌ ¸Þ½ÃÁöÀÇ ¿øÀÎÀ» ¾Ë ¼ö ¾ø½À´Ï´Ù. À§ÀÇ ¿¹¿¡¼ 1Àº INTEGERÀ̹ǷÎ, À̸¦ SMALLINT·Î À¯Çüº¯È¯Çϰųª ¸Å°³º¯¼ö¸¦ INTEGER·Î Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
À¯È¿ÇÔ. C¿¡¼ sqlint32·Î Ç¥½ÃÇÕ´Ï´Ù. DB2 Include ÆÄÀÏÀÎ sqlsystm.h´Â ÀÌ À¯ÇüÀ» Ç÷§Æû¿¡ ÀûÇÕÇÑ 32ºñÆ® Á¤¼ö·Î Á¤ÀÇÇÕ´Ï´Ù.
¿¹:
sqlint32 *arg2; /* example for INTEGER */
À¯È¿ÇÔ. C ¾ð¾î¿¡¼´Â sqlint64·Î Ç¥½ÃÇÕ´Ï´Ù.
¿¹:
sqlint64 *arg3; /* example for INTEGER */
DB2´Â sqlint64 C ¾ð¾î À¯ÇüÀ» Á¤ÀÇÇÏ¿© ÄÄÆÄÀÏ·¯¿Í ¿î¿µ üÁ¦¿¡¼ 64ºñÆ® ºÎÈ£È Á¤¼ö¿¡ ´ëÇÑ Á¤ÀÇÀÇ Â÷À̸¦ ±Øº¹ÇÕ´Ï´Ù. Á¤ÀǸ¦ ÁöÁ¤ÇÏ·Á¸é #include sqludf.h¸¦ Æ÷ÇÔ½ÃÄÑ¾ß ÇÕ´Ï´Ù.
C ¾ð¾î Ç¥±â¸¦ ÇÒ ¼ö ¾øÀ¸¹Ç·Î À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù. ½ÊÁø¼ö °ªÀ» Àü´ÞÇÏ·Á´Â °æ¿ì, ¸Å°³º¯¼ö¸¦ DECIMAL·ÎºÎÅÍ À¯Çüº¯È¯ °¡´ÉÇÑ µ¥ÀÌÅÍ À¯Çü(¿¹¸¦ µé¾î, CHAR ¶Ç´Â DOUBLE)À¸·Î ÁöÁ¤ÇØ¾ß Çϰí, ÇØ´ç À¯Çü¿¡ Àμö¸¦ ¸í½ÃÀûÀ¸·Î À¯Çüº¯È¯ÇØ¾ß ÇÕ´Ï´Ù. DOUBLEÀÇ °æ¿ì, DB2°¡ ÀÚµ¿À¸·Î ½Â°Ý½ÃŰ¹Ç·Î ½ÊÁø¼ö Àμö¸¦ DOUBLE ¸Å°³º¯¼ö·Î ¸í½ÃÀûÀ¸·Î À¯Çüº¯È¯ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù.
¿¹¸¦ µé¾î, DECIMAL(5,2)·Î WAGE ¹× DECIMAL(4,1)·Î HOURS¶ó´Â µÎ °³ÀÇ Ä÷³ÀÌ ÀÖ°í, ÀÓ±Ý, ³ëµ¿ ½Ã°£ ¹× ±âŸ ´Ù¸¥ Àμö¿¡ ±Ù°ÅÇÏ¿© ÁÖ±ÞÀ» °è»êÇÏ´Â UDF¸¦ ÀÛ¼ºÇÑ´Ù°í °¡Á¤ÇϽʽÿÀ. UDF´Â ´ÙÀ½°ú °°½À´Ï´Ù.
CREATE FUNCTION WEEKLY_PAY (DOUBLE, DOUBLE, ...) RETURNS DECIMAL(7,2) CAST FROM DOUBLE ...;
À§ÀÇ UDF¿¡¼ ù¹øÂ° µÎ °³ÀÇ ¸Å°³º¯¼ö´Â Àӱݰú ½Ã°£ ¼ö¿¡ ÇØ´çµË´Ï´Ù. SQL ¼±Åà ¸í·É¹®¿¡¼ UDF WEEKLY_PAY¸¦ ´ÙÀ½°ú °°ÀÌ È£ÃâÇÕ´Ï´Ù.
SELECT WEEKLY_PAY (WAGE, HOURS, ...) ...;
DECIMAL Àμö´Â DOUBLE·Î À¯Çüº¯È¯µÉ ¼ö ÀÖÀ¸¹Ç·Î, ¸í½ÃÀû À¯Çüº¯È¯Àº ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù.
´Ù¸¥ ¹æ¹ýÀ¸·Î ´ÙÀ½°ú °°ÀÌ CHAR Àμö¸¦ »ç¿ëÇÏ¿© WEEKLY_PAY¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
CREATE FUNCTION WEEKLY_PAY (VARCHAR(6), VARCHAR(5), ...) RETURNS DECIMAL (7,2) CAST FROM VARCHAR(10) ...;
´ÙÀ½°ú °°ÀÌ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.
SELECT WEEKLY_PAY (CHAR(WAGE), CHAR(HOURS), ...) ...;
DECIMAL Àμö°¡ VARCHAR·Î ½Â°ÝµÉ ¼ö ¾øÀ¸¹Ç·Î ¸í½ÃÀû À¯Çüº¯È¯ÀÌ ÇÊ¿äÇÕ´Ï´Ù.
ºÎµ¿ ¼Ò¼öÁ¡ ¸Å°³º¯¼ö »ç¿ëÀÇ ÀÌÁ¡Àº UDF °ª¿¡ »ê¼ú ¿¬»êÀ» ¼öÇàÇÏ´Â °ÍÀÌ ´õ ½±´Ù´Â Á¡ÀÔ´Ï´Ù. ¹®ÀÚ ¸Å°³º¯¼ö »ç¿ëÀÇ ÀÌÁ¡Àº Ç×»ó Á¤È®ÇÏ°Ô ½ÊÁø¼ö °ªÀ» Ç¥½ÃÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. À̰ÍÀº ºÎµ¿ ¼Ò¼öÁ¡À¸·Î´Â Ç×»ó °¡´ÉÇÏÁö´Â ¾Ê½À´Ï´Ù.
À¯È¿ÇÔ. C ¾ð¾î¿¡¼´Â float·Î Ç¥½ÃÇÕ´Ï´Ù.
¿¹:
float *result; /* example for REAL */
À¯È¿ÇÔ. C ¾ð¾î¿¡¼´Â double·Î Ç¥½ÃÇÕ´Ï´Ù.
¿¹:
double *result; /* example for DOUBLE */
À¯È¿ÇÔ. C¿¡¼´Â char...[n+1]·Î Ç¥½ÃµË´Ï´Ù. À̰ÍÀº CÀÇ ³Î(NULL) Á¾·á ¹®ÀÚ¿·Î ¸¶Áö¸· ¹®ÀÚ´Â ³Î(NULL)ÀÎ X'00'ÀÔ´Ï´Ù.
¿¹:
char arg1[14]; /* example for CHAR(13) */ char *arg1; /* also perfectly acceptable */
CHAR(n) ¸Å°³º¯¼öÀÇ °æ¿ì, DB2´Â Ç×»ó n ¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ ¹öÆÛ·Î À̵¿½Ã۰í, n+1 ¹ÙÀÌÆ®¸¦ ³Î(NULL)·Î ¼³Á¤ÇÕ´Ï´Ù. RETURNS CHAR(n) °ªÀÇ °æ¿ì, DB2´Â Ç×»ó n ¹ÙÀÌÆ®¸¦ °®°í n+1 ¹ÙÀÌÆ®¸¦ ¹«½ÃÇÕ´Ï´Ù. ÀÌ·¯ÇÑ RETURNS CHAR(n)ÀÇ °æ¿ì, óÀ½ n ¹®ÀÚ¿¡ ³Î(NULL) ¹®ÀÚ¸¦ À߸ø ÀÔ·ÂÇÏ¸é °æ°í°¡ ¹ß»ýÇÕ´Ï´Ù. DB2´Â À̰ÍÀ» Á¤»óÀûÀÎ µ¥ÀÌÅÍÀÇ ÀϺΰ¡ ¾Æ´Ñ ´Ù¸¥ °ÍÀ¸·Î ÀνÄÇÏÁö´Â ¾ÊÀ¸¸ç, À̰ÍÀÌ ³ªÁß¿¡ ÀǵµÇÏÁö ¾ÊÀº ÀÌ»óÇÑ °á°ú¸¦ ¹ß»ý½Ãų ¼öµµ ÀÖ½À´Ï´Ù.
FOR BIT DATA°¡ ÁöÁ¤µÈ °æ¿ì, UDF¿¡¼ ÇÔ¼ö¸¦ ó¸®ÇÏ´Â Á¤»óÀûÀÎ C ¹®ÀÚ¿À» »ç¿ëÇÏ´Â °Í¿¡ ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÇÔ¼öµé Áß ´Ù¼ö°¡ ¹®ÀÚ¿À» ±¸ºÐÇÏ´Â ³Î(NULL)À» Ž»öÇϸç, ³Î(NULL) ¹®ÀÚ(X'00')´Â µ¥ÀÌÅÍ °ªÀÇ Áß°£¿¡ Æ÷Ç﵃ ¼ö ÀÖ´Â ÀûÀýÇÑ ¹®ÀÚÀÏ ¼ö ÀÖ½À´Ï´Ù.
UDF ¸Å°³º¯¼ö¸¦ Á¤ÀÇÇÒ ¶§, DB2°¡ VARCHAR Àμö¸¦ CHAR·Î ½Â°Ý½ÃŰÁö ¾ÊÀ¸¹Ç·Î, CHARº¸´Ù´Â VARCHARÀ» »ç¿ëÇÏ´Â °ÍÀ» °í·ÁÇϽʽÿÀ. ¿¹¸¦ µé¾î, UDF¸¦ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇϽʽÿÀ.
CREATE FUNCTION SIMPLE(INT,CHAR(1))...
VARCHAR µ¥ÀÌÅ͸¦ »ç¿ëÇÏ¿© SIMPLE ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °æ¿ì(... SIMPLE(1,'A')...), ÇØ´ç ÇÔ¼ö¸¦ ãÀ» ¼ö ¾ø´Ù´Â ¿À·ù ¸Þ½ÃÁö SQLCODE -440(SQLSTATE 42884)ÀÌ Ç¥½ÃµÇ¸ç, ÀÌ ÇÔ¼öÀÇ ÀÏ¹Ý »ç¿ëÀÚ´Â ÀÌ ¸Þ½ÃÁöÀÇ ¿øÀÎÀ» ¾Ë ¼ö ¾ø½À´Ï´Ù. À§ÀÇ ¿¹¿¡¼ 'A'´Â VARCHARÀ̹ǷÎ, À̰ÍÀ» CHAR·Î À¯Çüº¯È¯Çϰųª ¸Å°³º¯¼ö¸¦ VARCHAR·Î Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
À¯È¿ÇÔ. C¿¡¼´Â ´ÙÀ½°ú À¯»çÇÑ ±¸Á¶·Î Ç¥½ÃµË´Ï´Ù.
struct sqludf_vc_fbd { unsigned short length; /* length of data */ char data[1]; /* first char of data */ };
[1]Àº ´ÜÁö ÄÄÆÄÀÏ·¯ ¹è¿À» ÁöÁ¤ÇÒ »ÓÀÔ´Ï´Ù. À̰ÍÀº ´Ü ÇϳªÀÇ ¹®ÀÚ¸¸ÀÌ Àü´ÞµÊÀ» ÀǹÌÇÏÁö´Â ¾Ê½À´Ï´Ù. ½ÇÁ¦ ±¸Á¶°¡ ¾Æ´Ñ ÀÌ ±¸Á¶ÀÇ ÁÖ¼Ò°¡ Àü´ÞµÇ¹Ç·Î, ¹è¿ ³í¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÏ´Â °ÍÀÔ´Ï´Ù.
³Î(NULL) ¹®ÀÚ°¡ Á¤»óÀûÀÎ µ¥ÀÌÅÍ °ªÀÇ ÀϺΰ¡ µÉ ¼ö ÀÖÀ¸¹Ç·Î, ÀÌ °ªµéÀº CÀÇ ³Î(NULL) Á¾·á ¹®ÀÚ¿·Î Ç¥½ÃµÇÁö ¾Ê½À´Ï´Ù. ±æÀÌ´Â ±¸Á¶ º¯¼ö length¸¦ »ç¿ëÇÏ´Â ¸Å°³º¯¼ö¿¡ ´ëÇÑ UDF·Î ¸í½ÃÀûÀ¸·Î Àü´ÞµË´Ï´Ù. RETURNSÀýÀÇ °æ¿ì, UDF·Î Àü´ÞµÇ´Â ±æÀÌ´Â ¹öÆÛÀÇ ±æÀÌÀÔ´Ï´Ù. UDF º»¹®ÀÌ ±¸Á¶ º¯¼ö length¸¦ »ç¿ëÇÏ¿© ´Ù½Ã Àü´ÞÇØ¾ß ÇÏ´Â °ÍÀº µ¥ÀÌÅÍ °ªÀÇ ½ÇÁ¦ ±æÀÌÀÔ´Ï´Ù.
¿¹:
struct sqludf_vc_fbd *arg1; /* example for VARCHAR(n) FOR BIT DATA */ struct sqludf_vc_fbd *result; /* also for LONG VARCHAR FOR BIT DATA */
À¯È¿ÇÔ. C ¾ð¾î¿¡¼´Â char...[n+1]·Î Ç¥½ÃÇÕ´Ï´Ù. À̰ÍÀº CÀÇ ³Î(NULL) Á¾·á ¹®ÀÚ¿ÀÔ´Ï´Ù.
VARCHAR(n) ¸Å°³º¯¼öÀÇ °æ¿ì, DB2´Â (k+1) À§Ä¡¿¡ ³Î(NULL)À» ³Ö´Âµ¥, ¿©±â¼ k´Â ƯÁ¤ ¹ß»ý ±æÀÌÀÔ´Ï´Ù. C ¹®ÀÚ¿ ó¸® ÇÔ¼ö´Â ÀÌ·¸°Ô ÀÌµé °ªÀÇ Á¶ÀÛ¿¡ ¸Å¿ì ÀûÀýÇÕ´Ï´Ù. RETURNS VARCHAR(n) °ªÀÇ °æ¿ì, UDF º»¹®Àº ³Î(NULL)À» »ç¿ëÇÏ¿© ½ÇÁ¦ °ªÀ» ±¸ºÐÇØ¾ß Çϴµ¥, ÀÌ´Â DB2°¡ ÀÌ ³Î(NULL) ¹®ÀÚ·Î °á°ú ±æÀ̸¦ ÆÇº°Çϱ⠶§¹®ÀÔ´Ï´Ù.
¿¹:
char arg2[51]; /* example for VARCHAR(50) */ char *result; /* also perfectly acceptable */
À¯È¿ÇÔ. C ¾ð¾î¿¡¼´Â sqldbchar[n+1]·Î Ç¥½ÃÇÕ´Ï´Ù. À̰ÍÀº ³Î(NULL) Á¾·á ±×·¡ÇÈ ¹®ÀÚ¿ÀÔ´Ï´Ù. wchar_t[n+1]Àº wchar_t°¡ ±æÀÌ 2 ¹ÙÀÌÆ®·Î Á¤ÀǵǴ Ç÷§Æû¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª sqldbcharÀÌ ±ÇÀåµË´Ï´Ù. ÀÌ µÎ °¡Áö µ¥ÀÌÅÍ À¯Çü¿¡ ´ëÇÑ Á¤º¸´Â C ¹× C++¿¡¼ wchar_t ¶Ç´Â sqldbchar µ¥ÀÌÅÍ À¯Çü ¼±ÅÃÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
GRAPHIC(n) ¸Å°³º¯¼öÀÇ °æ¿ì, DB2´Â n°³ÀÇ 2 ¹ÙÀÌÆ® ¹®ÀÚµéÀ» ¹öÆÛ·Î À̵¿Çϰí, ´ÙÀ½ÀÇ µÎ ¹ÙÀÌÆ®¸¦ ³Î(NULL)·Î ¼³Á¤ÇÕ´Ï´Ù. DB2¿¡¼ UDF·Î Àü´ÞµÈ µ¥ÀÌÅÍ´Â DBCS Çü½ÄÀ̸ç, ´Ù½Ã Àü´ÞµÈ °á°úµµ DBCS Çü½ÄÀ̾î¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÇüÅ´ C ¹× C++ÀÇ WCHARTYPE »çÀü ó¸® ÄÄÆÄÀÏ·¯ ¿É¼Ç¿¡¼ ¼³¸íµÈ WCHARTYPE NOCONVERT »çÀü ó¸® ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÏ´Â °Í°ú °°½À´Ï´Ù. RETURNS GRAPHIC(n) °ªÀÇ °æ¿ì, DB2´Â Ç×»ó n°³ÀÇ 2 ¹ÙÀÌÆ® ¹®ÀÚ¸¦ ÃëÇÏ°í ´ÙÀ½ÀÇ ¹ÙÀÌÆ®µéÀ» ¹«½ÃÇÕ´Ï´Ù.
±×·¡ÇÈ UDF ¸Å°³º¯¼ö¸¦ Á¤ÀÇÇÒ ¶§, DB2°¡ VARGRAPHIC Àμö¸¦ GRAPHICÀ¸·Î ½Â°Ý½ÃŰÁö ¾ÊÀ¸¹Ç·Î GRAPHICº¸´Ù´Â VARGRAPHIC »ç¿ëÀ» °í·ÁÇϽʽÿÀ. ¿¹¸¦ µé¾î UDF¸¦ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÑ´Ù°í °¡Á¤ÇÕ´Ï´Ù.
CREATE FUNCTION SIMPLE(GRAPHIC)...
VARGRAPHIC µ¥ÀÌÅ͸¦ »ç¿ëÇÏ¿© SIMPLE ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °æ¿ì(... SIMPLE('graphic_literal')...), »ç¿ëÀÚ¿¡°Ô´Â ÇØ´ç ÇÔ¼ö¸¦ ãÀ» ¼ö ¾ø´Ù´Â SQLCODE -440(SQLSTATE 42884) ¿À·ù ¸Þ½ÃÁö°¡ Ç¥½ÃµÇ¸ç, ÀÌ ÇÔ¼öÀÇ ÃÖÁ¾ »ç¿ëÀÚ´Â ÀÌ ¸Þ½ÃÁöÀÇ ¿øÀÎÀ» ÀÌÇØÇÒ ¼ö ¾øÀ» °ÍÀÔ´Ï´Ù. À§ÀÇ ¿¹¿¡¼, graphic_literalÀº VARGRAPHIC µ¥ÀÌÅÍ·Î ÇØ¼®µÇ´Â ¸®ÅÍ·² DBCS ¹®ÀÚ¿À̹ǷÎ, GRAPHICÀ¸·Î À¯Çüº¯È¯Çϰųª ¸Å°³º¯¼ö¸¦ VARGRAPHICÀ¸·Î Á¤ÀÇÇϽʽÿÀ.
¿¹:
sqldbchar arg1[14]; /* example for GRAPHIC(13) */ sqldbchar *arg1; /* also perfectly acceptable */
À¯È¿ÇÔ. C ¾ð¾î¿¡¼´Â sqldbchar[n+1]·Î Ç¥½ÃÇÕ´Ï´Ù. À̰ÍÀº ³Î(NULL) Á¾·á ±×·¡ÇÈ ¹®ÀÚ¿ÀÔ´Ï´Ù. wchar_t[n+1]Àº wchar_t°¡ ±æÀÌ 2 ¹ÙÀÌÆ®·Î Á¤ÀǵǴ Ç÷§Æû¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª sqldbcharÀÌ ±ÇÀåµË´Ï´Ù. ÀÌ µÎ °¡Áö µ¥ÀÌÅÍ À¯Çü¿¡ ´ëÇÑ Á¤º¸´Â C ¹× C++¿¡¼ wchar_t ¶Ç´Â sqldbchar µ¥ÀÌÅÍ À¯Çü ¼±ÅÃÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
VARGRAPHIC(n) ¸Å°³º¯¼öÀÇ °æ¿ì, DB2´Â ±×·¡ÇÈ ³Î(NULL)À» (k+1) À§Ä¡¿¡ ³Ö´Âµ¥, ¿©±â¿¡¼ k´Â ƯÁ¤ ¹ß»ý ±æÀÌÀÔ´Ï´Ù. ±×·¡ÇÈ ³Î(NULL)À̶õ ±×·¡ÇÈ ¹®ÀÚ¿ÀÇ ¸¶Áö¸· ¹®ÀÚÀÇ ¸ðµç ¹ÙÀÌÆ®¿¡ 2Áø 0('\0's)ÀÌ µé¾î ÀÖ´Â Á¶°ÇÀ» ¸»ÇÕ´Ï´Ù. DB2¿¡¼ UDF·Î Àü´ÞµÈ µ¥ÀÌÅÍ´Â DBCS Çü½ÄÀ̸ç, ´Ù½Ã Àü´ÞµÈ °á°úµµ DBCS Çü½ÄÀ̾î¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÇüÅ´ C ¹× C++ÀÇ WCHARTYPE »çÀü ó¸® ÄÄÆÄÀÏ·¯ ¿É¼Ç¿¡¼ ¼³¸íµÈ WCHARTYPE NOCONVERT »çÀü ó¸® ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÏ´Â °Í°ú °°½À´Ï´Ù. RETURNS VARGRAPHIC(n) °ªÀÇ °æ¿ì, UDF º»¹®Àº ±×·¡ÇÈ ³Î(NULL)À» »ç¿ëÇÏ¿© ½ÇÁ¦ °ªÀ» ±¸ºÐÇϴµ¥, ÀÌ´Â DB2°¡ ÀÌ ±×·¡ÇÈ ³Î(NULL) ¹®ÀÚ·Î °á°ú ±æÀ̸¦ ÆÇº°Çϱ⠶§¹®ÀÔ´Ï´Ù.
¿¹:
sqldbchar args[51], /* example for VARGRAPHIC(50) */ sqldbchar *result, /* also perfectly acceptable */
À¯È¿ÇÔ. C ¾ð¾î¿¡¼´Â struct·Î Ç¥½ÃµË´Ï´Ù.
struct sqludf_vg { unsigned short length; /* length of data */ sqldbchar data[1]; /* first char of data */ };
À§ÀÇ ±¸Á¶¿¡¼ wchar_t°¡ ±æÀÌ 2 ¹ÙÀÌÆ®·Î Á¤ÀǵǴ Ç÷§Æû¿¡¼ sqldbchar ´ë½Å wchar_t¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸³ª, sqldbchar »ç¿ëÀÌ ±ÇÀåµË´Ï´Ù. ÀÌ µÎ °¡Áö µ¥ÀÌÅÍ À¯Çü¿¡ ´ëÇÑ Á¤º¸´Â C ¹× C++¿¡¼ wchar_t ¶Ç´Â sqldbchar µ¥ÀÌÅÍ À¯Çü ¼±ÅÃÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
[1]Àº ´ÜÁö ÄÄÆÄÀÏ·¯¿¡°Ô ¹è¿À» °¡¸®Åµ´Ï´Ù. À̰ÍÀÌ ÇϳªÀÇ ±×·¡ÇÈ ¹®ÀÚ¸¸ÀÌ Àü´ÞµÊÀ» ÀǹÌÇÏ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ½ÇÁ¦ ±¸Á¶°¡ ¾Æ´Ñ ÀÌ ±¸Á¶ÀÇ ÁÖ¼Ò°¡ Àü´ÞµÇ¹Ç·Î, ¹è¿ ³í¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÏ´Â °ÍÀÔ´Ï´Ù.
À̰ÍÀº ³Î(NULL) Á¾·á ±×·¡ÇÈ ¹®ÀÚ¿·Î Ç¥½ÃµÇÁö ¾Ê½À´Ï´Ù. 2 ¹ÙÀÌÆ® ¹®ÀÚ¿¡¼ ±æÀÌ´Â ±¸Á¶ º¯¼ö length¸¦ »ç¿ëÇÏ´Â ¸Å°³º¯¼ö¿¡ ´ëÇÑ UDF·Î ¸í½ÃÀûÀ¸·Î Àü´ÞµË´Ï´Ù. DB2¿¡¼ UDF·Î Àü´ÞµÈ µ¥ÀÌÅÍ´Â DBCS Çü½ÄÀ̸ç, ´Ù½Ã Àü´ÞµÈ °á°úµµ DBCS Çü½ÄÀ̾î¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÇüÅ´ C ¹× C++ÀÇ WCHARTYPE »çÀü ó¸® ÄÄÆÄÀÏ·¯ ¿É¼Ç¿¡¼ ¼³¸íµÈ WCHARTYPE NOCONVERT »çÀü ó¸® ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÏ´Â °Í°ú °°½À´Ï´Ù. RETURNSÀýÀÇ °æ¿ì, UDF·Î Àü´ÞµÇ´Â ±æÀÌ´Â ¹öÆÛÀÇ ±æÀÌÀÔ´Ï´Ù. UDF º»¹®ÀÌ ±¸Á¶ º¯¼ö length¸¦ »ç¿ëÇÏ¿© ´Ù½Ã Àü´ÞÇØ¾ß ÇÏ´Â °ÍÀº 2 ¹ÙÀÌÆ® ¹®ÀÚ¿¡¼ÀÇ ½ÇÁ¦ µ¥ÀÌÅÍ °ª ±æÀÌÀÔ´Ï´Ù.
¿¹:
struct sqludf_vg *arg1; /* example for VARGRAPHIC(n) */ struct sqludf_vg *result; /* also for LONG VARGRAPHIC */
À¯È¿ÇÔ. C¿¡¼ CHAR(10), Áï char...[11]°ú µ¿ÀÏÇÏ°Ô Ç¥½ÃµË´Ï´Ù. ³¯Â¥ °ªÀº Ç×»ó ISO Çü½ÄÀÎ yyyy-mm-dd·Î UDF¿¡ Àü´ÞµË´Ï´Ù.
¿¹:
char arg1[11]; /* example for DATE */ char *result; /* also perfectly acceptable */
À¯È¿ÇÔ. C¿¡¼ CHAR(8), Áï char...[9]¿Í µ¿ÀÏÇÏ°Ô Ç¥½ÃµË´Ï´Ù. ½Ã°£ °ªÀº Ç×»ó ISO Çü½ÄÀÎ hh.mm.ss·Î UDF¿¡ Àü´ÞµË´Ï´Ù.
¿¹:
char *arg; /* example for DATE */ char result[9]; /* also perfectly acceptable */
À¯È¿ÇÔ. C¿¡¼ CHAR(26)ÀÎ char...[27]°ú µ¿ÀÏÇÏ°Ô Ç¥½ÃµË´Ï´Ù. ½Ã°£¼ÒÀÎ °ªÀº Ç×»ó yyyy-mm-dd-hh.mm.ss.nnnnnn Çü½ÄÀ¸·Î Àü´ÞµË´Ï´Ù.
¿¹:
char arg1[27]; /* example for TIMESTAMP */ char *result; /* also perfectly acceptable */
À¯È¿ÇÔ. C ¾ð¾î¿¡¼´Â struct·Î Ç¥½ÃµË´Ï´Ù.
struct sqludf_lob { sqluint32 length; /* length in bytes */ char data[1]; /* first byte of lob */ };
[1]Àº ´ÜÁö ÄÄÆÄÀÏ·¯¿¡°Ô ¹è¿À» °¡¸®Åµ´Ï´Ù. À̰ÍÀº ´Ü ÇϳªÀÇ ¹®ÀÚ¸¸ÀÌ Àü´ÞµÊÀ» ÀǹÌÇÏÁö´Â ¾Ê½À´Ï´Ù. ½ÇÁ¦ ±¸Á¶°¡ ¾Æ´Ñ ÀÌ ±¸Á¶ÀÇ ÁÖ¼Ò°¡ Àü´ÞµÇ¹Ç·Î, ¹è¿ ³í¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÏ´Â °ÍÀÔ´Ï´Ù.
À̰ÍÀº ³Î(NULL) Á¾·á ¹®ÀÚ¿·Î Ç¥½ÃµÇÁö ¾Ê½À´Ï´Ù. ±æÀÌ´Â ±¸Á¶ º¯¼ö length¸¦ »ç¿ëÇÏ´Â ¸Å°³º¯¼ö¿¡ ´ëÇÑ UDF·Î ¸í½ÃÀûÀ¸·Î Àü´ÞµË´Ï´Ù. RETURNSÀýÀÇ °æ¿ì, UDF·Î Àü´ÞµÇ´Â ±æÀÌ´Â ¹öÆÛÀÇ ±æÀÌÀÔ´Ï´Ù. UDF º»¹®ÀÌ ±¸Á¶ º¯¼ö length¸¦ »ç¿ëÇÏ¿© ´Ù½Ã Àü´ÞÇØ¾ß ÇÏ´Â °ÍÀº µ¥ÀÌÅÍ °ªÀÇ ½ÇÁ¦ ±æÀÌÀÔ´Ï´Ù.
¿¹:
struct sqludf_lob *arg1; /* example for BLOB(n), CLOB(n) */ struct sqludf_lob *result;
À¯È¿ÇÔ. C ¾ð¾î¿¡¼´Â struct·Î Ç¥½ÃµË´Ï´Ù.
struct sqludf_lob { sqluint32 length; /* length in graphic characters */ sqldbchar data[1]; /* first byte of lob */ };
À§ÀÇ ±¸Á¶¿¡¼ wchar_t°¡ ±æÀÌ 2 ¹ÙÀÌÆ®·Î Á¤ÀǵǴ Ç÷§Æû¿¡¼ sqldbchar ´ë½Å wchar_t¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸³ª, sqldbchar »ç¿ëÀÌ ±ÇÀåµË´Ï´Ù. ÀÌ µÎ °¡Áö µ¥ÀÌÅÍ À¯Çü¿¡ ´ëÇÑ Á¤º¸´Â C ¹× C++¿¡¼ wchar_t ¶Ç´Â sqldbchar µ¥ÀÌÅÍ À¯Çü ¼±ÅÃÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
[1]Àº ´ÜÁö ÄÄÆÄÀÏ·¯¿¡°Ô ¹è¿À» °¡¸®Åµ´Ï´Ù. À̰ÍÀº ´Ü ÇϳªÀÇ ±×·¡ÇÈ ¹®ÀÚ¸¸ÀÌ Àü´ÞµÊÀ» ÀǹÌÇÏÁö´Â ¾Ê½À´Ï´Ù. ½ÇÁ¦ ±¸Á¶°¡ ¾Æ´Ñ ÀÌ ±¸Á¶ÀÇ ÁÖ¼Ò°¡ Àü´ÞµÇ¹Ç·Î, ¹è¿ ³í¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÏ´Â °ÍÀÔ´Ï´Ù.
À̰ÍÀº ³Î(NULL) Á¾·á ±×·¡ÇÈ ¹®ÀÚ¿·Î Ç¥½ÃµÇÁö ¾Ê½À´Ï´Ù. ±æÀÌ´Â ±¸Á¶ º¯¼ö length¸¦ »ç¿ëÇÏ´Â ¸Å°³º¯¼ö¿¡ ´ëÇÑ UDF·Î ¸í½ÃÀûÀ¸·Î Àü´ÞµË´Ï´Ù. DB2¿¡¼ UDF·Î Àü´ÞµÈ µ¥ÀÌÅÍ´Â DBCS Çü½ÄÀ̸ç, ´Ù½Ã Àü´ÞµÈ °á°úµµ DBCS Çü½ÄÀ̾î¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÇüÅ´ C ¹× C++ÀÇ WCHARTYPE »çÀü ó¸® ÄÄÆÄÀÏ·¯ ¿É¼Ç¿¡¼ ¼³¸íµÈ WCHARTYPE NOCONVERT »çÀü ó¸® ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÏ´Â °Í°ú °°½À´Ï´Ù. RETURNSÀýÀÇ °æ¿ì, UDF·Î Àü´ÞµÇ´Â ±æÀÌ´Â ¹öÆÛÀÇ ±æÀÌÀÔ´Ï´Ù. UDF º»¹®ÀÌ ±¸Á¶ º¯¼ö length¸¦ »ç¿ëÇÏ¿© ´Ù½Ã Àü´ÞÇØ¾ß ÇÏ´Â °ÍÀº 2 ¹ÙÀÌÆ® ¹®ÀÚ¿¡¼ Ç¥ÇöµÇ´Â ÀÌµé ±æÀÌ ¸ðµÎ¸¦ »ç¿ëÇÏ¿© ½ÇÁ¦ µ¥ÀÌÅÍ °ªÀÇ ±æÀÌÀÔ´Ï´Ù.
¿¹:
struct sqludf_lob *arg1; /* example for DBCLOB(n) */ struct sqludf_lob *result;
±âº» À¯Çü¿¡ µû¶ó À¯È¿Çϰųª À¯È¿ÇÏÁö ¾ÊÀ½. ±¸º° À¯ÇüÀº UDTÀÇ ±âº» À¯Çü Çü½ÄÀ¸·Î UDF¿¡ Àü´ÞµÇ¹Ç·Î, ±âº» À¯ÇüÀÌ À¯È¿Çϰųª, ±×·¯ÇÑ °æ¿ì¿¡¸¸ ÁöÁ¤µÉ ¼ö ÀÖ½À´Ï´Ù.
¿¹:
struct sqludf_lob *arg1; /* for distinct type based on BLOB(n) */ double *arg2; /* for distinct type based on DOUBLE */ char res[5]; /* for distinct type based on CHAR(4) */
AS LOCATOR À¯Çü ¼öÁ¤ÀÚ´Â UDF ¹è°³º¯¼ö¿Í °á°ú Á¤ÀÇ¿¡¼¸¸ À¯È¿ÇÕ´Ï´Ù. À̰ÍÀº LOB À¯ÇüÀ̳ª LOB À¯Çü¿¡ ±Ù°ÅÇÏ´Â ±¸º° À¯ÇüÀ» ¼öÁ¤ÇÏ´Â µ¥¿¡¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. À¯Çü ¼öÁ¤ÀÚ¸¦ ÁöÁ¤ÇÏ´Â °æ¿ì, Àüü LOB °ªÀÌ ¾Æ´Ñ 4 ¹ÙÀÌÆ®ÀÇ À§Ä¡ ÁöÁ¤ÀÚ°¡ UDF·Î Àü´ÞµË´Ï´Ù.
¿¹:
sqludf_locator *arg1; /* locator argument */ sqludf_locator *result; /* locator result */
udf_locator À¯ÇüÀº UDF include ÆÄÀÏ: sqludf.h¿¡¼ ¼³¸íµÇ´Â Çì´õ ÆÄÀÏ sqludf.h¿¡ Á¤Àǵ˴ϴÙ. ÀÌ·¯ÇÑ À§Ä¡ ÁöÁ¤ÀÚ »ç¿ë¿¡ ´ëÇÑ ³»¿ëÀº UDF ¸Å°³º¯¼ö ¶Ç´Â °á°ú·Î LOB À§Ä¡ ÁöÁ¤ÀÚ »ç¿ë¿¡¼ ¼³¸íµË´Ï´Ù.
UDF Äڵ带 32-ºñÆ®¿Í 64-ºñÆ® Ç÷§Æû°£¿¡ À̵¿ °¡´ÉÇϵµ·Ï ¸¸µé·Á¸é 64-ºñÆ® °ªÀÌ µé¾î ÀÖ´Â ½ºÅ©·¡Ä¡ ÆÐµå¸¦ ÀÛ¼ºÇÏ°í »ç¿ëÇÏ´Â ¹æ¹ýÀ» º¯°æÇØ¾ß ÇÕ´Ï´Ù. 64-ºñÆ® Æ÷ÀÎÅÍ ¶Ç´Â sqlint64 BIGINT º¯¼ö¿Í °°Àº 64-ºñÆ® °ªÀ» Çϳª ÀÌ»ó Æ÷ÇÔÇÏ´Â ½ºÅ©·¡Ä¡ ÆÐµå ¼öµµ¿¡ ´ëÇØ ±æÀÌ º¯¼ö¸¦ ¸í½ÃÀûÀ¸·Î ¼±¾ðÇÏÁö ¾Ê¾Æµµ µË´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ ¿¹´Â ±¸Á¶ ¼±¾ð¿¡ ¸í½ÃÀû ±æÀÌ º¯¼ö°¡ µé¾î ÀÖÀ¸¹Ç·Î 64-ºñÆ® Ç÷§Æû¿¡¼ÀÇ µ¥ÀÌÅÍ Á¤·Ä ¿¹¿Ü°¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.
struct scratch1 { sqlint32 length; char chars[4]; sqlint64 bigint_var; };
32-ºñÆ®¿Í 64-ºñÆ® Ç÷§Æû°£¿¡ À̵¿ÇÒ ¼ö ÀÖµµ·Ï ÀÌÀü ¿¹¿¡¼ ½ºÅ©·¡Ä¡ ÆÐµå¸¦ ¼±¾ðÇÏ·Á¸é ±¸Á¶ÀÇ ¸í½ÃÀû ±æÀÌ º¯¼öÀÇ ¼±¾ðÀ» Á¦°ÅÇϽʽÿÀ. ´ÙÀ½ ¿¹´Â ¸í½ÃÀû ±æÀÌ º¯¼ö¸¦ ¼±¾ðÇÏÁö ¾Ê°í ½ºÅ©·¡Ä¡ ÆÐµå ±¸Á¶¸¦ ¼±¾ðÇÕ´Ï´Ù.
struct scratch1 { sqlint64 bigint_var; char chars[4]; };
UDF¿¡¼ ¸í½ÃÀû ±æÀÌ º¯¼ö¸¦ ¼±¾ðÇÏÁö ¾Ê´Â ½ºÅ©·¡Ä¡ ÆÐµå ±¸Á¶¸¦ ¾×¼¼½ºÇÏ·Á¸é ´ÙÀ½ Çü½ÄÀ» »ç¿ëÇÏ¿© ½ºÅ©·¡Ä¡ ÆÐµå¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù.
struct scratchpad_data * data = (struct scratchpad_data*)scratch_pointer->data;
¿©±â¼ scratch_pointer´Â UDFÀÇ sqludf_scratchpad Æ÷ÀÎÅ͸¦ ³ªÅ¸³»°í data´Â ½ºÅ©·¡Ä¡ ÆÐµåÀÇ ³»¿ëÀ» ³ªÅ¸³À´Ï´Ù.
ÀÌ include ÆÄÀÏ¿¡´Â UDF ÀÛ¼º½Ã À¯¿ëÇÑ ±¸Á¶, Á¤ÀÇ ¹× °ªµéÀÌ µé¾î ÀÖ½À´Ï´Ù. ÀÌ ÆÄÀÏÀ» »ç¿ëÇÏ´Â °ÍÀº ¼±ÅÃÀûÀÌÁö¸¸, UDF ÄÚµå ¿¹ÀÇ UDF ¿¹¿¡¼ ÀϺΠ¿¹´Â ÀÌ include ÆÄÀÏÀ» »ç¿ëÇÕ´Ï´Ù. UDF ÄÄÆÄÀϽà ÀÌ ÆÄÀÏÀÌ µé¾î ÀÖ´Â µð·ºÅ丮¸¦ ÂüÁ¶ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ µð·ºÅ丮´Â sqllib/includeÀÔ´Ï´Ù.
sqludf.h include ÆÄÀÏÀº Àڱ⠼¼úÀûÀÔ´Ï´Ù. ´ÙÀ½Àº ±× ³»¿ëÀ» °£·«ÇÏ°Ô ¿ä¾àÇÑ °ÍÀÔ´Ï´Ù.
¶ÇÇÑ AS LOCATOR º¸Á¶ ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© Á¤ÀÇµÈ Àμö³ª °á°úÀÇ C ¾ð¾î À¯ÇüÀÌ Æ÷ÇԵ˴ϴÙ.
´ÙÀ½ ÀýÀÇ UDF ¿¹ Áß ÀϺο¡¼´Â sqludf.h¸¦ Æ÷ÇÔ ¹× »ç¿ëÇϰí ÀÖ½À´Ï´Ù.