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


SQL ÇÁ·Î½Ãµà¾î¿¡¼­ Á¶°Ç Á¶Àý

Á¶°Ç Çڵ鷯´Â Á¶°ÇÀÌ ¹ß»ýÇÒ ¶§ SQL ÇÁ·Î½Ãµà¾îÀÇ µ¿ÀÛÀ» °áÁ¤ÇÕ´Ï´Ù. ÀÏ¹Ý DB2 Á¶°Ç, ƯÁ¤ SQLSTATE °ª¿¡ ´ëÇØ Á¤ÀÇµÈ Á¶°Ç ¶Ç´Â ƯÁ¤ SQLSTATE °ª¿¡ ´ëÇØ SQL ÇÁ·Î½Ãµà¾î¿¡¼­ Á¶°Ç Çڵ鷯¸¦ Çϳª ÀÌ»ó ¼±¾ðÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÏ¹Ý Á¶°Ç ¹× ÀÚ½ÅÀÇ Á¶°ÇÀ» Á¤ÀÇÇÏ´Â °Í¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Á¶°Ç Çڵ鷯 ¼±¾ðÀ» ÂüÁ¶ÇϽʽÿÀ.

SQL ÇÁ·Î½Ãµà¾î¿¡ ÀÖ´Â ¸í·É¹®ÀÌ SQLWARNING ¶Ç´Â NOT FOUND Á¶°ÇÀ» ½ÇÇàÇÏ°í °¢°¢ÀÇ Á¶°Ç¿¡ Çڵ鷯¸¦ ¼±¾ðÇÑ °æ¿ì DB2´Â ÇØ´ç Çڵ鷯·Î Á¦¾î¸¦ Àü´ÞÇÕ´Ï´Ù. ±× ƯÁ¤ Á¶°Ç¿¡ ´ëÇØ Çڵ鷯¸¦ ¼±¾ðÇÏÁö ¾ÊÀ¸¸é DB2´Â Á¶°Ç¿¡ ´ëÇØ SQLSTATE ¹× SQLCODE º¯¼ö¸¦ ÇØ´ç °ªÀ¸·Î ¼³Á¤Çϰí Á¦¾î¸¦ ÇÁ·Î½Ãµà¾î º»¹®¿¡ ÀÖ´Â ´ÙÀ½ ¸í·É¹®À¸·Î Àü´ÞÇÕ´Ï´Ù.

SQL ÇÁ·Î½Ãµà¾î¿¡ ÀÖ´Â ¸í·É¹®ÀÌ SQLEXCEPTION Á¶°ÇÀ» ÀÏÀ¸Å°°í ƯÁ¤ SQLSTATE ¶Ç´Â SQLEXCEPTION Á¶°Ç¿¡ ´ëÇØ Çڵ鷯¸¦ ¼±¾ðÇϸé DB2´Â ±× Çڵ鷯·Î Á¦¾î¸¦ Àü´ÞÇÕ´Ï´Ù. DB2°¡ Çڵ鷯¸¦ ¼º°øÀûÀ¸·Î ½ÇÇàÇϸé SQLSTATE ¹× SQLCODEÀÇ °ªÀº °¢°¢ '00000'°ú 0À» ¸®ÅÏÇÕ´Ï´Ù.

SQL ÇÁ·Î½Ãµà¾î¿¡ ÀÖ´Â ¸í·É¹®ÀÌ SQLEXCEPTION Á¶°ÇÀ» ÀÏÀ¸Å°°í ƯÁ¤ SQLSTATE ¶Ç´Â SQLEXCEPTION¿¡ ´ëÇØ Çڵ鷯¸¦ ¼±¾ðÇÏÁö ¾ÊÀ¸¸é DB2´Â SQL ÇÁ·Î½Ãµà¾î¸¦ Á¾·áÇϰí Ŭ¶óÀÌ¾ðÆ®·Î ¸®ÅÏÇÕ´Ï´Ù.

Á¶°Ç Çڵ鷯 ¼±¾ð

Çڵ鷯 ¼±¾ðÀÇ ÀÏ¹Ý Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.

   DECLARE handler-type  HANDLER FOR condition SQL-procedure-statement

DB2¿¡¼­ condition°ú ÀÏÄ¡ÇÏ´Â Á¶°ÇÀ» ÀÏÀ¸Å°¸é DB2´Â Á¦¾î¸¦ Á¶°Ç Çڵ鷯·Î Àü´ÞÇÕ´Ï´Ù. Á¶°Ç Çڵ鷯´Â handler-type¿¡ ÀÇÇØ Ç¥½ÃµÈ ÀÛ¾÷À» ¼öÇàÇÑ ´ÙÀ½ SQL-procedure-statement¸¦ ½ÇÇàÇÕ´Ï´Ù.

handler-type

CONTINUE
SQL-procedure-statement°¡ ¿Ï·áµÈ ÈÄ ¿À·ù¸¦ ÀÏÀ¸Å² ¸í·É¹® ´ÙÀ½ ¸í·É¹®À¸·Î °è¼Ó ½ÇÇàÇÔÀ» ÁöÁ¤ÇÕ´Ï´Ù.

EXIT
SQL-procedure-statement°¡ ¿Ï·áµÈ ÈÄ Çڵ鷯°¡ µé¾î ÀÖ´Â º¹ÇÕ ÅØ½ºÆ® ¸í·É¹® ³¡¿¡¼­ °è¼Ó ½ÇÇàÇÔÀ» ÁöÁ¤ÇÕ´Ï´Ù.

UNDO
SQL-procedure-statement°¡ ½ÇÇàÇϱâ Àü DB2°¡ Çڵ鷯°¡ µé¾î ÀÖ´Â º¹ÇÕ ÅØ½ºÆ® ¸í·É¹®¿¡¼­ ¹ß»ýÇÏ´Â ¸ðµç SQL Á¶ÀÛÀ» ±¸°£ º¹¿øÇÔÀ» ÁöÁ¤ÇÕ´Ï´Ù. SQL-procedure-statement°¡ ¿Ï·áµÈ ÈÄ Çڵ鷯°¡ µé¾î ÀÖ´Â º¹ÇÕ ÅØ½ºÆ® ¸í·É¹® ³¡¿¡¼­ °è¼Ó ½ÇÇàµË´Ï´Ù.

ÁÖ:ATOMIC º¹ÇÕ ÅØ½ºÆ® ¸í·É¹®¿¡¼­ UNDO Çڵ鷯¸¸ ¼±¾ðÇÒ ¼ö ÀÖ½À´Ï´Ù.

Á¶°Ç
DB2´Â ¼¼ °¡Áö ÀÏ¹Ý Á¶°ÇÀ» Á¦°øÇÕ´Ï´Ù.

NOT FOUND
+100ÀÇ SQLCODE ¶Ç´Â '02000'ÀÇ SQLSTATE¸¦ ÃÊ·¡ÇÏ´Â ¸ðµç Á¶°ÇÀ» ½Äº°ÇÕ´Ï´Ù.

SQLEXCEPTION
ºÎÁ¤ÀûÀÎ SQLCODE¸¦ ÃÊ·¡ÇÏ´Â ¸ðµç Á¶°ÇÀ» ½Äº°ÇÕ´Ï´Ù.

SQLWARNING
(SQLWARN0°¡ 'W')¶ó´Â °æ°í Á¶°ÇÀ̳ª +100ÀÌ ¾Æ´Ñ ±àÁ¤Àû SQL ¸®ÅÏ Äڵ带 ÃÊ·¡ÇÏ´Â ¸ðµç Á¶°ÇÀ» ½Äº°ÇÕ´Ï´Ù.

DECLARE¹®À» »ç¿ëÇÏ¿© ƯÁ¤ SQLSTATE¿¡ ´ëÇØ ÀÚü Á¶°ÇÀ» Á¤ÀÇÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÚü Á¶°Ç Á¤ÀÇ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº SQL ÂüÁ¶¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.

SQL-procedure-statement
´ÜÀÏ SQL ÇÁ·Î½Ãµà¾î ¸í·É¹®À» »ç¿ëÇÏ¿© Á¶°Ç Çڵ鷯ÀÇ µ¿ÀÛÀ» Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. DB2´Â BEGIN...END ºí·ÏÀ¸·Î ±¸ºÐµÈ º¹ÇÕ ÅØ½ºÆ® ¸í·É¹®À» ´ÜÀÏ SQL ÇÁ·Î½Ãµà¾î ¸í·É¹®À¸·Î ½ÂÀÎÇÕ´Ï´Ù. º¹ÇÕ ÅØ½ºÆ® ¸í·É¹®À» »ç¿ëÇÏ¿© Á¶°Ç Çڵ鷯ÀÇ µ¿ÀÛÀ» Á¤ÀÇÇϰí Çڵ鷯·Î SQLSTATE ¶Ç´Â SQLCODE º¯¼öÀÇ °ªÀ» À¯ÁöÇϸé, º¯¼öÀÇ °ªÀ» º¹ÇÕ ÅØ½ºÆ® ºí·ÏÀÇ Ã¹¹øÂ° ¸í·É¹®¿¡ ÀÖ´Â Áö¿ª º¯¼ö ¶Ç´Â ¸Å°³º¯¼ö¿¡ ÇÒ´çÇØ¾ß ÇÕ´Ï´Ù. º¹ÇÕ ÅØ½ºÆ® ºí·ÏÀÇ Ã¹¹øÂ° ¸í·É¹®ÀÌ SQLSTATE ¶Ç´Â SQLCODEÀÇ °ªÀ» Áö¿ª º¯¼ö³ª ¸Å°³º¯¼ö¿¡ ÇÒ´çÇÏÁö ¾ÊÀ¸¸é, SQLSTATE¿Í SQLCODE´Â Db2¿¡¼­ Á¶°Ç Çڵ鷯¸¦ È£ÃâÇÏ°Ô ¸¸µç °ªÀ» À¯ÁöÇÒ ¼ö ¾ø½À´Ï´Ù.

ÁÖ:Á¶°Ç Çڵ鷯¿¡¼­ ¶Ç´Ù¸¥ Á¶°Ç Çڵ鷯¸¦ Á¤ÀÇÇÒ ¼ö ¾ø½À´Ï´Ù.

´ÙÀ½ ¿¹´Â °£´ÜÇÑ Á¶°Ç Çڵ鷯¸¦ º¸¿©ÁÝ´Ï´Ù.

¿¹: CONTINUE Çڵ鷯: ÀÌ Çڵ鷯´Â DB2°¡ NOT FOUND Á¶°ÇÀ» ¹ß»ý½Ãų ¶§ 1ÀÇ °ªÀ» at_end Áö¿ª º¯¼ö¿¡ ÇÒ´çÇÕ´Ï´Ù. ±×·¯¸é DB2´Â Á¦¾î¸¦ NOT FOUND Á¶°ÇÀ» ÀÏÀ¸Å² ¸í·É¹® ´ÙÀ½ÀÇ ¸í·É¹®À¸·Î Àü´ÞÇÕ´Ï´Ù.

    DECLARE not_found CONDITION FOR SQLSTATE '02000';
    DECLARE CONTINUE HANDLER FOR not_found SET at_end=1;

¿¹: EXIT Çڵ鷯: ÇÁ·Î½Ãµà¾î´Â NO_TABLEÀ» SQLSTATE 42704 (nameÀº Á¤ÀǵÇÁö ¾ÊÀº À̸§)ÀÇ Á¶°Ç À̸§À¸·Î ¼±¾ðÇÕ´Ï´Ù. NO_TABLEÀÇ Á¶°Ç Çڵ鷯´Â Table does not exist ¹®ÀÚ¿­À» OUT_BUFFER Ãâ·Â ¸Å°³º¯¼ö¿¡ ¹èÄ¡ÇÕ´Ï´Ù. ±×·¯¸é Çڵ鷯´Â SQL ÇÁ·Î½Ãµà¾î¿¡¼­ Çڵ鷯°¡ ¼±¾ðµÈ º¹ÇÕ ÅØ½ºÆ® ¸í·É¹®À» Á¾·áÇϵµ·Ï ¸¸µì´Ï´Ù.

    DECLARE NO_TABLE CONDITION FOR SQLSTATE '42704';
    DECLARE EXIT HANDLER FOR NO_TABLE
       BEGIN
           SET OUT_BUFFER='Table does not exist';
       END

¿¹: UNDO Çڵ鷯: ÇÁ·Î½Ãµà¾î´Â ¸ÕÀú SQLSTATE¿¡ ´ëÇØ À̸§À» Á¤ÀÇÇÏÁö ¾Ê°í SQLSTATE 42704ÀÇ UNDO Á¶°Ç Çڵ鷯¸¦ ¼±¾ðÇÕ´Ï´Ù. Çڵ鷯´Â SQL ÇÁ·Î½Ãµà¾î¿¡¼­ ÇöÀç ÀÛ¾÷ ´ÜÀ§¸¦ ±¸°£ º¹¿øÇϰí Table does not exist ¹®ÀÚ¿­À» OUT_BUFFER Ãâ·Â ¸Å°³º¯¼ö¿¡ ¹èÄ¡Çϸç, Çڵ鷯°¡ ¼±¾ðµÈ º¹ÇÕ ÅØ½ºÆ® ¸í·É¹®À» Á¾·áÇÏ°Ô ¸¸µì´Ï´Ù.

    DECLARE UNDO HANDLER FOR SQLSTATE '42704'
       BEGIN
           SET OUT_BUFFER='Table does not exist';
       END;
ÁÖ:ATOMIC º¹ÇÕ ÅØ½ºÆ® ¸í·É¹®¿¡¼­ UNDO Çڵ鷯¸¸ ¼±¾ðÇÒ ¼ö ÀÖ½À´Ï´Ù.

SIGNAL ¹× RESIGNAL¹®

SIGNAL°ú RESIGNAL¹®À» »ç¿ëÇÏ¿© ƯÁ¤ SQLSTATE¸¦ ¸í½ÃÀûÀ¸·Î ÀÏÀ¸Å³ ¼ö ÀÖ½À´Ï´Ù. SIGNAL°ú RESIGNAL¹®ÀÇ SET MESSAGE_TEXTÀýÀ» »ç¿ëÇÏ¿© DB°¡ »ç¿ëÀÚ Á¤ÀÇµÈ SQLSTATE¿¡ ´ëÇØ Ç¥½ÃÇÒ ÅØ½ºÆ®¸¦ Á¤ÀÇÇϽʽÿÀ.

´ÙÀ½ ¿¹¿¡¼­ SQL ÇÁ·Î½Ãµà¾î º»¹®Àº »ç¿ëÀÚ Á¤ÀÇ SQLSTATE 72822ÀÇ Á¶°Ç Çڵ鷯¸¦ ¼±¾ðÇÕ´Ï´Ù. ÇÁ·Î½Ãµà¾î°¡ SQLSTATE 72822¸¦ ÀÏÀ¸Å°´Â SIGNAL¹®À» ½ÇÇàÇϸé DB2´Â Á¶°Ç Çڵ鷯¸¦ È£ÃâÇÕ´Ï´Ù. Á¶°Ç Çڵ鷯´Â IF¹®À» »ç¿ëÇÏ¿© SQL º¯¼ö varÀÇ °ªÀ» Å×½ºÆ®ÇÕ´Ï´Ù. varÀÌ OKÀ̸é, Çڵ鷯´Â SQLSTATE °ªÀ» 72623À¸·Î ÀçÁ¤ÀÇÇÏ°í ¹®ÀÚ¿­ ¸®ÅÍ·²À» SQLSTATE 72623¿¡ ¿¬°üµÈ ÅØ½ºÆ®¿¡ ÇÒ´çÇÕ´Ï´Ù. varÀÌ OK°¡ ¾Æ´Ï¸é, Çڵ鷯´Â SQLSTATE °ªÀ» 72319·Î ÀçÁ¤ÀÇÇϰí varÀÇ °ªÀ» ±× SQLSTATE¿¡ ¿¬°üµÈ ÅØ½ºÆ®·Î ÇÒ´çÇÕ´Ï´Ù.

   DECLARE EXIT CONDITION HANDLER FOR SQLSTATE '72822'
      BEGIN
          IF ( var = 'OK' )
             RESIGNAL '72623' SET MESSAGE_TEXT = 'Got SQLSTATE 72822';
          ELSE
             RESIGNAL '72319' SET MESSAGE_TEXT = var;
      END;
 
   SIGNAL SQLSTATE '72822';

SIGNAL ¹× RESIGNAL¹®¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â SQL ÂüÁ¶¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.

SQL ÇÁ·Î½Ãµà¾îÀÇ SQLCODE ¹× SQLSTATE º¯¼ö

SQL ÇÁ·Î½Ãµà¾î¸¦ µð¹ö±×ÇÏ·Á¸é SQL ÇÁ·Î½Ãµà¾îÀÇ ´Ù¾çÇÑ À§Ä¡¿¡¼­ SQLSTATE¿Í SQLCODEÀÇ °ªÀ» »ðÀÔÇϰųª SQLCODE¿Í SQLSTATE °ªÀ» Áø´Ü ¹®ÀÚ¿­¿¡¼­ OUT ¸Å°³º¯¼ö·Î ¸®ÅÏÇÒ ¼ö ÀÖ½À´Ï´Ù. SQLCODE¿Í SQLSTATE °ªÀ» »ç¿ëÇÏ·Á¸é SQL ÇÁ·Î½Ãµà¾î º»¹®¿¡¼­ ´ÙÀ½ SQl º¯¼ö¸¦ ¼±¾ðÇϽʽÿÀ.

   DECLARE SQLCODE INTEGER DEFAULT 0;
   DECLARE SQLSTATE CHAR(5) DEFAULT '00000';

CONTINUE Á¶°Ç Çڵ鷯¸¦ »ç¿ëÇÏ¿© SQLSTATE¿Í SQLCODE º¯¼öÀÇ °ªÀ» SQL ÇÁ·Î½Ãµà¾î º»¹®¿¡ ÀÖ´Â Áö¿ª º¯¼ö¿¡ ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·± Áö¿ª º¯¼ö¸¦ »ç¿ëÇÏ¿© ÀýÂ÷Àû ³í¸®¸¦ Á¦¾îÇϰųª °ªÀ» ´Ù½Ã Ãâ·Â ¸Å°³º¯¼ö·Î Àü´ÞÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ ¿¹¿¡¼­ SQL ÇÁ·Î½Ãµà¾î´Â SQLCODE°¡ RETCODE¶ó´Â Áö¿ª º¯¼ö¿¡ ¼³Á¤µÈ °¢ SQL¹® ´ÙÀ½ ¸í·É¹®À¸·Î Á¦¾î¸¦ ¸®ÅÏÇÕ´Ï´Ù.

   DECLARE SQLCODE INTEGER DEFAULT 0;
   DECLARE retcode INTEGER DEFAULT 0;
 
   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET retcode = SQLCODE;
   DECLARE CONTINUE HANDLER FOR SQLWARNING SET retcode = SQLCODE;
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET retcode = SQLCODE;
ÁÖ:SQL ÇÁ·Î½Ãµà¾î¿¡¼­ SQLCODE³ª SQLSTATE º¯¼ö¸¦ ¾×¼¼½ºÇÒ ¶§ DB2´Â ÈÄ¼Ó ¸í·É¹®¿¡ ´ëÇØ SQLCODEÀÇ °ªÀ» 0À¸·Î ¼³Á¤Çϰí SQLSTATEÀÇ °ªÀ» '00000'À¸·Î ¼³Á¤ÇÕ´Ï´Ù.


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