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


DB2 ¹× UDF°£ÀÇ ÀÎÅÍÆäÀ̽º

ÀÌ Àý¿¡¼­´Â DB2¿Í UDF°£ÀÇ ÀÎÅÍÆäÀ̽º ¼¼ºÎ»çÇ×°ú ÀÎÅÍÆäÀ̽º¸¦ °ü¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â sqludf.h Include ÆÄÀÏ¿¡ ´ëÇØ ¼³¸íµË´Ï´Ù. ÀÌ Include ÆÄÀÏÀº C ¹× C++ UDF¿¡¸¸ Àû¿ëµË´Ï´Ù. Java·Î UDF¸¦ ÄÚµùÇÏ´Â °Í¿¡ ´ëÇÑ Á¤º¸´Â Java UDF ÄÚµùÀÇ Á¤º¸¸¦ ÂüÁ¶ÇϽʽÿÀ.

Àμö¸¦ DB2¿¡¼­ 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-'
 

ÁÖ:¿ÜºÎ ÇÔ¼ö·Î Àü´ÞµÈ À§ÀÇ ÀμöµéÀº °¢°¢ ½ÇÁ¦ °ªÀÌ ¾Æ´Ñ ÇØ´ç °ª¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÔ´Ï´Ù.

ÀÌ ÀμöµéÀº ´ÙÀ½°ú °°½À´Ï´Ù.

SQL-argument
ÀÌ Àμö´Â UDF¸¦ È£ÃâÇϱâ Àü¿¡ DB2¿¡ ÀÇÇØ ¼³Á¤µË´Ï´Ù. ÀÌ °ªÀº n¹ø ¹Ýº¹µÇ´Âµ¥, ¿©±â¼­ nÀº ÇÔ¼ö ÂüÁ¶¿¡ ÁöÁ¤µÈ ÀμöÀÇ ¼öÀÔ´Ï´Ù. À̵é Àμö °¢°¢ÀÇ °ªÀº ÇÔ¼ö È£Ãâ¿¡ ÁöÁ¤µÈ Ç¥Çö½ÄÀ¸·ÎºÎÅÍ °¡Á®¿É´Ï´Ù. À̵éÀº CREATE FUNCTION¹®ÀÇ ÇØ´ç ¸Å°³º¯¼ö Á¤ÀÇÀÇ µ¥ÀÌÅÍ À¯ÇüÀ¸·Î Ç¥ÇöµË´Ï´Ù. ÀÌµé µ¥ÀÌÅÍ À¯ÇüÀÌ C ¾ð¾î ±¸Á¶¿¡ ¸ÊÇεǴ ¹æ¹ýÀº SQL µ¥ÀÌÅÍ À¯ÇüÀÌ UDF·Î Àü´ÞµÇ´Â ¹æ¹ý¿¡ ¼³¸íµÇ¾î ÀÖ½À´Ï´Ù.

DB2´Â µ¥ÀÌÅÍ À¯Çü°ú ¼­¹ö Ç÷§Æû¿¡ µû¶ó SQL-argument¿¡ ´ëÇØ µ¥ÀÌÅ͸¦ Á¤·ÄÇÕ´Ï´Ù.

SQL-result
ÀÌ Àμö´Â DB2·Î ¸®ÅÏÇϱâ Àü¿¡ UDF¿¡ ÀÇÇØ ¼³Á¤µË´Ï´Ù. ½ºÄ®¶ó ÇÔ¼ö´Â ´Ü ÇϳªÀÇ SQL-result¸¦ °®½À´Ï´Ù. Å×À̺í ÇÔ¼öÀÇ °æ¿ì, CREATE FUNCTION¹®ÀÇ RETURNS TABLEÀý¿¡ Á¤ÀÇµÈ ÇÔ¼öÀÇ °¢ °á°ú Ä÷³¿¡ ´ëÇÏ¿© Çϳª¾¿ÀÇ SQL-result°¡ ÀÖ½À´Ï´Ù. À̵éÀº RETURNS TABLEÀý¿¡ Á¤ÀÇµÈ Ä÷³¿¡ ´ëÇÏ¿© À§Ä¡¿¡ ÀÇÇØ ´ëÀÀÇÕ´Ï´Ù. Áï, ù¹øÂ° SQL-result Àμö´Â RETURNS TABLEÀý µî¿¡ Á¤ÀÇµÈ Ã¹¹øÂ° Ä÷³¿¡ ´ëÀÀÇÕ´Ï´Ù.

½ºÄ®¶ó ÇÔ¼ö¿Í Å×À̺í ÇÔ¼ö ¸ðµÎÀÇ °æ¿ì, 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¿¡ ´ëÇØ µ¥ÀÌÅ͸¦ Á¤·ÄÇÕ´Ï´Ù.

SQL-argument-ind
ÀÌ Àμö´Â UDF¸¦ È£ÃâÇϱâ Àü¿¡ DB2¿¡ ÀÇÇØ ¼³Á¤µË´Ï´Ù. À̰ÍÀº ÇØ´ç SQL-argument°¡ ³Î(NULL)ÀÎÁö ¿©ºÎ¸¦ ÆÇº°Çϱâ À§ÇØ UDF¿¡ ÀÇÇØ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. n¹øÂ° SQL-argument-ind°¡ n¹øÂ° SQL-argument(À§¿¡¼­ ¼³¸í)¿¡ ´ëÀÀÇÕ´Ï´Ù. ¿©±â¿¡´Â ´ÙÀ½°ú °°Àº °ªÀÌ Æ÷ÇԵ˴ϴÙ.

0
ÀÌ Àμö°¡ Á¸ÀçÇÏ°í ³Î(NULL)ÀÌ ¾Æ´Õ´Ï´Ù.

-1
ÀÌ Àμö°¡ Á¸ÀçÇÏ°í ±× °ªÀÌ ³Î(NULL)ÀÔ´Ï´Ù.

ÇÔ¼ö°¡ NOT NULL CALLÀ» »ç¿ëÇÏ¿© Á¤ÀÇµÈ °æ¿ì, UDF º»¹®Àº ³Î(NULL) °ªÀ» È®ÀÎÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. ±×·¯³ª NULL CALLÀ» »ç¿ëÇÏ¿© Á¤ÀÇµÈ °æ¿ì, ¾î¶² Àμöµç NULLÀÌ µÉ ¼ö ÀÖÀ¸¸ç, UDF´Â À̰ÍÀ» È®ÀÎÇØ¾ß ÇÕ´Ï´Ù.

Ç¥½Ã±â´Â SMALLINT °ªÀÇ ÇüÅÂÀ̸ç, À̰ÍÀº SQL µ¥ÀÌÅÍ À¯ÇüÀÌ UDF·Î Àü´ÞµÇ´Â ¹æ¹ý¿¡ ¼³¸íµÈ ´ë·Î »ç¿ëÀÚ UDF¿¡ Á¤ÀÇµÉ ¼ö ÀÖ½À´Ï´Ù. DB2´Â µ¥ÀÌÅÍ À¯Çü°ú ¼­¹ö Ç÷§Æû¿¡ µû¶ó SQL-argument-ind¿¡ ´ëÇØ µ¥ÀÌÅ͸¦ Á¤·ÄÇÕ´Ï´Ù.

SQL-result-ind
ÀÌ Àμö´Â DB2·Î ¸®ÅÏÇϱâ Àü¿¡ UDF¿¡ ÀÇÇØ ¼³Á¤µË´Ï´Ù. °¢ SQL-result Àμö´Â ´ÙÀ½ Áß Çϳª°¡ µÉ ¼ö ÀÖ½À´Ï´Ù.

ÀÌ Àμö´Â ƯÁ¤ °á°ú °ªÀÌ ³Î(NULL)ÀÎÁö ¿©ºÎ¸¦ ¾Ë¸®±â À§ÇØ UDF¿¡ ÀÇÇØ »ç¿ëµË´Ï´Ù.

0 ¶Ç´Â ¾ç¼ö
°á°ú°¡ ³Î(NULL)ÀÌ ¾Æ´Õ´Ï´Ù.
À½¼ö
°á°ú°¡ ³Î(NULL) °ªÀÔ´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº À½¼ö SQL-result-ind °ª ÇØ¼®ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

À½¼ö SQL-result-ind °ª ÇØ¼®:

DB2´Â ´ÙÀ½ÀÌ ÂüÀÎ °æ¿ì, ÇÔ¼ö °á°ú¸¦ ³Î(-2)·Î Ãë±ÞÇÕ´Ï´Ù.

¶ÇÇÑ NOT NULL CALL ¿É¼ÇÀ» »ç¿ëÇÏ¿© ÇÔ¼ö¸¦ Á¤ÀÇÇÑ °æ¿ìµµ ÂüÀÌ µË´Ï´Ù.

NOT NULL CALLÀ» »ç¿ëÇÏ¿© ÇÔ¼ö°¡ Á¤ÀÇµÈ °æ¿ì¿¡µµ, UDF º»¹®Àº °á°ú Ç¥½Ã±â¸¦ ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ³ª´©±â ÇÔ¼ö´Â ºÐ¸ð°¡ 0ÀÏ ¶§, °á°ú¸¦ ³Î(NULL)·Î ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

Ç¥½Ã±â´Â SMALLINT °ªÀÇ ÇüŸ¦ ¶ì¸ç, À̰ÍÀº SQL µ¥ÀÌÅÍ À¯ÇüÀÌ UDF·Î Àü´ÞµÇ´Â ¹æ¹ý¿¡ ¼³¸íµÈ´ë·Î »ç¿ëÀÚ UDF¿¡ Á¤ÀÇµÉ ¼ö ÀÖ½À´Ï´Ù.

UDF°¡ RESULT Ä÷³ ¸ñ·ÏÀ» »ç¿ëÇÏ¿© Å×À̺í ÇÔ¼ö ÃÖÀûÈ­¸¦ »ç¿ëÇϸé Çʼö Ä÷³¿¡ ÇØ´çµÇ´Â Ç¥½Ã±â¸¸ ¼³Á¤µÇ¾î¾ß ÇÕ´Ï´Ù.

DB2´Â µ¥ÀÌÅÍ À¯Çü°ú ¼­¹ö Ç÷§Æû¿¡ µû¶ó SQL-°á°ú-ind¿¡ ´ëÇØ µ¥ÀÌÅ͸¦ Á¤·ÄÇÕ´Ï´Ù.

SQL-state
ÀÌ Àμö´Â DB2·Î ¸®ÅÏÇϱâ Àü¿¡ UDF¿¡ ÀÇÇØ ¼³Á¤µË´Ï´Ù. À̰ÍÀº CHAR(5) °ªÀÇ ÇüÅÂÀÔ´Ï´Ù. UDFÀÇ Àμö Á¤ÀÇ´Â SQL µ¥ÀÌÅÍ À¯ÇüÀÌ UDF·Î Àü´ÞµÇ´Â ¹æ¹ý¿¡¼­ ¼³¸íµÈ´ë·Î CHAR(5)¿¡ ÀûÀýÇϸç, °æ°í ¶Ç´Â ¿À·ù Á¶°ÇÀ» ¾Ë¸®±â À§ÇØ UDF¿¡ ÀÇÇØ »ç¿ëµË´Ï´Ù. ÀÌ ÇÔ¼ö°¡ È£ÃâµÉ ¶§ ¿©±â¿¡´Â '00000' °ªÀÌ Æ÷ÇԵ˴ϴÙ. UDF´Â ÀÌ °ªÀ» ´ÙÀ½¿¡ ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

00000
ÇÔ¼ö Äڵ尡 °æ°í³ª ¿À·ù »óŸ¦ ¹ß°ßÇÏÁö ¸øÇß½À´Ï´Ù.

01Hxx
ÇÔ¼ö Äڵ尡 °æ°í »óŸ¦ ¹ß°ßÇß½À´Ï´Ù. À̰ÍÀº SQL °æ°í SQLCODE +462(SQLSTATE 01Hxx)¸¦ ¹ß»ý½Ãŵ´Ï´Ù. ¿©±â¿¡¼­ 'xx'´Â ÀÓÀÇÀÇ ¹®ÀÚ¿­ÀÔ´Ï´Ù.

02000
Å×À̺í ÇÔ¼ö¿¡ ´ëÇÑ FETCH È£Ãâ¿¡¸¸ À¯È¿Çϸç, Å×ÀÌºí¿¡ ÇàÀÌ ¾øÀ½À» ÀǹÌÇÕ´Ï´Ù.

38502
UDF º»¹®ÀÌ SQL È£ÃâÀ» ½ÇÇàÇÏ°í ¿À·ù SQLCODE -487(SQLÀÌ UDF¿¡¼­ Çã¿ëµÇÁö ¾ÊÀ¸¹Ç·Î SQLSTATE 38502)À» ¼ö½ÅÇϰí, ÀÌ ¿À·ù¸¦ DB2·Î Àü´ÞÇϱâ·Î ¼±ÅÃÇÑ °æ¿ìÀÇ Æ¯º°ÇÑ °ª.

±âŸ 38xxx
ÇÔ¼ö Äڵ尡 ¿À·ù »óŸ¦ ¹ß°ßÇß½À´Ï´Ù. À̰ÍÀº SQL ¿À·ù, SQLCODE -443(SQLSTATE 38xxx)À» ¹ß»ý½Ãŵ´Ï´Ù. ¿©±â¿¡¼­ 'xxx'´Â ÀÓÀÇÀÇ ¹®ÀÚ¿­ÀÔ´Ï´Ù. 380xx¿¡¼­ 384xx±îÁöÀÇ °ªµéÀº SQL92 ±¹Á¦ Ç¥ÁØ¿¡ ´ëÇÑ µå·¡ÇÁÆ® È®Àå¿¡ ÀÇÇØ ¿¹¾àµÇ¾î ÀÖ´Â °ªÀ̹ǷΠ»ç¿ëÇÒ ¼ö ¾øÀ¸¸ç, 385xx´Â IBM¿¡ ÀÇÇØ ¿¹¾àµÇ¾î ÀÖÀ¸¹Ç·Î »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.

±âŸ ´Ù¸¥ °ªÀº ¿À·ù »óÅ·Π󸮵Ǿî SQLCODE -463(SQLSTATE 39001)À» ¹ß»ý½Ãŵ´Ï´Ù.

function-name
ÀÌ Àμö´Â UDF¸¦ È£ÃâÇϱâ Àü¿¡ DB2¿¡ ÀÇÇØ ¼³Á¤µË´Ï´Ù. À̰ÍÀº DB2¿¡¼­ UDF ÄÚµå·Î Àü´ÞµÇ´Â ¿ÏÀüÇÑ ÇÔ¼ö À̸§ÀÔ´Ï´Ù. ÀÌ º¯¼ö´Â VARCHAR(27) °ªÀÇ ÇüÅÂÀÔ´Ï´Ù. UDFÀÇ Àμö Á¤ÀÇ´Â VARCHAR(27)¿¡ ÀûÀýÇØ¾ß ÇÕ´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº SQL µ¥ÀÌÅÍ À¯ÇüÀÌ UDF·Î Àü´ÞµÇ´Â ¹æ¹ýÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

Àü´ÞµÇ´Â ÇÔ¼ö À̸§ÀÇ Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.

     <schema-name>.<function-name>

°¢ ºÎºÐÀº ¸¶Ä§Ç¥·Î ±¸ºÐµË´Ï´Ù. ´ÙÀ½°ú °°Àº µÎ °¡Áö ¿¹°¡ ÀÖ½À´Ï´Ù.

     PABLO.BLOOP       WILLIE.FINDSTRING

ÀÌ Çü½ÄÀ» »ç¿ëÇÏ¿© »ç¿ëÀÚ´Â µ¿ÀÏÇÑ UDF º»¹®À» º¹¼öÀÇ ¿ÜºÎ ÇÔ¼ö¿¡ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, È£ÃâµÉ ¶§ ÀÌ ÇÔ¼öµéÀ» ±¸º°ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÁÖ:¿ÀºêÁ§Æ® À̸§°ú ½ºÅ°¸¶ À̸§¿¡ ¸¶Ä§Ç¥¸¦ Æ÷ÇÔ½Ãų ¼ö ÀÖÀ¸³ª, ±ÇÀåµÇÁö´Â ¾Ê½À´Ï´Ù. ¿¹¸¦ µé¾î, ÇÔ¼ö rotate°¡ ½ºÅ°¸¶ obj.op¿¡ ÀÖ´Â °æ¿ì ¸®ÅϵǴ ÇÔ¼ö À̸§Àº obj.op.rotateÀε¥, ÀÌ·¯ÇÑ °æ¿ì, ½ºÅ°¸¶ À̸§ÀÌ objÀÎÁö ¶Ç´Â obj.opÀÎÁö ºÐ¸íÇÏÁö ¾Ê½À´Ï´Ù.

specific-name
ÀÌ Àμö´Â UDF¸¦ È£ÃâÇϱâ Àü¿¡ DB2¿¡ ÀÇÇØ ¼³Á¤µË´Ï´Ù. À̰ÍÀº DB2¿¡¼­ UDF ÄÚµå·Î Àü´ÞµÇ´Â ÇÔ¼öÀÇ °íÀ¯ÇÑ À̸§ÀÔ´Ï´Ù. ÀÌ º¯¼ö´Â VARCHAR(18) °ªÀÇ ÇüÅÂÀÔ´Ï´Ù. UDFÀÇ Àμö Á¤ÀÇ´Â VARCHAR(18)¿¡ ÀûÀýÇØ¾ß ÇÕ´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº SQL µ¥ÀÌÅÍ À¯ÇüÀÌ UDF·Î Àü´ÞµÇ´Â ¹æ¹ýÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. ´ÙÀ½°ú °°Àº µÎ °¡Áö ¿¹°¡ ÀÖ½À´Ï´Ù.
     willie_find_feb99       SQL9904281052440430

ù¹øÂ° °ªÀº »ç¿ëÀÚÀÇ CREATE FUNCTION¹®¿¡¼­ »ç¿ëÀÚ°¡ ÁöÁ¤ÇÕ´Ï´Ù. »ç¿ëÀÚ°¡ °ªÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é µÑ° °ªÀº ÇöÀç ½Ã°£¼ÒÀο¡¼­ DB2¿¡ ÀÇÇØ »ý¼ºµË´Ï´Ù.

function-name Àμö¿¡¼­¿Í °°ÀÌ, ÀÌ °ªÀ» Àü´ÞÇÏ´Â ÀÌÀ¯´Â UDF¿¡°Ô ¾î¶² ¼¼ºÎ ÇÔ¼ö°¡ À̰ÍÀ» È£ÃâÇß´ÂÁö¸¦ Á¤È®È÷ ½Äº°ÇÒ ¼ö ÀÖ´Â ¼ö´ÜÀ» Á¦°øÇϱâ À§ÇÑ °ÍÀÔ´Ï´Ù.

diagnostic-message
ÀÌ Àμö´Â DB2·Î ¸®ÅÏÇϱâ Àü¿¡ UDF¿¡ ÀÇÇØ ¼³Á¤µË´Ï´Ù. UDF´Â ÀÌ Àμö¸¦ »ç¿ëÇÏ¿© DB2 ¸Þ½ÃÁö¿¡ ¸Þ½ÃÁö ÅØ½ºÆ®¸¦ »ðÀÔÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº VARCHAR(70) °ªÀÇ ÇüÅÂÀÔ´Ï´Ù. UDFÀÇ Àμö Á¤ÀÇ´Â VARCHAR(70)¿¡ ÀûÀýÇØ¾ß ÇÕ´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº SQL µ¥ÀÌÅÍ À¯ÇüÀÌ 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´Â ¾î¶² ÄÚµå ÆäÀÌÁö·Îµç ¸Þ½ÃÁö ÅäÅ«À» ¸®ÅÏÇÒ ¼ö ÀÖ½À´Ï´Ù.

scratchpad
ÀÌ Àμö´Â UDF¸¦ È£ÃâÇϱâ Àü¿¡ DB2¿¡ ÀÇÇØ ¼³Á¤µË´Ï´Ù. À̰ÍÀº UDF¿¡ ´ëÇÑ CREATE FUNCTION¹®ÀÌ SCRATCHPAD Ű¿öµå¸¦ ÁöÁ¤ÇÑ °æ¿ì¿¡¸¸ Á¸ÀçÇÕ´Ï´Ù. ÀÌ Àμö´Â LOB µ¥ÀÌÅÍ À¯Çü °ªÀ» Àü´ÞÇÏ´Â µ¥ »ç¿ëµÇ´Â ±¸Á¶¿Í ¶È°°Àº ±¸Á¶·Î¼­, ´ÙÀ½°ú °°Àº ¿ä¼ÒµéÀÌ Æ÷ÇԵ˴ϴÙ.

Àü´ÞµÈ Àμö°¡ °°Àº ±¸Á¶¸¦ °¡Áö°í ÀÖÀ¸¹Ç·Î, CLOB³ª BLOB Áß Çϳª¿Í µ¿ÀÏÇÑ À¯ÇüÀ» »ç¿ëÇÏ¿© UDF¿¡ ½ºÅ©·¡Ä¡ ÆÐµå¸¦ ¸ÊÇÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº SQL µ¥ÀÌÅÍ À¯ÇüÀÌ UDF·Î Àü´ÞµÇ´Â ¹æ¹ýÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

UDF ÄÚµå´Â ½ºÅ©·¡Ä¡ ÆÐµå ¹öÆÛ ¿ÜºÎ¿¡¼­´Â º¯°æÀ» ¼öÇàÇÏÁö ¾ÊÀ½À» ÁÖÀÇÇϽʽÿÀ. DB2´Â UDF º»¹®ÀÌ ÀÌ ¹öÆÛ ³¡ ÀÌÈÄ·Î ±â·ÏÇß´ÂÁö¸¦ ¸î ¸î ¹®ÀÚ, SQLCODE -450(SQLSTATE 39501)À¸·Î ÆÇº°ÇÏ·Á Çϴµ¥, UDF¿¡ ÀÇÇÑ ÁÖ¿ä °ãÃľ²±â°¡ ¿¹»óÄ¡ ¸øÇÑ °á°ú³ª ÀÌ»ó Á¾·á¸¦ ¹ß»ý½Ãų ¼ö ÀÖÀ¸¸ç, ¹ß»ýµÇ´Â Àå¾Ö°¡ DB2¿¡¼­ Çã¿ëµÇÁö ¾Ê´Â °ÍÀÏ ¼ö ÀÖ½À´Ï´Ù.

½ºÅ©·¡Ä¡ ÆÐµå¸¦ »ç¿ëÇÏ´Â ½ºÄ®¶ó UDF°¡ ºÎ¼Ó Á¶È¸¿¡¼­ ÂüÁ¶µÈ °æ¿ì, DB2´Â ºÎ¼Ó Á¶È¸ È£Ãâµé »çÀÌ¿¡¼­ ½ºÅ©·¡Ä¡ ÆÐµå¸¦ »õ·Î °íÄ¡±â·Î °áÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ »õ·Î °íħÀº UDF¿¡ FINAL CALLÀÌ ÁöÁ¤µÈ °æ¿ì, ÃÖÁ¾ È£ÃâÀÌ ÀÌ·ç¾îÁø ÈÄ¿¡ ¹ß»ýÇÕ´Ï´Ù.

DB2´Â µ¥ÀÌÅÍ Çʵ尡 µ¥ÀÌÅÍ À¯ÇüÀÇ ÀúÀå¿¡ ´ëÇØ Á¤·ÄµÇµµ·Ï ½ºÅ©·¡Ä¡ ÆÐµå¸¦ ÃʱâÈ­ÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÏ¸é ±æÀÌ Çʵ带 Æ÷ÇÔÇÑ Àüü ½ºÅ©·¡Ä¡ ÆÐµå°¡ Á¦´ë·Î Á¤·ÄµÇÁö ¾Ê½À´Ï´Ù. ½ºÅ©·¡Ä¡ ÆÐµå ¼±¾ð ¹× ¾×¼¼½º¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº 32-ºñÆ® ¹× 64-ºñÆ® Ç÷§Æû¿¡¼­ÀÇ ½ºÅ©·¡Ä¡ ÆÐµå ÀÛ¼ºÀ» ÂüÁ¶ÇϽʽÿÀ.

call-type
ÀÌ Àμö´Â, Á¸ÀçÇÏ´Â °æ¿ì, UDF¸¦ È£ÃâÇϱâ Àü¿¡ DB2¿¡ ÀÇÇØ ¼³Á¤µË´Ï´Ù. ½ºÄ®¶ó ÇÔ¼öÀÇ °æ¿ì, ÀÌ Àμö´Â CREATE FUNCTION¹®¿¡ FINAL CALLÀÌ ÁöÁ¤µÈ °æ¿ì¿¡¸¸ Á¸ÀçÇÏÁö¸¸, Å×À̺í ÇÔ¼öÀÇ °æ¿ì Ç×»ó Á¸ÀçÇÕ´Ï´Ù. À̰ÍÀº scratchpad Àμö µÚ¿¡ ³ª¿À°Å³ª, scratchpad Àμö°¡ ¾ø´Â °æ¿ì diagnostic-message Àμö µÚ¿¡ ³ª¿É´Ï´Ù. ÀÌ Àμö´Â INTEGER °ªÀÇ Çü½ÄÀÔ´Ï´Ù. UDFÀÇ Àμö Á¤ÀÇ´Â INTEGER¿¡ ÀûÀýÇØ¾ß ÇÕ´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº SQL µ¥ÀÌÅÍ À¯ÇüÀÌ UDF·Î Àü´ÞµÇ´Â ¹æ¹ýÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

ÇöÀç »ç¿ëÇÒ ¼ö ÀÖ´Â ¸ðµç °ªµéÀÌ ¾Æ·¡¿¡ ³ª¿­µÇ¾î À־, »ç¿ëÀÚÀÇ UDF¿¡ "if A do AA, else if B do BB, else it must be C so do CC" À¯ÇüÀÇ ³í¸®°¡ ¾Æ´Ñ, ¿¹»óµÇ´Â ¸ðµç °ªµéÀ» ¸í¹éÇÏ°Ô Å×½ºÆ®ÇÏ´Â switch³ª case¹®ÀÌ Æ÷ÇԵǾî¾ß ÇÕ´Ï´Ù. À̰ÍÀº Ãß°¡ÀûÀΠȣÃâ À¯ÇüÀÌ ¾ÕÀ¸·Î Ãß°¡µÉ ¼öµµ ÀÖÀ¸¸ç, ¸í¹éÇÏ°Ô Á¶°Ç C¿¡ ´ëÇÏ¿© Å×½ºÆ®ÇÏÁö ¾Ê´Â °æ¿ì, »õ·Î¿î °¡´É¼ºÀÌ Ãß°¡µÉ ¶§ ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.

ÁÖ:

  1. ¸ðµç È£Ãâ-À¯Çü¿¡ ´ëÇØ UDF°¡ SQL-state ¹× diagnostic-message ¸®ÅÏ °ªÀ» ¼³Á¤ÇÏ´Â °ÍÀÌ ÀûÀýÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ Á¤º¸´Â ´ÙÀ½ÀÇ °¢ À¯Çü¿¡ ´ëÇÑ ¼³¸í¿¡¼­ ¹Ýº¹µÇÁö ¾Ê½À´Ï´Ù. ¸ðµç È£Ãâ¿¡ ´ëÇÏ¿© DB2´Â ÀÌ Àμöµé¿¡ ´ëÇÏ¿© ¾Õ¼­ ¼³¸íµÈ ÁöÁ¤µÈ Á¶Ä¡¸¦ ÃëÇÏ°Ô µË´Ï´Ù.

  2. include ÆÄÀÏ sqludf.h´Â UDF¿Í ÇÔ²² »ç¿ëµÇ¸ç, UDF include ÆÄÀÏ: sqludf.h¿¡ ¼³¸íµÇ¾î ÀÖ½À´Ï´Ù. ÀÌ ÆÄÀÏ¿¡´Â »ó¼ö·Î ÇØ¼®µÇ´Â ´ÙÀ½°ú °°Àº call-type °ª¿¡ ´ëÇÑ ±âÈ£ Á¤Àǰ¡ µé¾î ÀÖ½À´Ï´Ù.

½ºÄ®¶ó ÇÔ¼ö¿¡ ´ëÇØ call-type¿¡´Â ´ÙÀ½ÀÌ Æ÷ÇԵ˴ϴÙ.

-1
À̰ÍÀº ÀÌ ¸í·É¹®¿¡¼­ UDF¿¡ ´ëÇÑ FIRST È£ÃâÀÔ´Ï´Ù. ½ºÅ©·¡Ä¡ ÆÐµå°¡ ÀÖ´Â °æ¿ì, ½ºÅ©·¡Ä¡ ÆÐµå´Â UDF°¡ È£ÃâµÉ ¶§ 2Áø 0À¸·Î ¼³Á¤µË´Ï´Ù. ¸ðµç Àμö °ªÀÌ Àü´ÞµÇ°í, UDF´Â ÇÑ ¹øÀÇ ÃʱâÈ­ Á¶Ä¡¸¦ ÇÊ¿ä·Î ÇÏ´Â °ÍÀ̶ó¸é ¾î¶² °ÍÀ̵ç ÇØ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ ½ºÄ®¶ó UDF¿¡ ´ëÇÑ FIRST È£ÃâÀº ÀÀ´äÀ» ÀÛ¼ºÇÏ¿© ¸®ÅÏÇØ¾ß ÇÑ´Ù´Â Á¡¿¡¼­ NORMAL È£Ãâ°ú °°½À´Ï´Ù.

SCRATCHPAD°¡ ÁöÁ¤µÇ¾úÀ¸³ª FINAL CALLÀÌ ÁöÁ¤µÇÁö ¾ÊÀº °æ¿ì, UDF´Â ÃÖÃÊÀÇ È£ÃâÀ» ½Äº°Çϱâ À§ÇÑ ÀÌ·¯ÇÑ call-type Àμö¸¦ °®Áö ¾Ê½À´Ï´Ù. ´ë½Å ½ºÅ©·¡Ä¡ ÆÐµåÀÇ ¿ÏÀü Á¦·Î(all-zero) »óÅ¿¡ ÀÇÁ¸ÇØ¾ß ÇÕ´Ï´Ù.

0
À̰ÍÀº NORMAL È£ÃâÀÔ´Ï´Ù. ¸ðµç SQL ÀÔ·Â °ªÀÌ Àü´ÞµÇ°í UDF´Â °á°ú¸¦ ÀÛ¼º ¹× ¸®ÅÏÇØ¾ß ÇÕ´Ï´Ù. UDF´Â SQL-state ¹× diagnostic-message Á¤º¸¸¦ ¸®ÅÏÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

1
À̰ÍÀº FINAL È£Ãâ·Î¼­, SQL-argument³ª SQL-argument-ind °ªÀÌ Àü´ÞµÇÁö ¾ÊÀ¸¸ç, ÀÌµé °ªÀ» Á¶»çÇÏ·Á´Â ½Ãµµ°¡ ¿¹»óÄ¡ ¸øÇÑ °á°ú¸¦ ¹ß»ý½Ãų ¼ö ÀÖ½À´Ï´Ù. ½ºÅ©·¡Ä¡ ÆÐµåµµ Àü´ÞµÇ´Â °æ¿ì, À̰ÍÀº ÀÌÀü È£Ãâ¿¡¼­ °Çµå¸®Áö ¾Ê½À´Ï´Ù. UDF´Â ÀÌ ½ÃÁ¡¿¡¼­ ÀÚ¿øÀ» ¸±¸®½ºÇÏ°Ô µË´Ï´Ù.

ÀÚ¿ø ¸±¸®½º

½ºÄ®¶ó UDF´Â ¿¹¸¦ µé¾î ¸Þ¸ð¸®¿Í °°Àº ÀÚ½ÅÀÌ ÇÊ¿ä·Î Çß´ø ÀÚ¿øÀ» ¸±¸®½ºÇÏ°Ô µË´Ï´Ù. FINAL CALLÀÌ UDF¿¡ ÁöÁ¤µÇ¸é, SCRATCHPADµµ ¿ª½Ã ÁöÁ¤µÇ°í ÀÚ¿øÀ» ÃßÀûÇÏ´Â µ¥ »ç¿ëµÈ °æ¿ì, ÇØ´ç FINAL È£ÃâÀÌ ÀÚ¿øÀ» ¸±¸®½ºÇÏ´Â À§Ä¡°¡ µË´Ï´Ù. FINAL CALLÀÌ ÁöÁ¤µÇÁö ¾ÊÀº °æ¿ì, ȹµæÇÑ ÀÚ¿øÀº µ¿ÀÏÇÑ È£Ãâ¿¡¼­ ¸±¸®½ºµÇ¾î¾ß ÇÕ´Ï´Ù.

Å×À̺í ÇÔ¼öÀÇ °æ¿ì call-type¿¡´Â ´ÙÀ½ÀÌ Æ÷ÇԵ˴ϴÙ.

-2
À̰ÍÀº FIRST È£Ãâ·Î¼­, UDF¿¡ FINAL CALL Ű¿öµå°¡ ÁöÁ¤µÈ °æ¿ì¿¡¸¸ ¹ß»ýÇÕ´Ï´Ù. ½ºÅ©·¡Ä¡ ÆÐµå´Â ÀÌ È£Ãâ Àü¿¡ 2Áø 0À¸·Î ¼³Á¤µË´Ï´Ù. Àμö °ªÀÌ Å×À̺í ÇÔ¼ö·Î Àü´ÞµÇ°í, ¸Þ¸ð¸®¸¦ È®º¸ÇÒ °ÍÀÎÁö ¶Ç´Â ´Ù¸¥ 1ȸ¼ºÀÇ ÀÚ¿ø ÃʱâÈ­¸¦ ¼öÇàÇÒ °ÍÀÎÁö¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº OPEN È£ÃâÀÌ ¾Æ´Ï¸ç, À̰ÍÀÌ OPEN È£Ãâ µÚ¿¡ ³ª¿È¿¡ ÁÖÀÇÇϽʽÿÀ. ÃÖÃÊ È£Ãâ¿¡¼­ Å×À̺í ÇÔ¼ö´Â DB2°¡ µ¥ÀÌÅ͸¦ ¹«½ÃÇϹǷΠDB2¿¡ ¾î¶°ÇÑ µ¥ÀÌÅ͵µ ¸®ÅÏÇØ¼­´Â ¾ÈµË´Ï´Ù.

-1
À̰ÍÀº OPEN È£ÃâÀÔ´Ï´Ù. NO FINAL CALLÀÌ ÁöÁ¤µÈ °æ¿ì ½ºÅ©·¡Ä¡ ÆÐµå°¡ ÃʱâÈ­µÇÁö¸¸, ±×·¸Áö ¾ÊÀº °æ¿ì, ¹Ýµå½Ã ÃʱâÈ­µÇÁö ¾Ê´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ¸ðµç SQL Àμö °ªÀÌ OPEN½Ã Å×À̺í ÇÔ¼ö·Î Àü´ÞµË´Ï´Ù. Å×À̺í ÇÔ¼ö´Â OPEN È£Ãâ½Ã DB2·Î ¾î¶°ÇÑ µ¥ÀÌÅ͵µ ¸®ÅÏÇØ¼­´Â ¾ÈµË´Ï´Ù.

0
À̰ÍÀº FETCH È£ÃâÀ̸ç, DB2¿¡¼­´Â Å×À̺í ÇÔ¼ö°¡ ¸®ÅÏ °ª ¼¼Æ®·Î ±¸¼ºµÇ´Â ÇÑ ÇàÀ̰ųª SQLSTATE °ª '02000'À¸·Î Ç¥½ÃµÇ´Â Å×ÀÌºí ³¡ Á¶°Ç Áß ¾î´À Çϳª¸¦ ¸®ÅÏÇØ¾ß ÇÕ´Ï´Ù. ½ºÅ©·¡Ä¡ ÆÐµå°¡ UDF·Î Àü´ÞµÇ´Â °æ¿ì, ÀԷ½à ÀÌÀü È£Ãâ¿¡¼­ °Çµå¸®Áö ¾Ê½À´Ï´Ù.

1
À̰ÍÀº Å×À̺í ÇÔ¼ö¿¡ ´ëÇÑ CLOSE È£ÃâÀÔ´Ï´Ù. À̰ÍÀº OPEN È£Ãâ°ú ¦À» ÀÌ·ç¸ç, ¿ÜºÎ CLOSE ó¸®(¿¹¸¦ µé¾î ¼Ò½º ÆÄÀÏ ´Ý±â) ¹× ÀÚ¿ø ¸±¸®½º(ƯÈ÷ NO FINAL CALL ÄÉÀ̽º¿¡ ´ëÇÏ¿©)¸¦ ¼öÇàÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.

Á¶ÀÎÀ̳ª ºÎ¼Ó Á¶È¸¸¦ »ç¿ëÇÏ´Â °æ¿ì, OPEN/FETCH.../CLOSE È£Ãâ ÀýÂ÷´Â ¸í·É¹® ½ÇÇà ³»¿¡¼­ ¹Ýº¹µÉ ¼ö ÀÖÀ¸³ª, ´Ü ÇϳªÀÇ FIRST È£Ãâ°ú ´Ü ÇϳªÀÇ FINAL È£Ã⸸ÀÌ ÀÖ½À´Ï´Ù. FIRST¿Í FINAL È£ÃâÀº ÇØ´ç Å×À̺í ÇÔ¼ö¿¡ ´ëÇÏ¿© FINAL CALLÀÌ ÁöÁ¤µÈ °æ¿ì¿¡¸¸ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.

2
À̰ÍÀº FINAL È£ÃâÀ̸ç, Å×À̺í ÇÔ¼ö¿¡ ´ëÇÏ¿© FINAL CALLÀÌ ÁöÁ¤µÈ °æ¿ì¿¡¸¸ ¹ß»ýÇÕ´Ï´Ù. À̰ÍÀº FIRST È£Ãâ°ú ¦À» ÀÌ·ç¸ç, ¸í·É¹® ½ÇÇà½Ã ´Ü ÇÑ ¹ø¸¸ ¹ß»ýÇÕ´Ï´Ù. À̰ÍÀº ÀÚ¿ø ¸±¸®½º¸¦ ¸ñÀûÀ¸·Î ÇÕ´Ï´Ù.

ÀÚ¿ø ¸±¸®½º

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°¡ ¿©·¯ ¹ø ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.

dbinfo
ÀÌ Àμö´Â UDF¸¦ È£ÃâÇϱâ Àü¿¡ DB2¿¡ ÀÇÇØ ¼³Á¤µË´Ï´Ù. À̰ÍÀº UDF¿¡ ´ëÇÑ CREATE FUNCTION¹®ÀÌ DBINFO Ű¿öµå¸¦ ÁöÁ¤ÇÑ °æ¿ì¿¡¸¸ Á¸ÀçÇÕ´Ï´Ù. Àμö´Â UDF include ÆÄÀÏ: sqludf.h¿¡¼­ ¼³¸íµÈ sqludf.h Çì´õ ÆÄÀÏ¿¡¼­ Á¤ÀÇµÈ sqludf_dbinfo ±¸Á¶ÀÔ´Ï´Ù. ÀÌ ±¸Á¶ÀÇ º¯¼ö¿¡´Â À̸§ÀÌ Æ÷ÇԵǸç, ½Äº°ÀÚ´Â ÀÌ DB2 ¸±¸®½º¿¡¼­ Çã¿ëµÇ´Â °¡Àå ±ä °ªº¸´Ù ´õ ±æ ¼ö ÀÖÀ¸³ª, Â÷ÈÄÀÇ ¸±¸®½º¿ÍÀÇ È£È¯¼ºÀ» À§ÇØ ÀÌ·± ¹æ¹ýÀ¸·Î Á¤Àǵ˴ϴÙ. ½ÇÁ¦ »ç¿ëµÇ´Â º¯¼öÀÇ ÀϺθ¦ Àаųª ÃßÃâÇϱâ À§ÇØ °¢ À̸§°ú ½Äº°ÀÚ º¯¼ö¸¦ º¸¿ÏÇÏ´Â ±æÀÌ º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. dbinfo ±¸Á¶¿¡´Â ´ÙÀ½°ú °°Àº ¿ä¼ÒµéÀÌ Æ÷ÇԵ˴ϴÙ.
  1. µ¥ÀÌÅͺ£À̽º À̸§ ±æÀÌ(dbnamelen)

    µ¥ÀÌÅͺ£À̽º À̸§ÀÇ ±æÀÌ´Â ´ÙÀ½°ú °°½À´Ï´Ù. ÀÌ Çʵå´Â ºÎÈ£¾ø´Â short Á¤¼öÀÔ´Ï´Ù.

  2. µ¥ÀÌÅͺ£À̽º À̸§(dbname)

    ÇöÀç ¿¬°áµÈ µ¥ÀÌÅͺ£À̽ºÀÇ À̸§. ÀÌ Çʵå´Â 128ÀÚÀÇ ±ä ½Äº°ÀÚÀÔ´Ï´Ù. À§¿¡¼­ ¼³¸íÇÑ µ¥ÀÌÅͺ£À̽º À̸§ ±æÀÌ Çʵå´Â ÀÌ ÇʵåÀÇ ½ÇÁ¦ ±æÀ̸¦ ½Äº°ÇÕ´Ï´Ù. ¿©±â¿¡´Â ³Î(NULL) Á¾·áÀÚ³ª ÆÐµùÀÌ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù.

  3. ÀÀ¿ëÇÁ·Î±×·¥ ±ÇÇÑ ºÎ¿© ID ±æÀÌ(authidlen)

    ¾Æ·¡ÀÇ ÀÀ¿ëÇÁ·Î±×·¥ ±ÇÇÑ ºÎ¿© IDÀÇ ±æÀÌ. ÀÌ Çʵå´Â ºÎÈ£¾ø´Â short Á¤¼öÀÔ´Ï´Ù.

  4. ÀÀ¿ëÇÁ·Î±×·¥ ±ÇÇÑ ºÎ¿© ID(authid)

    ÀÀ¿ëÇÁ·Î±×·¥ ·±Å¸ÀÓ ±ÇÇÑ ºÎ¿© ID. ÀÌ Çʵå´Â 128ÀÚÀÇ ±ä ½Äº°ÀÚÀÔ´Ï´Ù. ¿©±â¿¡´Â ³Î(NULL) Á¾·áÀÚ³ª ÆÐµùÀÌ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. À§¿¡¼­ ¼³¸íÇÑ ÀÀ¿ëÇÁ·Î±×·¥ ±ÇÇÑ ºÎ¿© ID ±æÀÌ Çʵå´Â ÀÌ ÇʵåÀÇ ½ÇÁ¦ ±æÀ̸¦ ½Äº°ÇÕ´Ï´Ù.

  5. µ¥ÀÌÅͺ£À̽º ÄÚµå ÆäÀÌÁö(codepg)

    À̰ÍÀº 48 ¹ÙÀÌÆ® ±æÀÌÀÇ ±¸Á¶ µÎ °³·Î ±¸¼ºµÈ À¯´Ï¿ÂÀ¸·Î Çϳª´Â DB2 Universal Database¿¡ ÀÇÇØ »ç¿ëµÇ°í ´Ù¸¥ Çϳª´Â Â÷ÈÄ »ç¿ëÀ» À§ÇØ ¿¹¾àµÈ °ÍÀÔ´Ï´Ù. DB2 Universal Database¿¡ ÀÇÇØ »ç¿ëµÇ´Â ±¸Á¶¿¡´Â ´ÙÀ½°ú °°Àº Çʵ尡 Æ÷ÇԵ˴ϴÙ.

    1. SBCS. 1 ¹ÙÀÌÆ® ÄÚµå ÆäÀÌÁö, ºÎÈ£¾ø´Â long Á¤¼ö.
    2. DBCS. 1 ¹ÙÀÌÆ® ÄÚµå ÆäÀÌÁö, ºÎÈ£¾ø´Â long Á¤¼ö.
    3. COMP. º¹ÇÕ ÄÚµå ÆäÀÌÁö, ºÎÈ£¾ø´Â long Á¤¼ö.
  6. ½ºÅ°¸¶ À̸§ ±æÀÌ(tbschemalen)

    ¾Æ·¡ÀÇ ½ºÅ°¸¶ À̸§ÀÇ ±æÀÌ. Å×À̺í À̸§ÀÌ Àü´ÞµÇÁö ¾ÊÀ¸¸é 0ÀÌ Æ÷ÇԵ˴ϴÙ. ÀÌ Çʵå´Â ºÎÈ£¾ø´Â short Á¤¼öÀÔ´Ï´Ù.

  7. ½ºÅ°¸¶ À̸§(tbschema)

    ¾Æ·¡ÀÇ Å×À̺í À̸§¿¡ ´ëÇÑ ½ºÅ°¸¶. ÀÌ Çʵå´Â 128ÀÚÀÇ ±ä ½Äº°ÀÚÀÔ´Ï´Ù. ¿©±â¿¡´Â ³Î(NULL) Á¾·áÀÚ³ª ÆÐµùÀÌ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. À§¿¡¼­ ¼³¸íÇÑ ½ºÅ°¸¶ À̸§ ±æÀÌ Çʵå´Â ÀÌ ÇʵåÀÇ ½ÇÁ¦ ±æÀ̸¦ ½Äº°ÇÕ´Ï´Ù.

  8. Å×À̺í À̸§ ±æÀÌ(tbnamelen)

    ¾Æ·¡ÀÇ Å×À̺í À̸§ÀÇ ±æÀÌ. Å×À̺í À̸§ÀÌ Àü´ÞµÇÁö ¾ÊÀ¸¸é 0ÀÌ Æ÷ÇԵ˴ϴÙ. ÀÌ Çʵå´Â ºÎÈ£¾ø´Â short Á¤¼öÀÔ´Ï´Ù.

  9. Å×À̺í À̸§(tbname)

    À̰ÍÀº °»½ÅµÇ°Å³ª »ðÀԵǴ Å×À̺íÀÇ À̸§ÀÔ´Ï´Ù. ÀÌ Çʵå´Â UDF ÂüÁ¶°¡ UPDATE¹®¿¡¼­ SETÀýÀÇ ¿À¸¥ÂÊ¿¡ Àְųª INSERT¹®ÀÇ VALUES ¸ñ·ÏÀÇ Ç׸ñÀÎ °æ¿ì¿¡¸¸ ¼³Á¤µË´Ï´Ù. ÀÌ Çʵå´Â 128ÀÚÀÇ ±ä ½Äº°ÀÚÀÔ´Ï´Ù. ¿©±â¿¡´Â ³Î(NULL) Á¾·áÀÚ³ª ÆÐµùÀÌ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. À§¿¡¼­ ¼³¸íÇÑ Å×À̺í À̸§ ±æÀÌ Çʵå´Â ÀÌ ÇʵåÀÇ ½ÇÁ¦ ±æÀ̸¦ ½Äº°ÇÕ´Ï´Ù. À§ÀÇ ½ºÅ°¸¶ À̸§ Çʵå´Â ÀÌ Çʵå¿Í ÇÔ²² ¿ÏÀüÇÑ Å×À̺í À̸§À» ±¸¼ºÇÕ´Ï´Ù.

  10. Ä÷³ À̸§ ±æÀÌ(colnamelen)

    ¾Æ·¡ÀÇ Ä÷³ À̸§ÀÇ ±æÀÌ. Ä÷³ À̸§ÀÌ Àü´ÞµÇÁö ¾ÊÀ¸¸é 0ÀÌ Æ÷ÇԵ˴ϴÙ. ÀÌ Çʵå´Â ºÎÈ£¾ø´Â short Á¤¼öÀÔ´Ï´Ù.

  11. Ä÷³ À̸§(colname)

    Å×À̺í À̸§°ú ¿ÏÀüÈ÷ ¶È°°Àº Á¶°Ç ÇÏ¿¡¼­, ÀÌ Çʵå´Â °»½ÅµÇ°Å³ª »ðÀԵǴ Ä÷³ÀÇ À̸§ÀÌ Æ÷ÇԵǸç, ±×·¸Áö ¾ÊÀº °æ¿ì ¿¹ÃøÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ Çʵå´Â 128ÀÚÀÇ ±ä ½Äº°ÀÚÀÔ´Ï´Ù. ¿©±â¿¡´Â ³Î(NULL) Á¾·áÀÚ³ª ÆÐµùÀÌ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. À§¿¡¼­ ¼³¸íÇÑ Ä÷³ À̸§ ±æÀÌ Çʵå´Â ÀÌ ÇʵåÀÇ ½ÇÁ¦ ±æÀ̸¦ ½Äº°ÇÕ´Ï´Ù.

  12. ¹öÀü/¸±¸®½º ¹øÈ£(ver_rel)

    Á¦Ç°°ú À̰ÍÀÇ ¹öÀü, ¸±¸®½º ¹× ¼öÁ¤ ·¹º§À» ½Äº°ÇÏ´Â 8ÀÚ Çʵå·Î, Çü½ÄÀº pppvvrrmÀÌ°í ¿©±â¿¡¼­,

    • ppp´Â ´ÙÀ½°ú °°ÀÌ Á¦Ç°À» ½Äº°ÇÕ´Ï´Ù.
      DSN
      MVS/ESA¿ë DB2 ¶Ç´Â OS/390
      ARI
      SQL/DS
      QSQ
      AS/400¿ë DB2 Universal Database
      SQL
      DB2 Universal Database
    • vv´Â µÎ ÀÚ¸® ¼ýÀÚÀÇ ¹öÀü ½Äº°ÀÚ.
    • rrÀº µÎ ÀÚ¸® ¼ýÀÚÀÇ ¸±¸®½º ½Äº°ÀÚ.
    • mÀº ÇÑ ÀÚ¸® ¼ýÀÚÀÇ ¼öÁ¤ ·¹º§ ½Äº°ÀÚ.
  13. Ç÷§Æû(platform)

    ÀÀ¿ëÇÁ·Î±×·¥ ¼­¹ö¿¡ ´ëÇÑ ¿î¿µ Ç÷§ÆûÀº ´ÙÀ½°ú °°½À´Ï´Ù.

    SQLUDF_PLATFORM_AIX
    AIX
    SQLUDF_PLATFORM_HP
    HP-UX
    SQLUDF_PLATFORM_MVS
    OS/390
    SQLUDF_PLATFORM_NT
    Windows NT
    SQLUDF_PLATFORM_OS2
    OS/2
    SQLUDF_PLATFORM_SUN
    Solaris Operating Environment
    SQLUDF_PLATFORM_WINDOWS
    Windows 95 ¹× Windows 98
    SQLUDF_PLATFORM_UNKNOWN
    ¾Ë ¼ö ¾ø´Â Ç÷§Æû

    À§ ¸ñ·Ï¿¡ ¾ø´Â ±âŸ Ç÷§ÆûÀÇ °æ¿ì, sqludf.h ÆÄÀÏÀ» ÂüÁ¶ÇϽʽÿÀ.

  14. Å×À̺í ÇÔ¼ö Ä÷³ Ç׸ñ(numtfcol)ÀÇ ¹øÈ£

    ¾Æ·¡ÀÇ Å×À̺í ÇÔ¼ö Ä÷³ ¸ñ·Ï¿¡ ÁöÁ¤µÈ Å×À̺í ÇÔ¼ö Ä÷³ ¸ñ·ÏÀÇ 0ÀÌ ¾Æ´Ñ Ç׸ñÀÇ ¼ö.

  15. ¿¹¾àµÈ Çʵå(resd1)

    ÀÌ Çʵå´Â Â÷ÈÄ »ç¿ëÀ» À§ÇÑ °ÍÀÔ´Ï´Ù. À̰ÍÀº 24 ¹®ÀÚ ±æÀÌ·Î Á¤Àǵ˴ϴÙ.

  16. Å×À̺í ÇÔ¼ö Ä÷³ ¸ñ·Ï(tfcolumn)

    À̰ÍÀÌ Å×À̺í ÇÔ¼öÀÎ °æ¿ì, ÀÌ Çʵå´Â 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´Â ¸ðµç °è»ê °á°ú Ä÷³À» ¸®ÅÏÇÏ´Â °ÍÀ¸·Î ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù.

  17. °íÀ¯ ÀÀ¿ëÇÁ·Î±×·¥ ½Äº°ÀÚ(appl_id)

    ÀÌ Çʵå´Â ÀÀ¿ëÇÁ·Î±×·¥°ú DB2ÀÇ ¿¬°áÀ» °íÀ¯ÇÏ°Ô ½Äº°ÇÏ´Â CÀÇ ³Î(NULL) Á¾·á ¹®ÀÚ¿­¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÔ´Ï´Ù. À̰ÍÀº °¢°¢ÀÇ µ¥ÀÌÅͺ£À̽º ¿¬°á½Ã ´Ù½Ã »ý¼ºµË´Ï´Ù.

    ¹®ÀÚ¿­Àº ÃÖ´ë 32ÀÚ ±æÀÌÀ̸ç, Á¤È®ÇÑ Çü½ÄÀº Ŭ¶óÀÌ¾ðÆ®¿Í DB2°£¿¡ ¼³Á¤µÈ ¿¬°á À¯Çü¿¡ µû¶ó ´Ù¸¨´Ï´Ù. ÀϹÝÀûÀ¸·Î Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.

            <x>.<y>.<ts>
    

    ¿©±â¿¡¼­ <x>¿Í <y>´Â ¿¬°á À¯Çü¿¡ µû¶ó ´Ù¸£Áö¸¸, <ts>´Â 12ÀÚÀÇ YYMMDDHHMMSS Çü½ÄÀÇ ½Ã°£¼ÒÀÎÀ¸·Î ÀáÀçÀûÀ¸·Î DB2¿¡ ÀÇÇØ °íÀ¯ÇÑ »óŸ¦ À¯ÁöÇϵµ·Ï Á¶Á¤µË´Ï´Ù.

          ¿¹:  *LOCAL.db2inst.980707130144
    
  18. ¿¹¾àµÈ Çʵå(resd2)

    ÀÌ Çʵå´Â Â÷ÈÄ »ç¿ëÀ» À§ÇÑ °ÍÀÔ´Ï´Ù. À̰ÍÀº 20 ¹®ÀÚ ±æÀÌ·Î Á¤Àǵ˴ϴÙ.

UDF Àμö »ç¿ë ¿ä¾à

´ÙÀ½Àº À§¿¡¼­ ¼³¸íµÈ Àμöµé¿¡ ´ëÇÑ ¿ä¾à ¹× DB2¿Í ¿ÜºÎ UDF°£ÀÇ ÀÎÅÍÆäÀ̽º¿¡¼­ À̵éÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.

½ºÄ®¶ó ÇÔ¼öÀÇ °æ¿ì Àμö´Â ´ÙÀ½°ú °°½À´Ï´Ù.

Å×À̺í ÇÔ¼ö´Â ³í¸®ÀûÀ¸·Î À̰ÍÀ» ÂüÁ¶ÇÏ´Â SQL¹®À¸·Î Å×À̺íÀ» ¸®ÅÏÇÏÁö¸¸, DB2¿Í Å×À̺í ÇÔ¼ö°£ÀÇ ½ÇÁ¦ ÀÎÅÍÆäÀ̽º´Â Çà ´ÜÀ§ÀÔ´Ï´Ù. Å×À̺í ÇÔ¼öÀÇ °æ¿ì, Àμö´Â ´ÙÀ½°ú °°½À´Ï´Ù.

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 ÄÚµå ¿¹ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

SQL µ¥ÀÌÅÍ À¯ÇüÀÌ 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¿¡¼­ÀÇ Àμö Á¤ÀÇ·Î À¯ÇüÀÌ ³ªÅ¸³¯ ¼ö ÀÖ´Â ¹æ¹ýÀÇ ¿¹µµ Æ÷ÇԵ˴ϴÙ.

udf_locator À¯ÇüÀº UDF include ÆÄÀÏ: sqludf.h¿¡¼­ ¼³¸íµÇ´Â Çì´õ ÆÄÀÏ sqludf.h¿¡ Á¤Àǵ˴ϴÙ. ÀÌ·¯ÇÑ À§Ä¡ ÁöÁ¤ÀÚ »ç¿ë¿¡ ´ëÇÑ ³»¿ëÀº UDF ¸Å°³º¯¼ö ¶Ç´Â °á°ú·Î LOB À§Ä¡ ÁöÁ¤ÀÚ »ç¿ë¿¡¼­ ¼³¸íµË´Ï´Ù.

32-ºñÆ® ¹× 64-ºñÆ® Ç÷§Æû¿¡¼­ÀÇ ½ºÅ©·¡Ä¡ ÆÐµå ÀÛ¼º

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´Â ½ºÅ©·¡Ä¡ ÆÐµåÀÇ ³»¿ëÀ» ³ªÅ¸³À´Ï´Ù.

UDF include ÆÄÀÏ: sqludf.h

ÀÌ include ÆÄÀÏ¿¡´Â UDF ÀÛ¼º½Ã À¯¿ëÇÑ ±¸Á¶, Á¤ÀÇ ¹× °ªµéÀÌ µé¾î ÀÖ½À´Ï´Ù. ÀÌ ÆÄÀÏÀ» »ç¿ëÇÏ´Â °ÍÀº ¼±ÅÃÀûÀÌÁö¸¸, UDF ÄÚµå ¿¹ÀÇ UDF ¿¹¿¡¼­ ÀϺΠ¿¹´Â ÀÌ include ÆÄÀÏÀ» »ç¿ëÇÕ´Ï´Ù. UDF ÄÄÆÄÀϽà ÀÌ ÆÄÀÏÀÌ µé¾î ÀÖ´Â µð·ºÅ丮¸¦ ÂüÁ¶ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ µð·ºÅ丮´Â sqllib/includeÀÔ´Ï´Ù.

sqludf.h include ÆÄÀÏÀº Àڱ⠼­¼úÀûÀÔ´Ï´Ù. ´ÙÀ½Àº ±× ³»¿ëÀ» °£·«ÇÏ°Ô ¿ä¾àÇÑ °ÍÀÔ´Ï´Ù.

  1. ±¸Á¶ÀÎ Àü´ÞµÈ Àμö¿¡ ´ëÇÑ ±¸Á¶ Á¤ÀÇ´Â ´ÙÀ½°ú °°½À´Ï´Ù.
  2. ¸ðµç SQL µ¥ÀÌÅÍ À¯ÇüÀ» °®°í ÀÖ´Â SQL Àμö ¹× °á°ú¿¡ ´ëÀÀÇÏ´Â UDF Àμö Á¤ÀÇ¿¡ »ç¿ëµÉ, ¸ðµç SQL µ¥ÀÌÅÍ À¯Çü¿¡ ´ëÇÑ C ¾ð¾î À¯Çü Á¤ÀÇ. À̵éÀº SQLUDF_x and SQLUDF_x_FBD¶ó´Â À̸§À» °®´Â Á¤ÀÇÀε¥, ¿©±â¿¡¼­ x´Â SQL µ¥ÀÌÅÍ À¯Çü À̸§À̰í, FBD´Â 2Áø µ¥ÀÌÅÍ¿ë(For Bit Data)À» ³ªÅ¸³À´Ï´Ù.

    ¶ÇÇÑ AS LOCATOR º¸Á¶ ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© Á¤ÀÇµÈ Àμö³ª °á°úÀÇ C ¾ð¾î À¯ÇüÀÌ Æ÷ÇԵ˴ϴÙ.

  3. call-type ÀμöÀÇ enum À¯Çü Á¤ÀǸ¦ »ç¿ëÇÑ scratchpad¿Í call-typeÀμö¿¡ ´ëÇÑ C ¾ð¾î À¯Çü Á¤ÀÇ.
  4. scratchpad¿Í call-type Àμö¸¦ Æ÷ÇÔÇϰųª ¶Ç´Â Æ÷ÇÔÇÏÁö ¾Ê´Â Ç¥ÁØ trailing Àμö Á¤ÀǸ¦ À§ÇÑ ¸¶Å©·Î À̰ÍÀº ÇÔ¼ö Á¤ÀÇÀÇ SCRATCHPAD¿Í FINAL CALL Ű¿öµåÀÇ Á¸Àç ¿©ºÎ¿¡ ´ëÀÀÇÕ´Ï´Ù. À̵éÀº Àμö¸¦ DB2¿¡¼­ UDF·Î Àü´Þ¿¡ Á¤ÀÇµÈ SQL-state, function-name, specific-name, diagnostic-message, scratchpad ¹× call-type UDF È£Ãâ ÀμöÀÔ´Ï´Ù. ¶ÇÇÑ ÀÌ ±¸Á¶¹°µé°ú ¿©·¯°¡Áö À¯È¿ÇÑ SQLSTATE °ªÀ» ÂüÁ¶Çϱâ À§ÇÑ Á¤Àǵ鵵 Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.
  5. SQL Àμö°¡ ³Î(NULL)ÀÎÁö ¿©ºÎ¸¦ Å×½ºÆ®ÇÏ´Â ¸¶Å©·Î.
  6. UDF·Î Àü´ÞµÈ LOB À§Ä¡ ÁöÁ¤ÀÚ¸¦ »ç¿ëÇÏ¿© LOB °ªÀ» Á¶ÀÛÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Â API¿¡ ´ëÇÑ ÇÔ¼ö ÇÁ·ÎÅäŸÀÔ.

´ÙÀ½ ÀýÀÇ UDF ¿¹ Áß ÀϺο¡¼­´Â sqludf.h¸¦ Æ÷ÇÔ ¹× »ç¿ëÇϰí ÀÖ½À´Ï´Ù.


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