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


Java¿¡ ÀÖ´Â ÀúÀå ÇÁ·Î½Ãµà¾î ¹× UDF

´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ °æ¿ì¿Í ¸¶Âù°¡Áö·Î ÀúÀå ÇÁ·Î½Ãµà¾î¿Í 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 ¿¬»êÀÚ·Î À̸¦ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.

Java Ŭ·¡½º¸¦ ³ÖÀ» À§Ä¡

ÀúÀå ÇÁ·Î½Ãµà¾î ¶Ç´Â UDF¿¡ ´ëÇØ °³º° Java Ŭ·¡½º ÆÄÀÏÀ» ¼±ÅÃÇϰųª Ŭ·¡½º ÆÄÀÏÀ» JAR ÆÄÀÏ·Î ¼öÁýÇØ ³Ö°í µ¥ÀÌÅͺ£À̽º¿¡ JAR ÆÄÀÏÀ» ¼³Ä¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. JAR ÆÄÀÏÀ» »ç¿ëÇÏ·Á´Â °æ¿ì ÀÚ¼¼ÇÑ ÁöħÀº Java ÀúÀå ÇÁ·Î½Ãµà¾î ¹× UDFÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

ÁÖ:Java ·çƾ Ŭ·¡½º ÆÄÀÏÀ» °»½ÅÇϰųª ´ëüÇϸé, CALL SQLJ.REFRESH_CLASSES()¹®À» ½ÇÇàÇÏ¿© DB2¿¡¼­ °»½ÅµÈ Ŭ·¡½º¸¦ ·ÎµåÇØ¾ß ÇÕ´Ï´Ù. CALL SQLJ.REFRESH_CLASSES() ¹®¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ·çƾ¿¡¼­ Java Ŭ·¡½º °»½ÅÀ» ÂüÁ¶ÇϽʽÿÀ.

DB2¸¦ »ç¿ëÇÏ¿© ÀúÀå ÇÁ·Î½Ãµà¾î¿Í UDF ã¾Æ »ç¿ëÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ¿î¿µ üÁ¦¿¡ ´ëÇØ Á¤ÀÇµÈ µð·ºÅ丮ÀÎ ÇÔ¼ö µð·ºÅ丮¿¡ ÇØ´ç Ŭ·¡½º ÆÄÀÏÀ» ÀúÀåÇØ¾ß ÇÕ´Ï´Ù.

Unix ¿î¿µ üÁ¦
sqllib/function

OS/2 ¶Ç´Â Windows 32 ºñÆ® ¿î¿µ üÁ¦
instance_name\function, ¿©±â¼­ instance_nameÀº DB2INSTPROF ÀνºÅϽº °íÀ¯ÀÇ ·¹Áö½ºÆ®¸® ¼³Á¤ °ªÀ» Ç¥½ÃÇÕ´Ï´Ù.

¿¹¸¦ µé¾î, 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 Ŭ·¡½º °»½Å

Java ·çƾ Ŭ·¡½º¸¦ °»½ÅÇÒ ¶§ CALL SQLJ.REFRESH_CLASSES()¹®À» ½ÇÇàÇÏ¿© DB2¿¡¼­ »õ Ŭ·¡½º¸¦ ·ÎµåÇÏ°Ô ÇØ¾ß ÇÕ´Ï´Ù. Java ·çƾ Äڵ带 °»½ÅÇÑ ÈÄ¿¡ CALL SQLJ.REFRESH_CLASSES()¹®À» ½ÇÇàÇÏÁö ¾ÊÀ¸¸é DB2´Â °è¼Ó Ŭ·¡½ºÀÇ ÀÌÀü ¹öÀüÀ» »ç¿ëÇÕ´Ï´Ù. CALL SQLJ.REFRESH_CLASSES()¹®Àº FENCED ·çƾ¿¡¸¸ Àû¿ëµË´Ï´Ù. DB2´Â COMMIT ¶Ç´Â ROLLBACKÀÌ ¹ß»ýÇÒ ¶§ Ŭ·¡½º¸¦ »õ·Î °íĨ´Ï´Ù.
ÁÖ:µ¥ÀÌÅͺ£À̽º °ü¸®ÀÚ¸¦ ÁßÁöÇÏ°í ´Ù½Ã ½ÃÀÛÇÏÁö ¾ÊÀº »óÅ¿¡¼­´Â NOT FENCED ·çƾÀ» °»½ÅÇÒ ¼ö ¾ø½À´Ï´Ù.

Java¿¡¼­ ÀúÀå ÇÁ·Î½Ãµà¾î µð¹ö±ë

ÀúÀå ÇÁ·Î½Ãµà¾î°¡ AIX ¶Ç´Â Windows NT¼­¹ö¿¡¼­ ½ÇÇàÇÒ °æ¿ì DB2¿¡¼­´Â JDBC·Î ÀÛ¼ºÇÑ ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ ´ëÈ­½ÄÀ¸·Î µð¹ö±×ÇÏ´Â ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù. DB2 Stored Procedure Builder¸¦ »ç¿ëÇÏ¸é °¡Àå ½±°Ô µð¹ö±ëÀ» È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ±× ½ÇÇà ¹æ¹ý¿¡ ´ëÇØ¼­´Â Stored Procedure Builder¿¡ ´ëÇÑ ¿Â¶óÀÎ µµ¿ò¸»À» ÂüÁ¶ÇϽʽÿÀ.

ÀÌ Àý¿¡¼­´Â ´ÙÀ½ ÁÖÁ¦¸¦ ´Ù·ì´Ï´Ù.

µð¹ö±× Áغñ

  1. JDK °³¹ß ȯ°æ ¹®¼­¿¡ µû¶ó ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ µð¹ö±× ¸ðµå·Î ÄÄÆÄÀÏÇϽʽÿÀ.
  2. ¼­¹ö Áغñ.
  3. Ŭ¶óÀÌ¾ðÆ® È¯°æ º¯¼ö¸¦ ¼³Á¤ÇϽʽÿÀ.
  4. µð¹ö±× Å×À̺í ÀÛ¼º.

    Stored Procedure Builder¸¦ »ç¿ëÇÏ¿© µð¹ö°Å¸¦ È£ÃâÇÏÁö ¾ÊÀ» °æ¿ì ´ÙÀ½ ¸í·ÉÀ¸·Î µð¹ö±× Å×À̺íÀ» ÀÛ¼ºÇϽʽÿÀ.

         db2 -tf sqllib/misc/db2debug.ddl
    

    ÁÖ:DB2 Enterprise - Extended Edition ½Ã½ºÅÛ¿¡¼­ ±âº» ³ëµå±×·ìÀº USERSPACE1 Å×ÀÌºí °ø°£¿¡ ´ëÇÑ IBMDEFAULTGROUPÀÌ¸ç ½Ã½ºÅÛ¿¡ ´ëÇØ Á¤ÀÇµÈ ¸ðµç ³ëµå·Î ±¸¼ºµË´Ï´Ù. DB2 Enterprise - Extended Edition ±¸¼º¿¡¼­ ÀúÀå ÇÁ·Î½Ãµà¾î µð¹ö±ëÀÇ ¼º´ÉÀ» Çâ»ó½ÃŰ·Á¸é µð¹ö±ëÀÌ ¹ß»ýÇÑ ´ÜÀÏ Á¶Á¤ÀÚ ³ëµå°¡ ÀÖ¾î¾ß ÇÏ¸ç ±× ³ëµå¸¸ ÀÖ´Â ³ëµå ±×·ìÀ» Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù.

  5. Ŭ¶óÀÌ¾ðÆ®¿¡¼­ µð¹ö°Å µð¸ÕÀ» ½ÃÀÛÇϽʽÿÀ.

    ÀúÀå ÇÁ·Î½Ãµà¾î Ŭ¶óÀÌ¾ðÆ®¿¡¼­ ´ÙÀ½ ¸í·ÉÀ¸·Î µð¹ö°Å µð¸ÕÀ» ½ÃÀÛÇϽʽÿÀ.

         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')

¿©±â¼­, :

authid
ÀúÀå ÇÁ·Î½Ãµà¾î µð¹ö±ë¿¡ »ç¿ëµÇ´Â »ç¿ëÀÚ À̸§. Áï, µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°áÇÏ´Â µ¥ »ç¿ëµÇ´Â »ç¿ëÀÚ À̸§.

schema
ÀúÀå ÇÁ·Î½Ãµà¾îÀÇ ½ºÅ°¸¶ À̸§.

proc_name
ÀúÀå ÇÁ·Î½Ãµà¾îÀÇ Æ¯Á¤ À̸§. ƯÁ¤ À̸§À» Á¦°øÇÏÁö ¾ÊÀº °æ¿ì CREATE PROCEDURE ¸í·É ¶Ç´Â ½Ã½ºÅÛ »ý¼º ½Äº°ÀÚ¿¡ Á¦°øµÈ ƯÁ¤ À̸§ÀÔ´Ï´Ù.

IP_num
ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ µð¹ö±×ÇÏ´Â µ¥ »ç¿ëÇÑ Å¬¶óÀ̾ðÆ®ÀÇ IP ÁÖ¼Ò·Î ±× ¾ç½ÄÀº nnn.nnn.nnn.nnn.

¿¹¸¦ µé¾î, 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'

À¯È¿ÇÑ °ª:
  • Y - ROUTINE_SCHEMA.SPECIFICNAME¿¡ ¸í¸íµÈ ÀúÀå ÇÁ·Î½Ãµà¾î¿¡ ´ëÇÑ µð¹ö±ë »ç¿ë
  • N - ROUTINE_SCHEMA.SPECIFICNAME¿¡ ¸í¸íµÈ ÀúÀå ÇÁ·Î½Ãµà¾î¿¡ ´ëÇÑ µð¹ö±ë »ç¿ë¾ÈÇÔ. ±âº»°ªÀÔ´Ï´Ù.
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 ÀúÀå ÇÁ·Î½Ãµà¾î ¹× UDF

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 ÇÔ¼ö³ª ÀúÀå ÇÁ·Î½Ãµà¾î¸¦ µî·ÏÇÏ·Á¸é ´ÙÀ½ ´Ü°è¸¦ µû¸£½Ê½Ã¿À.

  1. Java ¸Þ¼Òµå¸¦ Java ·çƾÀ¸·Î ÀÛ¼ºÇϽʽÿÀ. Java ¼Ò½º Äڵ带 Java Ŭ·¡½º ÆÄÀÏ·Î ÄÄÆÄÀÏÇϽʽÿÀ. Java ÀúÀå ÇÁ·Î½Ãµà¾î ÀÛ¼º¿¡ ´ëÇØ¼­´Â "ÀúÀå ÇÁ·Î½Ãµà¾î"¿¡¼­ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. Java UDF ÀÛ¼º¿¡ ´ëÇØ¼­´Â "Java »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö ÀÛ¼º ¹× »ç¿ë"¿¡¼­ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
  2. jar ÆÄÀÏ¿¡ Java ·çƾÀ» Æ÷ÇÔÇÑ Å¬·¡½º ÆÄÀÏÀ» ¼öÁýÇϽʽÿÀ. ´ÜÀÏ JAR ÆÄÀÏ¿¡ Ŭ·¡½º ÆÄÀÏÀ» Çϳª ÀÌ»ó ¼öÁýÇÒ ¼ö ÀÖ½À´Ï´Ù. JAR ÆÄÀÏ ÀÛ¼º¿¡ ´ëÇÑ ÁöħÀº ÀÀ¿ëÇÁ·Î±×·¥ ºôµå ¾È³»¼­ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
  3. DB2 ÀνºÅϽº¿¡ JAR ÆÄÀÏÀ» ¼³Ä¡ÇϽʽÿÀ. ¸í·ÉÇà¿¡¼­ cALL SQLJ.INSTALL_JAR¹®À» »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­´Â JAR ÆÄÀÏ ¼³Ä¡, ´ëü ¹× Á¦°Å¿¡¼­ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. ¶ÇÇÑ CLP·ÎºÎÅÍ ÀÀ¿ëÇÁ·Î±×·¥ÀÇ sqlj.install_jar ÇÁ·Î½Ãµà¾î¸¦ È£ÃâÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
  4. Java ·çƾÀÇ ÇØ´ç CREATE PROCEDURE ¶Ç´Â CREATE FUNCTION SQL¹®À» ¹ßÇàÇϽʽÿÀ.

JAR ÆÄÀÏÀ» ¼³Ä¡Çϸé DB2¿¡¼­ JAR ÆÄÀϷκÎÅÍ Java Ŭ·¡½º ÆÄÀÏÀ» ÃßÃâÇÑ ´ÙÀ½ ½Ã½ºÅÛ Ä«Å»·Î±×ÀÇ °¢ Ŭ·¡½º¸¦ µî·ÏÇÕ´Ï´Ù. DB2¿¡¼­ JAR ÆÄÀÏÀ» ÇÔ¼ö µð·ºÅ丮ÀÇ jar/schema ¼­ºêµð·ºÅ丮·Î º¹»çÇÕ´Ï´Ù. DB2¿¡¼­´Â jar-idÀý¿¡ ÁöÁ¤µÈ À̸§À» JAR ÆÄÀÏÀÇ »õ·Î¿î »çº»¿¡ ÁöÁ¤ÇÕ´Ï´Ù. DB2 ÀνºÅϽº¿¡ ¼³Ä¡ÇÑ JAR ÆÄÀÏÀ» Á÷Á¢ ¼öÁ¤ÇÏÁö ¸¶½Ê½Ã¿À. ´ë½Å CALL SQLJ.REMOVE_JAR and CALL SQLJ.REPLACE_JAR ¸í·ÉÀ» »ç¿ëÇÏ¿© ¼³Ä¡µÈ JAR ÆÄÀÏÀ» Á¦°ÅÇϰųª ´ëüÇÒ ¼ö ÀÖ½À´Ï´Ù.

JAR ÆÄÀÏ ¼³Ä¡, ´ëü ¹× Á¦°Å

DB2 ÀνºÅϽº¿¡¼­ JAR ÆÄÀÏÀ» ¼³Ä¡Çϰųª ´ëüÇϱâ À§ÇØ ¸í·ÉÇà 󸮱⿡¼­ ´ÙÀ½ ¸í·É ±¸¹®À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

                                             (1)                   (2)
>>-CALL-+-SQLJ.INSTALL_JAR-+---(--'--jar-url-------'--,--'--jar-id-------'--)-->
        '-SQLJ.REPLACE_JAR-'
 
>--------------------------------------------------------------><
 

ÁÖ:

  1. ¼³Ä¡Çϰųª Á¦°ÅÇÒ JAR ÆÄÀÏÀÌ ÀÖ´Â URLÀ» ÁöÁ¤ÇÕ´Ï´Ù. Áö¿øµÇ´Â À¯ÀÏÇÑ URL ½ºÅ´Àº 'file:'ÀÔ´Ï´Ù.

  2. jar-url·Î ÁöÁ¤ÇÑ ÆÄÀϰú ¿¬°ü½Ãų µ¥ÀÌÅͺ£À̽º¿¡¼­ 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-------'--)-------------><
 

ÁÖ:

  1. µ¥ÀÌÅͺ£À̽º¿¡¼­ Á¦°ÅÇÒ JAR ÆÄÀÏÀÇ JAR ½Äº°ÀÚ¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

µ¥ÀÌÅͺ£À̽º¿¡¼­ myProc_jar JAR ÆÄÀÏÀ» Á¦°ÅÇÏ·Á¸é ¸í·ÉÇà 󸮱⿡¼­ ´ÙÀ½ ¸í·ÉÀ» ÀÔ·ÂÇϽʽÿÀ.

   CALL SQLJ.REMOVE_JAR('myProc_jar')

Java ÇÔ¼ö Á¤ÀÇ

Java ·çƾÀ» ÀÛ¼ºÇÏ·Á¸é public Ŭ·¡½º¿¡¼­ ÇØ´ç public static ¸Þ¼Òµå¸¦ ÄÚµùÇØ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ Java ·çƾÀº throws SQLExceptionÀý·Î¼±¾ðÇØ¾ß ÇÕ´Ï´Ù. ¸Þ¼Òµå º»¹®À¸·ÎºÎÅÍ ¿¹»óµÇ´Â Ãâ·Â°ú ÀÏÄ¡Çϵµ·Ï ¸Þ¼Òµå ¼­¸í°ú ¸Þ¼Òµå ¼±¾ðÀÇ ³ª¸ÓÁö¸¦ ÄÚµùÇϽʽÿÀ.

Java¿¡¼­ °ªÀ» ¸®ÅÏÇÏÁö ¾Ê´Â ÇÔ¼ö

È£Ãâ ÇÁ·Î±×·¥À¸·Î °ªÀ» ¸®ÅÏÇÏÁö ¾Ê´Â ¸Þ¼Òµå¸¦ ÀÛ¼ºÇÏ·Á¸é 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;
         }
      }

Java¿¡¼­ ´ÜÀÏ °ªÀ» ¸®ÅÏÇÏ´Â ÇÔ¼ö

°¢ 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 ¸Þ¼Òµå¿¡¼­ °ªÀ» Çϳª ÀÌ»ó ¸®ÅÏÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ º¹¼ö °á°ú ¼¼Æ®¸¦ ¸®ÅÏÇÏ´Â 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;
      }
   }
}


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