¸î°¡Áö Â÷ÀÌÁ¡À» Á¦¿ÜÇϰí´Â ´Ù¸¥ ¾ð¾î¿¡¼¿Í ¸¶Âù°¡Áö·Î Java·Îµµ UDF¸¦ ÀÛ¼ºÇÏ°í »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. UDF¸¦ ÄÚµùÇÑ ÈÄ, CREATE FUNCTION¹®À» »ç¿ëÇÏ¿© À̸¦ µ¥ÀÌÅͺ£À̽º¿¡ µî·ÏÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ¸í·É¹®À» »ç¿ëÇÏ¿© Java UDF¸¦ µî·ÏÇÏ´Â °Í¿¡ ´ëÇÑ Á¤º¸´Â SQL ÂüÁ¶¼¿¡¼ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. ±×¸®°í³ª¼ ÀÀ¿ëÇÁ·Î±×·¥ÀÇ SQL¿¡¼ À̸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù. UDF´Â FENCED ¶Ç´Â NOT FENCED µÉ ¼ö ÀÖÀ¸¸ç, UDF ¼öÇà ¹æ½ÄÀ» ¼öÁ¤ÇÏ´Â ¿É¼ÇÀ» »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Java UDF ½ÇÇà ¹æ¹ý º¯°æÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
ÀϺΠ»ùÇà Java UDF º»¹®ÀÌ UDFsrv.java »ùÇÿ¡¼ Á¦°øµË´Ï´Ù. ¿¬°üµÈ CREATE FUNCTION¹®°ú ÀÌ·± UDF¸¦ È£ÃâÇÏ´Â ¿¹¸¦ UDFcli.java¿Í UDFclie.sqlj »ùÇÿ¡¼ ãÀ» ¼ö ÀÖ½À´Ï´Ù. »ùÇà ¹× »ùÇÃÀÇ ÄÄÆÄÀϰú ¼öÇà¿¡ ´ëÇÑ README ÁöħÀº sqllib/samples/java µð·ºÅ丮¿¡¼ ãÀ¸½Ê½Ã¿À.
ÀϹÝÀûÀ¸·Î SQL À¯Çü t1, t2 ¹× t3¸¦ ¹Þ°í, À¯Çü t4¸¦ ¸®ÅÏÇÏ´Â UDF¸¦ ¼±¾ðÇÏ´Â °æ¿ì, À̰ÍÀº ¿¹»óµÈ Java ½Ã±×´Ïó¸¦ »ç¿ëÇÏ´Â Java ¸Þ¼Òµå¶ó°í ºÎ¸¨´Ï´Ù.
public void name ( T1 a, T2 b, T3 c, T4 d) { .....}
¿©±â¿¡¼,
¿¹¸¦ µé¾î, INTEGER¸¦ ¸®ÅÏÇϰí, CHAR(5), BLOB(10K) ¹× DATE À¯ÇüÀÇ Àμö¸¦ ¹Þ¾ÆµéÀÌ´Â sample!test3À̶ó´Â UDF°¡ ÀÖÀ» ¶§, DB2¿¡¼ UDFÀÇ Java ±¸Çö½Ã ´ÙÀ½°ú °°Àº ½Ã±×´Ïó°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
import COM.ibm.db2.app.*; public class sample extends UDF { public void test3(String arg1, Blob arg2, String arg3, int result) { ... } }
Å×À̺í ÇÔ¼ö¸¦ ±¸ÇöÇÏ´Â Java UDF¿¡´Â ´õ ¸¹Àº Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù. ÀÔ·ÂÀ» ³ªÅ¸³»´Â º¯¼öµé À̿ܿ¡ Ãß°¡ÀûÀÎ º¯¼ö°¡ °á°ú ÇàÀÇ °¢ Ä÷³¿¡ Ç¥½ÃµË´Ï´Ù. ¿¹¸¦ µé¾î Å×À̺í ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÉ ¼ö ÀÖ½À´Ï´Ù.
public void test4(String arg1, int result1, Blob result2, String result3);
SQL NULL °ªÀº ÃʱâȵÇÁö ¾ÊÀº Java º¯¼ö¿¡ ÀÇÇØ Ç¥½ÃµË´Ï´Ù. ÀÌ º¯¼öµéÀº ¿ø½Ã(primitive) À¯ÇüÀÎ °æ¿ì 0 °ªÀ» °®°í, ¿ÀºêÁ§Æ® À¯ÇüÀÎ °æ¿ì, Java ±ÔÄ¢¿¡ µû¶ó Java ³Î(NULL) °ªÀ» °®½À´Ï´Ù. SQL NULLÀ» ÀϹÝÀûÀÎ 0°ú ±¸ºÐÇÏ·Á¸é, ÀÔ·Â Àμö¿¡ ´ëÇÏ¿© isNull ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.
{ .... if (isNull(1)) { /* argument #1 was a SQL NULL */ } else { /* not NULL */ } }
À§ÀÇ ¿¹¿¡¼ Àμö ¹øÈ£´Â 1ºÎÅÍ ½ÃÀÛÇÕ´Ï´Ù. isNull() ÇÔ¼ö´Â ´ÙÀ½¿¡ ³ª¿À´Â ´Ù¸¥ ÇÔ¼öµé°ú ¸¶Âù°¡Áö·Î COM.ibm.db2.app.UDF Ŭ·¡½º·ÎºÎÅÍ °è½ÂµË´Ï´Ù.
°á°ú¸¦ ½ºÄ®¶ó ¶Ç´Â Å×À̺í UDF·ÎºÎÅÍ ¸®ÅÏÇÏ·Á¸é, ´ÙÀ½°ú °°ÀÌ UDF¿¡¼ set() ¸Þ¼Òµå¸¦ »ç¿ëÇϽʽÿÀ.
{ .... set(2, value); }
¿©±â¿¡¼ '2'´Â Ãâ·Â Àμö »öÀÎÀ̰í, value´Â ȣȯ°¡´ÉÇÑ À¯ÇüÀÇ ¸®ÅÍ·² ¶Ç´Â º¯¼öÀÔ´Ï´Ù. Àμö ¹øÈ£´Â ¼±ÅÃµÈ Ãâ·ÂÀÇ Àμö ¸ñ·ÏÀÇ »öÀÎÀÔ´Ï´Ù. ÀÌ ÀýÀÇ Ã¹¹øÂ° ¿¹¿¡¼ int result º¯¼ö´Â »öÀÎ 4¸¦ °®½À´Ï´Ù. µÎ¹øÂ°·Î result1¿¡¼ result3Àº »öÀÎ 2¿¡¼ 4¸¦ °®½À´Ï´Ù. UDF°¡ ¸®ÅÏÇϱâ Àü¿¡ ¼³Á¤µÇÁö ¾ÊÀº Ãâ·Â Àμö´Â ³Î(NULL) °ªÀ» °®°Ô µË´Ï´Ù.
UDF¿Í ÀúÀå ÇÁ·Î½Ãµà¾î¿¡¼ »ç¿ëµÇ´Â C ¸ðµâ°ú ¸¶Âù°¡Áö·Î, Java UDF¿¡¼ Java Ç¥ÁØ I/O ½ºÆ®¸²(System.in, System.out, ¹× System.err)À» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. Java UDFÀÇ ¿¹´Â sqllib/samples/java µð·ºÅ丮ÀÇ DB2Udf.java ÆÄÀÏÀ» ÂüÁ¶ÇϽʽÿÀ.
UDF¸¦ ±¸ÇöÇϱâ À§ÇØ »ç¿ëÇÏ´Â ¸ðµç Java Ŭ·¡½º ÆÄÀϵéÀº sqllib/function directory ¶Ç´Â ÀûÀýÇÑ ¼ºêµð·ºÅ丮¿¡ µé¾î ÀÖ¾î¾ß ÇÔÀ» ¸í½ÉÇϽʽÿÀ. Java Ŭ·¡½º¸¦ ³ÖÀ» À§Ä¡ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
ÀϹÝÀûÀ¸·Î DB2´Â UDF¸¦ ¿©·¯¹ø È£ÃâÇϴµ¥, Á¶È¸¿¡¼ ÀÔ·Â ¶Ç´Â °á°ú ¼¼Æ®ÀÇ °¢ Çà¿¡ ÇÑ ¹ø¾¿ È£ÃâÇÏ°Ô µË´Ï´Ù. SCRATCHPAD°¡ UDFÀÇ CREATE FUNCTION¹®¿¡ ÁöÁ¤µÈ °æ¿ì, DB2´Â ¿¬¼ÓµÈ UDF È£Ãâ »çÀÌ¿¡ ƯÁ¤ "¿¬¼Ó¼º"ÀÌ ÇÊ¿äÇÔÀ» ÀνÄÇϹǷÎ, Java Ŭ·¡½º ±¸ÇöÀÌ °¢ È£Ãâ¿¡ ´ëÇÏ¿© ÀνºÅϽºÈµÇÁö ¾ÊÀ¸³ª, ÀϹÝÀûÀ¸·Î ¸í·É¹® ÇϳªÀÇ UDF ÂüÁ¶ Çϳª¿¡ ÇÑ ¹ø È£ÃâÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î ù¹øÂ° È£Ãâ ÀÌÀü¿¡ ÀνºÅϽºÈµÇ°í ±× ÈÄ¿¡ »ç¿ëµÇÁö¸¸, Å×À̺í ÇÔ¼öÀÇ °æ¿ì ´õ ÀÚÁÖ ÀνºÅϽºÈµÉ ¼ö ÀÖ½À´Ï´Ù. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â ´ÙÀ½¿¡ ³ª¿À´Â NO FINAL CALL ½ÇÇà ¸ðµ¨À» ÂüÁ¶ÇϽʽÿÀ.
±×·¯³ª NO SCRATCHPAD°¡ UDF ¶Ç´Â ½ºÄ®¶ó³ª Å×À̺í ÇÔ¼ö Áß Çϳª¿¡ ÁöÁ¤µÇ¸é, Ŭ¸° ÀνºÅϽº°¡ UDF¿¡ ´ëÇÑ °¢°¢ÀÇ È£Ãâ¿¡ ´ëÇØ ÀνºÅϽºÈµË´Ï´Ù.
½ºÅ©·¡Ä¡ ÆÐµå´Â UDF¿¡ ´ëÇÑ º¹¼ö È£Ãâ¿¡ °ÉÃÄ Á¤º¸¸¦ ÀúÀåÇÒ ¶§ À¯¿ëÇÕ´Ï´Ù. Java¿Í OLE UDF°¡ È£Ãâµé °£ÀÇ ¿¬¼Ó¼ºÀ» À¯ÁöÇϱâ À§ÇØ ÀνºÅϽº º¯¼ö¸¦ »ç¿ëÇϰųª ½ºÅ©·¡Ä¡ ÆÐµå¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Â ¹Ý¸é, C³ª C++´Â ½ºÅ©·¡Ä¡ ÆÐµå¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. Java UDF´Â COM.ibm.db2.app.UDF¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â getScratchPad()¿Í setScratchPad() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ½ºÅ©·¡Ä¡ ÆÐµå¿¡ ¾×¼¼½ºÇÕ´Ï´Ù.
½ºÅ©·¡Ä¡ ÆÐµå¸¦ »ç¿ëÇÏ´Â Java Å×À̺í ÇÔ¼öÀÇ °æ¿ì, Java¿¡ ´ëÇÑ Å×À̺í ÇÔ¼ö ½ÇÇà ¸ðµ¨ÀÇ ½ÇÇà ¸ðµ¨¿¡ ÀÇÇØ ¾Ë ¼ö ÀÖµíÀÌ CREATE FUNCTION¹®¿¡ FINAL CALLÀ̳ª NO FINAL CALL ¿É¼ÇÀ» »ç¿ëÇÏ¿© »õ·Î¿î ½ºÅ©·¡Ä¡ ÆÐµå ÀνºÅϽº¸¦ È®º¸ÇÏ´Â ½ÃÁ¡À» Á¦¾îÇϽʽÿÀ.
½ºÅ©·¡Ä¡ ÆÐµå¸¦ ÅëÇØ UDF¿¡ ´ëÇÑ È£Ãâµé °£ÀÇ ¿¬¼Ó¼ºÀ» À¯ÁöÇÒ ¼ö ÀÖ´Â ±â´ÉÀº, DB2 ½ºÅ©·¡Ä¡ ÆÐµå³ª ÀνºÅϽº º¯¼ö »ç¿ë ¿©ºÎ¿¡ »ó°ü¾øÀÌ CREATE FUNCTIONÀÇ SCRATCHPAD¿Í NO SCRATCHPAD ¿É¼Ç¿¡ ÀÇÇØ Á¦¾îµË´Ï´Ù.
½ºÄ®¶ó ÇÔ¼öÀÇ °æ¿ì, Àüü ¸í·É¹®¿¡ µ¿ÀÏÇÑ ÀνºÅϽº¸¦ »ç¿ëÇÕ´Ï´Ù.
°°Àº UDF°¡ ¿©·¯¹ø ÂüÁ¶µÇ´õ¶óµµ Á¶È¸¿¡¼ Java UDF¿¡ ´ëÇÑ ¸ðµç ÂüÁ¶´Â µ¶¸³ÀûÀ¸·Î 󸮵ȴٴ Á¡¿¡ ÁÖÀÇÇϽʽÿÀ. À̰ÍÀº OLE, C ¹× C++ UDF¿¡¼ ¹ß»ýÇÏ´Â °Í°ú °°½À´Ï´Ù. ½ºÄ®¶ó ÇÔ¼ö¿¡ FINAL CALL ¿É¼ÇÀ» ÁöÁ¤ÇÑ °æ¿ì, Á¶È¸ Á¾·á½Ã ¿ÀºêÁ§Æ®ÀÇ close() ¸Þ¼Òµå°¡ È£ÃâµË´Ï´Ù. Å×À̺í ÇÔ¼öÀÇ °æ¿ì, close() ¸Þ¼Òµå´Â Ç×»ó ´ÙÀ½¿¡ ³ª¿À´Â ³»¿ë°ú °°ÀÌ È£ÃâµË´Ï´Ù. UDF Ŭ·¡½º¿¡ close() ¸Þ¼Òµå¸¦ Á¤ÀÇÇÏÁö ¾Ê´Â °æ¿ì, ½ºÅÓ ÇÔ¼ö°¡ Á¦¾î¸¦ ¹Þ¾Æ À̺¥Æ®°¡ ¹«½ÃµË´Ï´Ù.
CREATE FUNCTION¹®¿¡ Java¿¡ ´ëÇÑ ALLOW PARALLELÀýÀ» ÁöÁ¤ÇÏ´Â °æ¿ì, DB2´Â UDFÀÇ º´·Ä Æò°¡¸¦ ¼±ÅÃÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì, ¿©·¯ °³ÀÇ µ¶¸³µÈ Java ¿ÀºêÁ§Æ®°¡ ¼·Î ´Ù¸¥ ÆÄƼ¼Ç¿¡¼ ÀÛ¼ºµÉ ¼ö ÀÖ½À´Ï´Ù. °¢ ¿ÀºêÁ§Æ®´Â ÇàÀÇ ºÎ¼Ó ÁýÇÕÀ» ¼ö½ÅÇÕ´Ï´Ù.
´Ù¸¥ UDF¿¡¼¿Í ¸¶Âù°¡Áö·Î Java UDF´Â FENCED ¶Ç´Â NOT FENCED µÉ ¼ö ÀÖ½À´Ï´Ù. NOT FENCED UDF´Â µ¥ÀÌÅͺ£À̽º ¿£ÁøÀÇ ÁÖ¼Ò °ø°£ ³»¿¡¼ ¼öÇàµË´Ï´Ù. FENCED UDF´Â º°µµÀÇ ÇÁ·Î¼¼½º¿¡¼ ¼öÇàµË´Ï´Ù. Java UDF°¡ »ðÀԵǾî ÀÖ´Â ÇÁ·Î¼¼½ºÀÇ ÁÖ¼Ò °ø°£À» ¼Õ»ó½Ãų ¼ö´Â ¾ø¾îµµ, ÇÁ·Î¼¼½º¸¦ Á¾·áÇϰųª ¼Óµµ¸¦ ´À¸®°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯¹Ç·Î Java·Î ÀÛ¼ºµÈ UDF¸¦ µð¹ö±×ÇÒ ¶§, À̵éÀ» FENCED UDF·Î ¼öÇàÇØ¾ß ÇÕ´Ï´Ù.
COM.ibm.db2.app.UDF¿¡ ´ëÇÑ ¼³¸íÀº COM.ibm.db2.app.UDFÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. ÀÌ ÀÎÅÍÆäÀ̽º´Â setSQLstate ¹× getDBinfo¿Í °°Àº UDF ³»¿¡¼ È£ÃâÇÒ ¼ö ÀÖ´Â ´Ù¸¥ À¯¿ëÇÑ È£ÃâµéÀ» ¼³¸íÇÕ´Ï´Ù.
Java·Î ÀÛ¼ºµÈ Å×À̺í ÇÔ¼öÀÇ °æ¿ì, Å×À̺í ÇÔ¼ö¿¡ Áß¿äÇÑ ÇØ´ç ¸í·É¹®ÀÇ
DB2 ó¸® »óÀÇ °¢ ÁöÁ¡¿¡¼ ¾î¶°ÇÑ ÀϵéÀÌ ¹ß»ýÇÏ´ÂÁö¸¦ ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù.
´ÙÀ½ÀÇ Å×À̺íÀº ÀÌ Á¤º¸¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀÔ´Ï´Ù.
°¢ »óÀÚÀÇ ¾Æ·¡ ºÎºÐ¿¡¼´Â
À¥¿¡¼ ÀϺΠÁ¤º¸¸¦ °¡Á®¿À´Â ÀϹÝÀûÀÎ Å×À̺í ÇÔ¼ö¿¡ ´ëÇÏ¿©
ÀÌ Äڵ带 ÀÛ¼ºÇÏ¿© ÇÒ ¼ö ÀÖ´Â °ÍÀÌ ¹«¾ùÀÎÁö¸¦ º¸¿©ÁÝ´Ï´Ù.
NO FINAL CALL°ú FINAL CALLÀÇ µÎ °¡Áö °æ¿ì ¸ðµÎ ¼³¸íµÇ¸ç,
ÀÌ µÎ °¡Áö °æ¿ì ¸ðµÎ¿¡ SCRATCHPAD°¡ ÀÖ´Â °ÍÀ¸·Î °¡Á¤ÇÕ´Ï´Ù.
½ºÄµ½Ã ½ÃÁ¡ |
NO FINAL CALL LANGUAGE JAVA SCRATCHPAD |
FINAL CALL LANGUAGE JAVA SCRATCHPAD |
---|---|---|
Å×À̺í ÇÔ¼öÀÇ Ã¹¹øÂ° OPEN Àü | È£Ãâ ¾øÀ½. |
|
Å×À̺í ÇÔ¼öÀÇ °¢ OPEN½Ã |
|
|
Å×À̺í ÇÔ¼ö µ¥ÀÌÅÍÀÇ »õ·Î¿î Çà¿¡ ´ëÇÑ °¢ FETCH½Ã |
|
|
Å×À̺í ÇÔ¼öÀÇ °¢ CLOSE½Ã |
|
|
Å×À̺í ÇÔ¼öÀÇ ÃÖÁ¾ CLOSE ÈÄ | È£Ãâ ¾øÀ½. |
|
ÁÖ: