´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ °æ¿ì¿Í ¸¶Âù°¡Áö·Î ÀúÀå ÇÁ·Î½Ãµà¾î¿Í UDF¸¦ Java·Î ÀÛ¼ºÇÏ°í »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Java Äڵ带 ÀÛ¼ºÇÒ ¶§ ¾Ë¾Æ¾ß ÇÏ´Â ¸î °¡Áö ÇÁ·Î±×·¡¹Ö °í·Á»çÇ×(Java ÇÔ¼ö Á¤ÀÇ ÂüÁ¶)À» ÂüÁ¶ÇϽʽÿÀ. ¶ÇÇÑ ÀúÀå ÇÁ·Î½Ãµà¾î¿Í UDF¸¦ µî·ÏÇØ¾ß ÇÕ´Ï´Ù. ÀúÀå ÇÁ·Î½Ãµà¾î µî·Ï ¹æ¹ý¿¡ ´ëÇØ¼´Â ÀúÀå ÇÁ·Î½Ãµà¾î¿¡¼ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. UDF µî·Ï ¹æ¹ý¿¡ ´ëÇØ¼´Â SQL ÂüÁ¶¼ÀÇ CREATE FUNCTION¹®À» ÂüÁ¶ÇϽʽÿÀ.
¼¹ö¿¡¼ UDF¿Í ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ ¼öÇàÇÏ·Á¸é DB2¿¡¼ JVMÀ» È£ÃâÇÕ´Ï´Ù. µ¥ÀÌÅͺ£À̽º¸¦ ½ÃÀÛÇϱâ Àü¿¡ ÀûÇÕÇÑ JDK(Java Development Kit)À̳ª Java Runtime Environment°¡ DB2 ¼¹ö¿¡ ¼³Ä¡µÇ°í ±¸¼ºµÇ¾î ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.
JVM ·±Å¸ÀÓ ¶óÀ̺귯¸®´Â ½Ã½ºÅÛ °Ë»ö °æ·ÎÀÎ PATH ¶Ç´Â LIBPATH ¶Ç´Â LD_LIBRARY_PATH ¹× CLASSPATH¿¡¼ »ç¿ë °¡´ÉÇØ¾ß ÇÕ´Ï´Ù. Java ȯ°æ ¼³Á¤¿¡ ´ëÇØ¼´Â ÀÀ¿ëÇÁ·Î±×·¥ ºôµå ¾È³»¼¿¡¼ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
óÀ½À¸·Î Java UDF³ª ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ È£ÃâÇÒ ¶§ DB2¿¡¼ JVMÀ» ·ÎµåÇϰųª ½ÃÀÛÇÕ´Ï´Ù. NOT FENCED UDF¿Í ÀúÀå ÇÁ·Î½Ãµà¾î¿¡ ´ëÇØ DB2´Â µ¥ÀÌÅͺ£À̽º ÀνºÅϽº¸¶´Ù JVMÀ» Çϳª ·ÎµåÇÏ°í µ¥ÀÌÅͺ£À̽º ¿£ÁøÀÇ ÁÖ¼Ò °ø°£¿¡¼ À̸¦ ½ÇÇàÇÏ¿© ¼º´ÉÀ» Çâ»ó½Ãŵ´Ï´Ù. ºÐ¸® UDFÀÇ °æ¿ì DB2´Â db2udf ÇÁ·Î¼¼½º¿¡¼ ¸íÈ®ÇÑ JVMÀ» »ç¿ëÇÕ´Ï´Ù. ¸¶Âù°¡Áö·Î ºÐ¸® ÀúÀå ÇÁ·Î½Ãµà¾î´Â db2dari ÇÁ·Î¼¼½º¿¡¼ ¸íÈ®ÇÑ JVMÀ» »ç¿ëÇÕ´Ï´Ù. ¸ðµç °æ¿ì¿¡ Embedding ÇÁ·Î¼¼½º°¡ Á¾·áÇÒ ¶§±îÁö JVMÀº ¿©ÀüÈ÷ ·ÎµåµÇ¾î ÀÖ½À´Ï´Ù.
ÁÖ: | Áö¿ª Ŭ¶óÀÌ¾ðÆ®°¡ ÀÖ´Â µ¥ÀÌÅͺ£À̽º ¼¹ö ³ëµå À¯ÇüÀ» ¼öÇàÇÒ °æ¿ì Java ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ È£ÃâÇϱâ Àü¿¡ maxdari µ¥ÀÌÅͺ£À̽º °ü¸® ÇÁ·Î±×·¥ ±¸¼º ¸Å°³º¯¼ö¸¦ 0ÀÌ ¾Æ´Ñ °ªÀ¸·Î ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù. |
sqllib/samples/java µð·ºÅ丮¿¡ Á¦°øµÈ Java ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ ¿¬±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù. DB2¿¡ Æ÷ÇÔµÈ »ùÇà ÇÁ·Î±×·¥ÀÇ ¸ñ·Ï¿¡ ´ëÇØ¼´Â ºÎ·Ï B, »ùÇà ÇÁ·Î±×·¥¿¡¼ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
ÀúÀå ÇÁ·Î½Ãµà¾î ¶Ç´Â UDF¸¦ ±¸ÇöÇÏ´Â µ¥ »ç¿ëÇÏ´Â ¸ðµç Java Ŭ·¡½º ÆÄÀÏÀº µ¥ÀÌÅͺ£À̽º¿¡ ¼³Ä¡ÇÑ JAR ÆÄÀÏÀ̳ª Java Ŭ·¡½º¸¦ ³ÖÀ» À§Ä¡¿¡¼ ¾ð±ÞÇÑ ¿î¿µ üÁ¦ÀÇ ¿Ã¹Ù¸¥ ÀúÀå ÇÁ·Î½Ãµà¾î ¶Ç´Â UDF °æ·Î¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
ÁÖ: | È¥ÇÕ ÄÚµå ÆäÀÌÁö µ¥ÀÌÅͺ£À̽º ¼¹ö¿¡¼, ´ëÇü È¥ÇÕ ÄÚµå ÆäÀÌÁö ¹®ÀÚ¿ÀÇ ¹®ÀÚ °æ°è¿¡ ´ëÇÑ ·£´ýÇÑ ¾×¼¼½º¸¦ ¾ÆÁ÷ ±¸ÇöÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î Java »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¿Í ÀúÀå ÇÁ·Î½Ãµà¾î¿¡¼ CLOB À¯Çü Àμö¸¦ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. SBCS µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇØ ¸ðµç LOB À¯ÇüÀ» ¿ÏÀüÈ÷ Áö¿øÇÕ´Ï´Ù. È¥ÇÕ µ¥ÀÌÅͺ£À̽ºÀÇ °æ¿ì¿¡´Â BLOB ¹× DBCLOB À¯Çü¿¡ ´ëÇØ Áö¿øÇÕ´Ï´Ù. ÀϽÃÀûÀÎ ÇØ°áÃ¥À¸·Î, È¥ÇÕ µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛ¿¡¼ ¼öÇà ÁßÀÎ ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ CLOB Àμö¸¦ DBCLOB, LONG VARGRAPHIC ¶Ç´Â LONG VARCHAR À¯ÇüÀ¸·Î º¯È¯ÇØ¾ß ÇÕ´Ï´Ù. UDFÀÇ °æ¿ì CAST ¿¬»êÀÚ·Î À̸¦ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. |
ÀúÀå ÇÁ·Î½Ãµà¾î ¶Ç´Â UDF¿¡ ´ëÇØ °³º° Java Ŭ·¡½º ÆÄÀÏÀ» ¼±ÅÃÇϰųª Ŭ·¡½º ÆÄÀÏÀ» JAR ÆÄÀÏ·Î ¼öÁýÇØ ³Ö°í µ¥ÀÌÅͺ£À̽º¿¡ JAR ÆÄÀÏÀ» ¼³Ä¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. JAR ÆÄÀÏÀ» »ç¿ëÇÏ·Á´Â °æ¿ì ÀÚ¼¼ÇÑ ÁöħÀº Java ÀúÀå ÇÁ·Î½Ãµà¾î ¹× UDFÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
ÁÖ: | Java ·çƾ Ŭ·¡½º ÆÄÀÏÀ» °»½ÅÇϰųª ´ëüÇϸé, CALL SQLJ.REFRESH_CLASSES()¹®À» ½ÇÇàÇÏ¿© DB2¿¡¼ °»½ÅµÈ Ŭ·¡½º¸¦ ·ÎµåÇØ¾ß ÇÕ´Ï´Ù. CALL SQLJ.REFRESH_CLASSES() ¹®¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ·çƾ¿¡¼ Java Ŭ·¡½º °»½ÅÀ» ÂüÁ¶ÇϽʽÿÀ. |
DB2¸¦ »ç¿ëÇÏ¿© ÀúÀå ÇÁ·Î½Ãµà¾î¿Í UDF ã¾Æ »ç¿ëÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ¿î¿µ üÁ¦¿¡ ´ëÇØ Á¤ÀÇµÈ µð·ºÅ丮ÀÎ ÇÔ¼ö µð·ºÅ丮¿¡ ÇØ´ç Ŭ·¡½º ÆÄÀÏÀ» ÀúÀåÇØ¾ß ÇÕ´Ï´Ù.
¿¹¸¦ µé¾î, C:\sqllib¿¡ DB2°¡ ¼³Ä¡µÇ¾î ÀÖ°í DB2INSTPROF ·¹Áö½ºÆ®¸® ¼³Á¤ÀÌ ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀº Windows NT ¼¹öÀÇ ÇÔ¼ö µð·ºÅ丮´Â ´ÙÀ½°ú °°½À´Ï´Ù.
C:\sqllib\function
°³º° Ŭ·¡½º ÆÄÀÏÀ» »ç¿ëÇÏ·Á´Â °æ¿ì »ç¿ëÀÚ ¿î¿µ üÁ¦ÀÇ ÇØ´ç µð·ºÅ丮¿¡ Ŭ·¡½º ÆÄÀÏÀ» ÀúÀåÇØ¾ß ÇÕ´Ï´Ù. Ŭ·¡½º¸¦ Java ÆÐŰÁöÀÇ ÀϺηΠ¼±¾ðÇÑ °æ¿ì ÇÔ¼ö µð·ºÅ丮¿¡ ÇØ´ç ¼ºêµð·ºÅ丮¸¦ ÀÛ¼ºÇÑ ´ÙÀ½ ÇØ´ç ¼ºêµð·ºÅ丮¿¡ ÆÄÀÏÀ» ³ÖÀ¸½Ê½Ã¿À. ¿¹¸¦ µé¾î, Linux ½Ã½ºÅÛ¿ë ibm.tests.test1 Ŭ·¡½º¸¦ ÀÛ¼ºÇÒ °æ¿ì sqllib/function/ibm/tests¿¡ ÇØ´ç Java ¹ÙÀÌÆ®ÄÚµå ÆÄÀÏ test1.class¸¦ ÀúÀåÇϽʽÿÀ.
DB2¿¡¼ È£ÃâÇÏ´Â JVMÀº CLASSPATH ȯ°æ º¯¼ö¸¦ »ç¿ëÇÏ¿© Java ÆÄÀÏÀ» ã½À´Ï´Ù. DB2¿¡¼´Â ÇÔ¼ö µð·ºÅ丮¿Í sqllib/java/db2java.zipÀ» CLASSPATH ¼³Á¤ ¾Õ¿¡ Ãß°¡ÇÕ´Ï´Ù.
JVM¿¡¼ Java Ŭ·¡½º ÆÄÀÏÀ» ãÀ» ¼ö ÀÖµµ·Ï ȯ°æÀ» ¼³Á¤ÇÏ·Á¸é jdk11_path ±¸¼º ¸Å°³º¯¼ö¸¦ ¼³Á¤Çϰųª ±âº»°ªÀ» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥ÀÇ Èü(heap)À» Áõ°¡½Ã۵µ·Ï java_heap_sz ±¸¼º ¸Å°³º¯¼ö¸¦ ¼³Á¤ÇØ¾ß ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±¸¼º ¸Å°³º¯¼ö¿¡ ´ëÇØ¼´Â °ü¸® ¾È³»¼ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
Java ·çƾ Ŭ·¡½º¸¦ °»½ÅÇÒ ¶§ CALL SQLJ.REFRESH_CLASSES()¹®À» ½ÇÇàÇÏ¿© DB2¿¡¼ »õ Ŭ·¡½º¸¦ ·ÎµåÇÏ°Ô ÇØ¾ß ÇÕ´Ï´Ù. Java ·çƾ Äڵ带 °»½ÅÇÑ ÈÄ¿¡ CALL SQLJ.REFRESH_CLASSES()¹®À» ½ÇÇàÇÏÁö ¾ÊÀ¸¸é DB2´Â °è¼Ó Ŭ·¡½ºÀÇ ÀÌÀü ¹öÀüÀ» »ç¿ëÇÕ´Ï´Ù. CALL SQLJ.REFRESH_CLASSES()¹®Àº FENCED ·çƾ¿¡¸¸ Àû¿ëµË´Ï´Ù. DB2´Â COMMIT ¶Ç´Â ROLLBACKÀÌ ¹ß»ýÇÒ ¶§ Ŭ·¡½º¸¦ »õ·Î °íĨ´Ï´Ù.
ÁÖ: | µ¥ÀÌÅͺ£À̽º °ü¸®ÀÚ¸¦ ÁßÁöÇÏ°í ´Ù½Ã ½ÃÀÛÇÏÁö ¾ÊÀº »óÅ¿¡¼´Â NOT FENCED ·çƾÀ» °»½ÅÇÒ ¼ö ¾ø½À´Ï´Ù. |
ÀúÀå ÇÁ·Î½Ãµà¾î°¡ AIX ¶Ç´Â Windows NT¼¹ö¿¡¼ ½ÇÇàÇÒ °æ¿ì DB2¿¡¼´Â JDBC·Î ÀÛ¼ºÇÑ ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ ´ëȽÄÀ¸·Î µð¹ö±×ÇÏ´Â ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù. DB2 Stored Procedure Builder¸¦ »ç¿ëÇÏ¸é °¡Àå ½±°Ô µð¹ö±ëÀ» È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ±× ½ÇÇà ¹æ¹ý¿¡ ´ëÇØ¼´Â Stored Procedure Builder¿¡ ´ëÇÑ ¿Â¶óÀÎ µµ¿ò¸»À» ÂüÁ¶ÇϽʽÿÀ.
ÀÌ Àý¿¡¼´Â ´ÙÀ½ ÁÖÁ¦¸¦ ´Ù·ì´Ï´Ù.
db2set DB2ROUTINE_DEBUG=ON
Stored Procedure Builder¸¦ »ç¿ëÇÏ¿© µð¹ö°Å¸¦ È£ÃâÇÏÁö ¾ÊÀ» °æ¿ì ´ÙÀ½ ¸í·ÉÀ¸·Î µð¹ö±× Å×À̺íÀ» ÀÛ¼ºÇϽʽÿÀ.
db2 -tf sqllib/misc/db2debug.ddl
ÁÖ: | DB2 Enterprise - Extended Edition ½Ã½ºÅÛ¿¡¼ ±âº» ³ëµå±×·ìÀº USERSPACE1 Å×ÀÌºí °ø°£¿¡ ´ëÇÑ IBMDEFAULTGROUPÀÌ¸ç ½Ã½ºÅÛ¿¡ ´ëÇØ Á¤ÀÇµÈ ¸ðµç ³ëµå·Î ±¸¼ºµË´Ï´Ù. DB2 Enterprise - Extended Edition ±¸¼º¿¡¼ ÀúÀå ÇÁ·Î½Ãµà¾î µð¹ö±ëÀÇ ¼º´ÉÀ» Çâ»ó½ÃŰ·Á¸é µð¹ö±ëÀÌ ¹ß»ýÇÑ ´ÜÀÏ Á¶Á¤ÀÚ ³ëµå°¡ ÀÖ¾î¾ß ÇÏ¸ç ±× ³ëµå¸¸ ÀÖ´Â ³ëµå ±×·ìÀ» Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù. |
ÀúÀå ÇÁ·Î½Ãµà¾î Ŭ¶óÀÌ¾ðÆ®¿¡¼ ´ÙÀ½ ¸í·ÉÀ¸·Î µð¹ö°Å µð¸ÕÀ» ½ÃÀÛÇϽʽÿÀ.
db2dbugd -qport=portno
¿©±â¼ portno´Â »ç¿ëµÇÁö ¾Ê´Â TCP/IP Æ÷Æ® ¹øÈ£ÀÔ´Ï´Ù. °ªÀ» Á¦°øÇÏÁö ¾ÊÀ» °æ¿ì µð¹ö°Å¿¡¼´Â 8000À» ±âº» Æ÷Æ® ¹øÈ£·Î »ç¿ëÇÕ´Ï´Ù. Windows 32 ºñÆ® ¿î¿µ üÁ¦¿¡¼ DB2 Æú´õ¿¡ ÀÖ´Â µð¹ö°Å µð¸Õ ´ÜÃà ¾ÆÀÌÄÜÀ» Ŭ¸¯ÇÏ¿© µðÆúÆ® Æ÷Æ® ¹øÈ£·Î µð¹ö°Å¸¦ ½ÃÀÛÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
µð¹ö±× Å×ÀÌºí¿¡´Â »ç¿ëÀÚ°¡ µð¹ö±×ÇÑ ÀúÀå ÇÁ·Î½Ãµà¾î ¹× µð¹ö±×¸¦ ½ÇÇàÇÑ Å¬¶óÀ̾ðÆ®/¼¹ö ȯ°æ¿¡ ´ëÇÑ Á¤º¸°¡ ÀÖ½À´Ï´Ù. INSERT, UPDATE ¶Ç´Â DELETE Ư±ÇÀÌ ÀÖ´Â »ç¿ëÀÚ³ª DBA°¡ ±âº» Å×À̺í DB2DBG.ROUTINE_DEBUGÀÇ °ªÀ» Á÷Á¢ Á¶ÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª DBA¿¡¼ Á¦ÇÑ»çÇ×À» ´õ Ãß°¡ÇÏÁö ¾Ê´Â ÇÑ ´©±¸³ª »ç¿ëÀÚ ºä DB2DBG.ROUTINE_DEBUG_USER¸¦ ÅëÇØ ÇàÀ» Ãß°¡Çϰųª °»½ÅÇϰųª »èÁ¦ÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼ ÀÌ ÀýÀÇ ³ª¸ÓÁö ºÎºÐ¿¡¼´Â »ç¿ëÀÚ ºä¸¦ ÅëÇØ Å×ÀÌºí¿¡ µ¥ÀÌÅ͸¦ »óÁÖÇÑ´Ù°í °¡Á¤ÇÕ´Ï´Ù.
Stored Procedure Builder¸¦ »ç¿ëÇÏ¿© µð¹ö±ëÀ» È£ÃâÇÒ °æ¿ì µð¹ö°Å À¯Æ¿¸®Æ¼¸¦ »ç¿ëÇÏ¿© µð¹ö±× Å×À̺íÀÇ µ¥ÀÌÅ͸¦ »óÁÖÇϰí Å×À̺íÀ» °ü¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¸Áö ¾ÊÀº °æ¿ì ÁöÁ¤ÇÑ ÀúÀå ÇÁ·Î½Ãµà¾î¿¡ ´ëÇÑ µð¹ö±ë Áö¿øÀ» »ç¿ëÇÏ·Á¸é CLP¿¡¼ ´ÙÀ½ ¸í·ÉÀ» ¹ßÇàÇϽʽÿÀ.
DB2 INSERT INTO db2dbg.routine_debug_user (AUTHID, TYPE, ROUTINE_SCHEMA, SPECIFICNAME, DEBUG_ON, CLIENT_IPADDR) VALUES ('authid', 'S', 'schema', 'proc_name', 'Y', 'IP_num')
¿©±â¼, :
¿¹¸¦ µé¾î, 123.234.111.222 IP ÁÖ¼Ò¿¡ ÀÖ´Â µð¹ö±ë Ŭ¶óÀÌ¾ðÆ®¸¦ »ç¿ëÇÏ¿© USER1 »ç¿ëÀÚ·Î MySchema.myProc ÀúÀå ÇÁ·Î½Ãµà¾î¿¡ ´ëÇÑ µð¹ö±ëÀ» »ç¿ëÇÏ·Á¸é ´ÙÀ½ ¸í·ÉÀ» ÀÔ·ÂÇϽʽÿÀ.
DB2 INSERT INTO db2dbg.routine_debug_user (AUTHID, TYPE, ROUTINE_SCHEMA, SPECIFICNAME, DEBUG_ON, CLIENT_IPADDR) VALUES ('USER1', 'S', 'MySchema', 'myProc', 'Y', '123.234.111.222')
ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ Á¦°ÅÇÒ °æ¿ì ±× µð¹ö±× Á¤º¸´Â µð¹ö±× Å×ÀÌºí¿¡¼ ÀÚµ¿À¸·Î »èÁ¦µÇÁö ¾Ê½À´Ï´Ù. Á¸ÀçÇÏÁö ¾Ê´Â ÀúÀå ÇÁ·Î½Ãµà¾î¿¡ ´ëÇÑ µð¹ö±× Á¤º¸·Î´Â »ç¿ëÀÚ µ¥ÀÌÅͺ£À̽º³ª ÀνºÅϽº¿¡ ÇØ·Î¿î ¿µÇâÀ» ÁÙ ¼ö ¾ø½À´Ï´Ù. DB2 īŻ·Î±×·Î µ¿±âÈµÈ µð¹ö±× Å×À̺íÀ» À¯ÁöÇÏ·Á¸é µð¹ö±× Á¤º¸¸¦ ¼öÀÛ¾÷À¸·Î »èÁ¦ÇØ¾ß ÇÕ´Ï´Ù.
µð¹ö±× Å×À̺íÀ» ¼öÀÛ¾÷À¸·Î ¶Ç´Â Stored Procedure Builder¸¦ »ç¿ëÇÏ¿© ÀÛ¼ºÇÏµç µð¹ö±× Å×À̺íÀÇ À̸§Àº DB2DBG.ROUTINE_DEBUGÀÌ¸ç ±× Á¤ÀÇ´Â ´ÙÀ½°ú °°½À´Ï´Ù.
Ç¥ 32. DB2DBG.ROUTINE_DEBUG Å×À̺í Á¤ÀÇ
Ä÷³ À̸§ | µ¥ÀÌÅÍ À¯Çü | ¼Ó¼º | ¼³¸í |
---|---|---|---|
AUTHID | VARCHAR(128) |
NOT NULL, DEFAULT USER | ÀÌ ÀúÀå ÇÁ·Î½Ãµà¾î¿¡ ´ëÇÑ µð¹ö±ëÀÌ ¼öÇóµÇ´Â ÀÀ¿ëÇÁ·Î±×·¥ authid. µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°á½Ã Á¦°øµÇ´Â »ç¿ëÀÚ IDÀÔ´Ï´Ù. |
TYPE | CHAR(1) | NOT NULL | À¯È¿ÇÑ °ª: 'S'(ÀúÀå ÇÁ·Î½Ãµà¾î) |
ROUTINE_SCHEMA | VARCHAR(128) | NOT NULL | µð¹ö±×ÇÒ ÀúÀå ÇÁ·Î½Ãµà¾îÀÇ ½ºÅ°¸¶ À̸§ |
SPECIFICNAME | VARCHAR(18) | NOT NULL | µð¹ö±×ÇÒ ÀúÀå ÇÁ·Î½Ãµà¾îÀÇ Æ¯Á¤ À̸§ |
DEBUG_ON | CHAR(1) |
NOT NULL, DEFAULT 'N' | À¯È¿ÇÑ °ª:
|
CLIENT_IPADDR | VARCHAR(15) | NOT NULL | nnn.nnn.nnn.nnn ¾ç½ÄÀÇ µð¹ö±ëÀ» ½ÇÇàÇϴ Ŭ¶óÀ̾ðÆ®ÀÇ IP ÁÖ¼Ò |
CLIENT_PORT | INTEGER |
NOT NULL, DEFAULT 8000 | µð¹ö±ë Åë½ÅÀÇ Æ÷Æ®. ±âº»°ªÀº 8000ÀÔ´Ï´Ù. |
DEBUG_STARTN | INTEGER | NOT NULL | »ç¿ëµÇÁö ¾ÊÀ½. |
DEBUG_STOPN | INTEGER | NOT NULL | »ç¿ëµÇÁö ¾ÊÀ½. |
ÀÌ Å×À̺íÀÇ ±âº» Ű´Â AUTHID, TYPE, ROUTINE_SCHEMA, SPECIFICNAMEÀÔ´Ï´Ù.
|
À§ÀÇ ´Ü°è¸¦ µû¸¥ °æ¿ì ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ È£ÃâÇÏ¸é µð¹ö±× Å×ÀÌºí¿¡ ÁöÁ¤ÇÑ IP ÁּҷΠŬ¶óÀ̾ðÆ®ÀÇ µð¹ö°Å°¡ È£ÃâµË´Ï´Ù.
µð¹ö°Å¿¡¼ ¼Ò½º Äڵ带 step throughÇϰí, º¯¼ö¸¦ Ç¥½ÃÇϰí, ¼Ò½º Äڵ忡 Áß´ÜÁ¡À» ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. µð¹ö°Å »ç¿ë¿¡ ´ëÇØ¼´Â ¿Â¶óÀÎ µµ¿ò¸»¿¡ Æ÷ÇÔµÈ µð¹ö°Å ¹®¼¸¦ ÂüÁ¶ÇϽʽÿÀ.
Java ·çƾÀ¸·Î ¾Ë·ÁÁø Java ÀúÀå ÇÁ·Î½Ãµà¾î¿Í UDF´Â DB2 īŻ·Î±×¿¡ µî·ÏµÇ¾î¾ß ÇÕ´Ï´Ù. DB2 Universal Database ¹öÀü 7¿¡¼´Â Java ÇÔ¼ö ·çƾ ¹× Àü°³¸¦ À§ÇØ SQLJ ·çƾ ÄÚ¾î ½ºÆåÀ» Áö¿øÇÕ´Ï´Ù. CREATE PROCEDURE ¹× CREATE FUNCTION¹®¿¡¼ PARAMETER STYLE JAVA¸¦ »ç¿ëÇÏ¿© SQLJ ·çƾÀ» µû¸£µµ·Ï ÁöÁ¤ÇϽʽÿÀ.
¶Ç´Â DB2´Â DB2 V5 ¹× V5.2 PARAMETER STYLE DB2GENERAL ÀúÀå ÇÁ·Î½Ãµà¾î¿Í UDF¸¦ Áö¿øÇÕ´Ï´Ù. ºÎ·Ï C, DB2DARI ¹× DB2GENERAL ÀúÀå ÇÁ·Î½Ãµà¾î¿Í UDF¿¡¼ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
Java ÇÔ¼ö³ª ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ µî·ÏÇÏ·Á¸é ´ÙÀ½ ´Ü°è¸¦ µû¸£½Ê½Ã¿À.
JAR ÆÄÀÏÀ» ¼³Ä¡Çϸé DB2¿¡¼ JAR ÆÄÀϷκÎÅÍ Java Ŭ·¡½º ÆÄÀÏÀ» ÃßÃâÇÑ ´ÙÀ½ ½Ã½ºÅÛ Ä«Å»·Î±×ÀÇ °¢ Ŭ·¡½º¸¦ µî·ÏÇÕ´Ï´Ù. DB2¿¡¼ JAR ÆÄÀÏÀ» ÇÔ¼ö µð·ºÅ丮ÀÇ jar/schema ¼ºêµð·ºÅ丮·Î º¹»çÇÕ´Ï´Ù. DB2¿¡¼´Â jar-idÀý¿¡ ÁöÁ¤µÈ À̸§À» JAR ÆÄÀÏÀÇ »õ·Î¿î »çº»¿¡ ÁöÁ¤ÇÕ´Ï´Ù. DB2 ÀνºÅϽº¿¡ ¼³Ä¡ÇÑ JAR ÆÄÀÏÀ» Á÷Á¢ ¼öÁ¤ÇÏÁö ¸¶½Ê½Ã¿À. ´ë½Å CALL SQLJ.REMOVE_JAR and CALL SQLJ.REPLACE_JAR ¸í·ÉÀ» »ç¿ëÇÏ¿© ¼³Ä¡µÈ JAR ÆÄÀÏÀ» Á¦°ÅÇϰųª ´ëüÇÒ ¼ö ÀÖ½À´Ï´Ù.
DB2 ÀνºÅϽº¿¡¼ JAR ÆÄÀÏÀ» ¼³Ä¡Çϰųª ´ëüÇϱâ À§ÇØ ¸í·ÉÇà 󸮱⿡¼ ´ÙÀ½ ¸í·É ±¸¹®À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
(1) (2) >>-CALL-+-SQLJ.INSTALL_JAR-+---(--'--jar-url-------'--,--'--jar-id-------'--)--> '-SQLJ.REPLACE_JAR-' >--------------------------------------------------------------><
ÁÖ:
ÁÖ: | OS/2 ¹× Windows 32 ºñÆ® ¿î¿µ üÁ¦¿¡¼ DB2´Â DB2INSTPROF ÀνºÅϽº °íÀ¯ÀÇ ·¹Áö½ºÆ®¸® ¼³Á¤À¸·Î ÁöÁ¤µÈ °æ·Î¿¡ JAR ÆÄÀÏÀ» ÀúÀåÇÕ´Ï´Ù. ÀνºÅϽº¿¡ ´ëÇØ JAR ÆÄÀÏÀ» °íÀ¯ÇÏ°Ô À¯ÁöÇÏ·Á¸é ±× ÀνºÅϽºÀÇ DB2INSTPROF¿¡ ´ëÇØ °íÀ¯ °ªÀ» ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù. |
¿¹¸¦ µé¾î, DB2 ÀνºÅϽºÀÇ file:/home/db2inst/classes/ µð·ºÅ丮¿¡ ÀÖ´Â Proc.jar ÆÄÀÏÀ» ¼³Ä¡ÇÏ·Á¸é ¸í·ÉÇà 󸮱⿡¼ ´ÙÀ½ ¸í·ÉÀ» ¹ßÇàÇϽʽÿÀ.
CALL SQLJ.INSTALL_JAR('file:/home/db2inst/classes/Proc.jar' , 'myproc_jar')
Procedure.jar ÆÄÀÏÀ» »ç¿ëÇÏ´Â ÈÄ¼Ó SQL ¸í·É¿¡¼´Â myproc_jar À̸§À¸·Î À̸¦ ÂüÁ¶ÇÕ´Ï´Ù. µ¥ÀÌÅͺ£À̽º¿¡¼ JAR ÆÄÀÏÀ» Á¦°ÅÇÏ·Á¸é ´ÙÀ½ ±¸¹®À¸·Î CALL REMOVE_JAR ¸í·ÉÀ» »ç¿ëÇϽʽÿÀ.
(1) >>-CALL-SQLJ.REMOVE_JAR----(--'--jar-id-------'--)-------------><
ÁÖ:
µ¥ÀÌÅͺ£À̽º¿¡¼ myProc_jar JAR ÆÄÀÏÀ» Á¦°ÅÇÏ·Á¸é ¸í·ÉÇà 󸮱⿡¼ ´ÙÀ½ ¸í·ÉÀ» ÀÔ·ÂÇϽʽÿÀ.
CALL SQLJ.REMOVE_JAR('myProc_jar')
Java ·çƾÀ» ÀÛ¼ºÇÏ·Á¸é public Ŭ·¡½º¿¡¼ ÇØ´ç public static ¸Þ¼Òµå¸¦ ÄÚµùÇØ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ Java ·çƾÀº throws SQLExceptionÀý·Î¼±¾ðÇØ¾ß ÇÕ´Ï´Ù. ¸Þ¼Òµå º»¹®À¸·ÎºÎÅÍ ¿¹»óµÇ´Â Ãâ·Â°ú ÀÏÄ¡Çϵµ·Ï ¸Þ¼Òµå ¼¸í°ú ¸Þ¼Òµå ¼±¾ðÀÇ ³ª¸ÓÁö¸¦ ÄÚµùÇϽʽÿÀ.
È£Ãâ ÇÁ·Î±×·¥À¸·Î °ªÀ» ¸®ÅÏÇÏÁö ¾Ê´Â ¸Þ¼Òµå¸¦ ÀÛ¼ºÇÏ·Á¸é void¸¦ ¸®ÅÏÇϵµ·Ï ¸Þ¼Òµå¸¦ ¼±¾ðÇÑ ´ÙÀ½ ¸Þ¼Òµå º»¹®À¸·Î Àü´ÞÇØ¾ß ÇÏ´Â ¼¸í¿¡ ÀÓÀÇÀÇ ¸Å°³º¯¼ö¸¦ Æ÷ÇÔÇϽʽÿÀ. ´Ü¼ø UDPATE¸¦ ¼öÇàÇÑ ´ÙÀ½ Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ëÇÁ·Î±×·¥¿¡ °ªÀ» ¸®ÅÏÇÏÁö ¾Ê´Â ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
public class JavaExamples { public static void updateJob(String oldJob, String newJob) throws SQLException { Connection conn=DriverManager.getConnection("jdbc:ibm.db2.sample"); PreparedStatement stmt = conn.prepareStatement("UPDATE employee SET job = ? WHERE job = ?"); stmt.setString(1, newJob); stmt.setString(2, oldJob); stmt.executeUpdate(); conn.close(); return; } }
°¢ SQL µ¥ÀÌÅÍ À¯Çü¿¡ ÇØ´çÇÏ´Â Java ¸®ÅÏ À¯ÇüÀ¸·Î ´ÜÀÏ °ªÀ» ¸®ÅÏÇÏ´Â Java ¸Þ¼Òµå¸¦ ¼±¾ðÇϽʽÿÀ(Java¿¡¼ Áö¿øµÇ´Â SQL µ¥ÀÌÅÍ À¯Çü ÂüÁ¶). ´ÙÀ½°ú °°ÀÌ SQL INTEGER °ªÀ» ¸®ÅÏÇÏ´Â ½ºÄ®¶ó UDF¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
public class JavaExamples { public static int getDivision(String division) throws SQLException { if (division.equals("Corporate")) return 1; else if (division.equals("Eastern")) return 2; else if (division.equals("Midwest")) return 3; else if (division.equals("Western")) return 4; else return 5; } }
ÀúÀå ÇÁ·Î½Ãµà¾î·Î īŻ·Î±×ÈµÈ Java ¸Þ¼Òµå¿¡¼ °ªÀ» Çϳª ÀÌ»ó ¸®ÅÏÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ º¹¼ö °á°ú ¼¼Æ®¸¦ ¸®ÅÏÇÏ´Â Java ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ ÀÛ¼ºÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀúÀå ÇÁ·Î½Ãµà¾î·ÎºÎÅÍ °á°ú ¼¼Æ® ¸®ÅÏ¿¡¼ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. »çÀü °áÁ¤µÈ °ªÀÇ ¼ö¸¦ ¸®ÅÏÇÏ´Â ¸Þ¼Òµå¸¦ ÄÚµùÇÏ·Á¸é void ¸®ÅÏ À¯ÇüÀ» ¼±¾ðÇÑ ´ÙÀ½ ¸Þ¼Òµå ¼¸í¿¡ ¿¹»óµÈ Ãâ·ÂÀÇ À¯ÇüÀ» ¹è¿·Î Æ÷ÇÔÇϽʽÿÀ. À̸§, ¼ºñ½º ¿¬µµ ¹× ÁöÁ¤µÈ ÀÓ°è°ª ¾Æ·¡ÀÇ ±Þ¿©¸¦ ¹Þ´Â µÎ ¸íÀÇ ÃÖÀå³â Á÷¿øÀÇ ±Þ¿©¸¦ ¸®ÅÏÇÏ´Â ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
public Class JavaExamples { public static void lowSenioritySalary (String[] name1, int[] years1, BigDecimal[] salary1, String[] name2, int[] years2, BigDecimal[] salary2, Integer threshhold) throws SQLException { #sql iterator ByNames (String name, int years, BigDecimal salary); ByNames result; #sql result = {"SELECT name, years, salary FROM staff WHERE salary < :threshhold ORDER BY years DESC"}; if (result.next()) { name1[0] = result.name(); years1[0] = result.years(); salary1[0] = result.salary(); } else { name1[0] = "****"; return; } if (result.next()) { name2[0] = result.name(); years2[0] = result.years(); salary2[0] = result.salary(); } else { name2[0] = "****"; return; } } }