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

Áø´Ü Á¶Àý ¹× SQLCA ±¸Á¶

SQL¹® ¹ßÇà ¹× µ¥ÀÌÅͺ£À̽º °ü¸® ÇÁ·Î±×·¥ API È£Ãâ ÀÀ¿ëÇÁ·Î±×·¥Àº ¸®ÅÏ ÄÚµå ¹× SQLCA ±¸Á¶¸¦ °ËÅäÇÏ¿© ¿À·ù Á¶°ÇÀ» Á¦´ë·Î Á¡°ËÇØ¾ß ÇÕ´Ï´Ù.

¸®ÅÏ ÄÚµå

´ëºÎºÐÀÇ µ¥ÀÌÅͺ£À̽º °ü¸® ÇÁ·Î±×·¥ API´Â ¼º°ø½Ã Á¦·Î ¸®ÅÏ Äڵ带 ´Ù½Ã Àü´ÞÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î Á¦·Î°¡ ¾Æ´Ñ ¸®ÅÏ ÄÚµå´Â 2Â÷ ¿À·ù ó¸® ¸ÞÄ«´ÏÁòÀÎ SQLCA ±¸Á¶°¡ ¼Õ»óµÇ¾úÀ½À» ³ªÅ¸³À´Ï´Ù. ÀÌ·± °æ¿ì, È£ÃâµÇ´Â API°¡ ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. SQLCA ±¸Á¶ÀÇ ¼Õ»óÀº ÀÌ ±¸Á¶¿¡ ´ëÇØ ¹«È¿ ÁÖ¼Ò¸¦ Àü´ÞÇÑ °ÍÀÌ ¿øÀÎÀÏ ¼ö ÀÖ½À´Ï´Ù.

SQLCODE ¹× SQLSTATE

¿À·ù Á¤º¸´Â SQLCA ±¸Á¶ÀÇ SQLCODE ¹× SQLSTATE Çʵ忡¼­ ¸®ÅϵǸç, ÀÌ´Â ½ÇÇà°¡´ÉÇÑ ¸ðµç SQL¹®°ú ´ëºÎºÐÀÇ µ¥ÀÌÅͺ£À̽º °ü¸® ÇÁ·Î±×·¥ API È£Ãâ ÀÌÈÄ °»½ÅµË´Ï´Ù.

½ÇÇà°¡´É SQL¹®ÀÌ Æ÷ÇÔµÈ ¼Ò½º ÆÄÀÏÀº sqlca¶ó´Â À̸§À¸·Î Àû¾îµµ ÇϳªÀÇ SQLCA ±¸Á¶¸¦ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. SQLCA ±¸Á¶´Â SQLCA Æ÷ÇÔ ÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù. Embedded SQL¹®Àº ¾øÁö¸¸ È£Ãâ µ¥ÀÌÅͺ£À̽º °ü¸® ÇÁ·Î±×·¥ API´Â ÀÖ´Â ¼Ò½º ÆÄÀϵµ Çϳª ÀÌ»óÀÇ SQLCA ±¸Á¶¸¦ Á¦°øÇÒ ¼ö ÀÖÁö¸¸ ±× À̸§Àº ÀÓÀÇÀûÀÔ´Ï´Ù.

ÀÀ¿ëÇÁ·Î±×·¥ÀÌ FIPS 127-2 Ç¥ÁØÀ» µû¸£´Â °æ¿ì, SQLCA ±¸Á¶¸¦ »ç¿ëÇÏ´Â ´ë½Å È£½ºÆ® º¯¼ö·Î¼­ SQLSTATE ¹× SQLCODE¸¦ ¼±¾ðÇÒ ¼ö ÀÖ½À´Ï´Ù. ±× ¹æ¹ý¿¡ ´ëÇÑ ¼¼ºÎ»çÇ×Àº, C ¶Ç´Â C++ ÀÀ¿ëÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â C ¹× C++ÀÇ SQLSTATE ¹× SQLCODE º¯¼ö, COBOL ÀÀ¿ëÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â COBOL¿¡¼­ SQLSTATE ¹× SQLCODE º¯¼ö, FORTRAN ÀÀ¿ëÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â FORTAN¿¡¼­ SQLSTATE ¹× SQLCODE º¯¼öÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

SQLCODE °ª 0Àº ½ÇÇàÀÌ ¼º°øÀûÀ̾úÀ½À» ³ªÅ¸³À´Ï´Ù(SQLWARN °æ°í Á¶°Ç °¡´É). ¾ç¼ö °ªÀº ¸í·É¹®ÀÌ ¼º°øÀûÀ¸·Î ½ÇÇàµÇ¾úÁö¸¸ È£½ºÆ® º¯¼öÀÇ Àý´Ü°ú °°Àº ÀÌÀ¯·Î ÀÎÇØ °æ°í°¡ ÀÖ¾úÀ½À» ³ªÅ¸³À´Ï´Ù. À½¼ö °ªÀº ¿À·ù Á¶°ÇÀÌ ¹ß»ýÇßÀ½À» ³ªÅ¸³À´Ï´Ù.

Ãß°¡ ÇʵåÀÎ SQLSTATE¿¡´Â ´Ù¸¥ IBM µ¥ÀÌÅͺ£À̽º Á¦Ç° ¹× SQL92Çü µ¥ÀÌÅͺ£À̽º °ü¸® ÇÁ·Î±×·¥À» ÅëÇØ ÀϰüµÈ Ç¥ÁØÈ­µÈ ¿À·ù Äڵ尡 µé¾î ÀÖ½À´Ï´Ù. ½ÇÁúÀûÀ¸·Î, ´ëºÎºÐÀÇ µ¥ÀÌÅͺ£À̽º °ü¸® ÇÁ·Î±×·¥À» ÅëÇØ SQLSTATE°¡ ÀϹÝÀûÀ̹ǷÎ, À̽ļºÀ» »ý°¢ÇÒ ¶§ SQLSTATE¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.

SQLCODE°¡ Á¦·ÎÀÎ °æ¿ì¿¡µµ SQLWARN Çʵ忡´Â °æ°í Ç¥½Ã±â ¹è¿­ÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. ´Ù¸¥ ¸ðµç ¿ä¼Ò°¡ °ø¹éÀÎ °æ¿ì, SQLWARN ¹è¿­ÀÇ Ã¹¹øÂ° ¿ä¼ÒÀÎ SQLWARN0¿¡´Â °ø¹éÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. Àû¾îµµ ´Ù¸¥ ÇÑ ¿ä¼Ò¿¡ °æ°í ¹®ÀÚ°¡ ÀÖÀ» °æ¿ì SQLWARN0¿¡´Â W°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.

SQLCA ±¸Á¶¿¡ ´ëÇÑ ¼¼ºÎ»çÇ×Àº Administrative API Reference>, SQLCODE ¹× SQLSTATE ¿À·ù Á¶°Ç ¸ñ·ÏÀº ¸Þ½ÃÁö ÂüÁ¶¼­ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
ÁÖ:´Ù¾çÇÑ IBM RDBMS ¼­¹ö¿¡ ¾×¼¼½ºÇÏ´Â ÀÀ¿ëÇÁ·Î±×·¥À» °³¹ßÇÏ·Á¸é ´ÙÀ½À» ¼öÇàÇØ¾ß ÇÕ´Ï´Ù.
  • °¡´ÉÇÑ °æ¿ì, »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥ÀÌ SQLCODE°¡ ¾Æ´Ñ SQLSTATE¸¦ Á¡°ËÇϵµ·Ï ÇϽʽÿÀ.
  • ÀÀ¿ëÇÁ·Î±×·¥ÀÌ DB2 Connect¸¦ »ç¿ëÇÒ °æ¿ì, ´àÁö ¾ÊÀº(unlike) µ¥ÀÌÅͺ£À̽º »çÀÌ¿¡ SQLCODE º¯È¯À» ¸ÊÇÏ·Á¸é DB2 Connect°¡ Á¦°øÇÏ´Â ¸ÊÇÎ ±â´ÉÀ» »ç¿ëÇØ º¸½Ê½Ã¿À.

SQLCA ±¸Á¶¿¡¼­ÀÇ ÅäÅ« Àý´Ü

ÅäÅ«ÀÌ SQLCA ±¸Á¶¿¡¼­ Àý´ÜµÉ ¼ö ÀÖÀ¸¹Ç·Î ÅäÅ« Á¤º¸¸¦ Áø´Ü¿ëÀ¸·Î »ç¿ëÇØ¼­´Â ¾ÈµË´Ï´Ù. Å×ÀÌºí ¹× Ä÷³ À̸§À» ÃÖ°í 128¹ÙÀÌÆ® ±æÀÌ·Î Á¤ÀÇÇÒ ¼ö ÀÖÁö¸¸ SQLCA ÅäÅ«Àº 17¹ÙÀÌÆ®¿Í Àý´Ü Á¾·áÀÚ(>) ±æÀ̸¦ ÇÕÇÑ ±æÀÌ·Î Àý´ÜµË´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥ ³í¸®´Â sqlerrmc ÇʵåÀÇ ½ÇÁ¦ ±æÀÌ¿¡ ÀÇÁ¸Çؼ­´Â ¾ÈµË´Ï´Ù. ÅäÅ« Àý´Ü¿¡ ´ëÇÑ ³íÀÇ ¹× SQLCA ±¸Á¶¿¡ ´ëÇÑ ¼³¸íÀº SQL ÂüÁ¶¼­ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

WHENEVER¹® »ç¿ë½Ã ¿À·ù ó¸®

¿À·ù³ª °æ°í°¡ Àְųª, ½ÇÇà Áß¿¡ ¹ß°ßµÇ´Â ÇàÀÌ ¾ø´Â °æ¿ì WHENEVER¹®Àº, »çÀü ó¸® ÄÄÆÄÀÏ·¯°¡ ÁöÁ¤µÈ ·¹À̺í·Î °¡µµ·Ï ÀÀ¿ëÇÁ·Î±×·¥À» ÁöÁ¤ÇÏ´Â ¼Ò½º Äڵ带 »ý¼ºÇϵµ·Ï ÇÕ´Ï´Ù. WHENEVER¹®Àº ´Ù¸¥ WHENEVER¹®ÀÌ »óȲÀ» º¯°æÇÒ ¶§±îÁö, ÀÌÈÄ¿¡ ¿À´Â ¸ðµç ½ÇÇà°¡´É SQL¹®¿¡ ¿µÇâÀ» ¹ÌĨ´Ï´Ù.

WHENEVER¹®Àº ´ÙÀ½°ú °°Àº ¼¼ °¡Áö ±âº» Çü½ÄÀ» °¡Áö°í ÀÖ½À´Ï´Ù.

     EXEC SQL WHENEVER SQLERROR   action
     EXEC SQL WHENEVER SQLWARNING action
     EXEC SQL WHENEVER NOT FOUND  action

À§ ¸í·É¹®¿¡¼­:

SQLERROR
SQLCODE < 0ÀÎ Á¶°ÇÀ» ½Äº°ÇÕ´Ï´Ù.

SQLWARNING
SQLWARN(0) = W ¶Ç´Â SQLCODE > 0ÀÌÁö¸¸ 100°ú °°Áö´Â ¾ÊÀº Á¶°ÇÀ» ½Äº°ÇÕ´Ï´Ù.

NOT FOUND
SQLCODE = 100ÀÎ Á¶°ÇÀ» ½Äº°ÇÕ´Ï´Ù.

¾î¶² °æ¿ìÀ̵ç, Á¶Ä¡´Â ´ÙÀ½°ú °°½À´Ï´Ù.

CONTINUE
ÀÀ¿ëÇÁ·Î±×·¥ÀÇ ´ÙÀ½ ´Ü°è¸¦ °è¼Ó ÁøÇàÇÕ´Ï´Ù.

GO TO label
GO TO ´ÙÀ½¿¡ ÁöÁ¤µÈ ·¹ÀÌºí ¹Ù·Î µÚ¿¡ ¿À´Â ¸í·É¹®À¸·Î °©´Ï´Ù. (GO TO´Â µÎ ´Ü¾î·Îµµ ¾²°í, ÇÑ ´Ü¾î GOTO·Îµµ ¾µ ¼ö ÀÖ½À´Ï´Ù.)

WHENEVER¹®À» »ç¿ëÇÏÁö ¾Ê´Â °æ¿ì, ½ÇÇà Áß ¿À·ù, °æ°í ¶Ç´Â ¿¹¿Ü°¡ ¹ß»ýÇÒ °æ¿ì 󸮸¦ °è¼ÓÇÏ´Â °ÍÀÌ ±âº» Á¶Ä¡ÀÔ´Ï´Ù.

WHENEVER¹®Àº ¿µÇâÀ» ÁÖ·Á´Â SQL¹® ¾Õ¿¡ ¿Í¾ß ÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é, »çÀü ó¸® ÄÄÆÄÀÏ·¯´Â ½ÇÇà°¡´ÉÇÑ SQL¹®¿¡ ´ëÇØ Ãß°¡ ¿À·ù ó¸® Äڵ带 »ý¼ºÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ÀνÄÇÏÁö ¸øÇÕ´Ï´Ù. ¾ðÁ¦¶óµµ ¼¼ °¡Áö ±âº» Çü½ÄÀ» Á¶ÇÕÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¼¼ Çü½ÄÀÇ ¼±¾ð ¼ø¼­´Â Áß¿äÇÏÁö ¾Ê½À´Ï´Ù. ¹«ÇÑ ·çÇÎÀ» ÇÇÇÏ·Á¸é SQL¹®ÀÌ Çڵ鷯 ³»ºÎ¿¡¼­ ½ÇÇàµÇ±â Àü¿¡ WHENEVER Á¶ÀýÀ» ½ÇÇà Ãë¼ÒÇØ¾ß ÇÕ´Ï´Ù. WHENEVER SQLERROR CONTINUE¹®À» »ç¿ëÇÏ¿© À̸¦ ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.

WHENEVER¹®¿¡ ´ëÇÑ Àüü ¼³¸íÀº SQL ÂüÁ¶¼­¿¡¼­ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

¿¹¿Ü, ½ÅÈ£, ÀÎÅÍ·´Æ® Çڵ鷯 °í·Á»çÇ×

¿¹¿Ü, ½ÅÈ£ ¶Ç´Â ÀÎÅÍ·´Æ® Çڵ鷯´Â ¿¹¿Ü, ½ÅÈ£ ¶Ç´Â ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÒ ¶§ Á¦¾î¸¦ ÇÏ´Â ·çƾÀÔ´Ï´Ù. Àû¿ë°¡´ÉÇÑ Çڵ鷯 À¯ÇüÀº ´ÙÀ½¿¡¼­¿Í °°ÀÌ »ç¿ëÀÚÀÇ ¿î¿µ ȯ°æ¿¡ µû¶ó °áÁ¤µË´Ï´Ù.

Windows 32ºñÆ® ¿î¿µ üÁ¦
Ctrl-C ¶Ç´Â Ctrl-Break¸¦ ´©¸£¸é ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÕ´Ï´Ù.

OS/2
Ctrl-C ¶Ç´Â Ctrl-Break¸¦ ´©¸£¸é ¿î¿µ üÁ¦ ¿¹¿Ü°¡ ¹ß»ýÇÕ´Ï´Ù.

UNIX
ÀϹÝÀûÀ¸·Î Ctrl-C¸¦ ´©¸£¸é SIGINT ÀÎÅÍ·´Æ® ½ÅÈ£°¡ »ý¼ºµË´Ï´Ù. Űº¸µå¸¦ ´Ù½Ã Á¤ÀÇÇÏ´Â °ÍÀº ½¬¿ì¹Ç·Î, »ç¿ëÀÚ ¸Ó½Å¿¡ ¼­·Î ´Ù¸¥ Ű ÀýÂ÷·Î ÀÎÇØ SIGINT°¡ »ý¼ºµÉ ¼ö ÀÖ½À´Ï´Ù.

À§ ¸ñ·Ï¿¡ ¾ø´Â ¿î¿µ üÁ¦ÀÇ °æ¿ì´Â ÀÀ¿ëÇÁ·Î±×·¥ ºôµå ¾È³»¼­ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

¿¹¿Ü, ½ÅÈ£ ¹× ÀÎÅÍ·´Æ® Çڵ鷯¿¡ (COMMIT ¶Ç´Â ROLLBACKÀÌ ¾Æ´Ñ) SQL¹®À» µÎÁö ¸¶½Ê½Ã¿À. ÀÌ·¯ÇÑ Á¾·ùÀÇ ¿À·ù Á¶°Ç¿¡¼­´Â ÀϹÝÀûÀ¸·Î µ¥ÀÌÅͰ¡ ºÒÀÏÄ¡ÇÏ´Â À§ÇèÀ» ÇÇÇϱâ À§ÇØ ROLLBACKÀ» ¼öÇàÇÏ·Á°í ÇÕ´Ï´Ù.

¿¹¿Ü/½ÅÈ£/ÀÎÅÍ·´Æ® Çڵ鷯¿¡¼­ COMMIT ¹× ROLLBACKÀ» ÄÚµåÈ­ÇÒ ¶§ ÁÖÀǸ¦ ½ÇÇàÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ¸í·É¹®µé Áß Çϳª¸¦ È£ÃâÇÒ °æ¿ì, ÇöÀç SQL¹®ÀÌ ¼öÇàÁßÀÏ ¶§¿¡´Â ÇöÀç SQL¹®ÀÌ ¿Ï·áµÉ ¶§±îÁö COMMITÀ̳ª ROLLBACKÀº ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. ÀÌ´Â Ctrl-C Çڵ鷯¿¡¼­ ¿øÇÏ´Â ÀÛµ¿Àº ¾Æ´Õ´Ï´Ù.

¼Ö·ç¼ÇÀº ROLLBACKÀ» ¹ßÇàÇϱâ Àü¿¡ INTERRUPT API(sqleintr/sqlgintr)¸¦ È£ÃâÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ´Â (ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ÇöÀç SQL Á¶È¸¸¦ ½ÇÇàÇϰí ÀÖÀ» °æ¿ì) ÇöÀç SQL Á¶È¸¸¦ ÀÎÅÍ·´Æ®Çϰí ROLLBACKÀÌ Áï½Ã ½ÃÀ۵ǵµ·Ï ÇÕ´Ï´Ù. ROLLBACKÀÌ ¾Æ´Ñ COMMIT¸¦ ¼öÇàÇÏ·Á°í ÇÒ °æ¿ì ÇöÀç ¸í·ÉÀ» ÀÎÅÍ·´Æ®ÇÏÁö ¾Ê½À´Ï´Ù.

APPC¸¦ »ç¿ëÇÏ¿© ¿ø°Ý µ¥ÀÌÅͺ£À̽º ¼­¹ö(DB2 Connect¸¦ »ç¿ëÇϴ ȣ½ºÆ® µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛ ¶Ç´Â AIX¿ë DB2)¿¡ ¾×¼¼½ºÇÒ ¶§ ÀÀ¿ëÇÁ·Î±×·¥Àº SIGUSR1 ½ÅÈ£¸¦ ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÌ ½ÅÈ£´Â º¹±¸ÇÒ ¼ö ¾ø´Â ¿À·ù°¡ ¹ß»ýÇÏ¿© SNA ¿¬°áÀÌ ÁßÁöµÉ ¶§ SNA Services/6000¿¡ ÀÇÇØ »ý¼ºµË´Ï´Ù. »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥¿¡ ½ÅÈ£ Çڵ鷯¸¦ ¼³Ä¡ÇÏ¿© SIGUSR1À» ó¸®ÇØ¾ß ÇÒ °ÍÀÔ´Ï´Ù.

´Ù¾çÇÑ Çڵ鷯 °í·Á»çÇ׿¡ ´ëÇÑ ¼¼ºÎ»çÇ×Àº Ç÷§Æû ¹®¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.

exit ¸ñ·Ï ·çƾ °í·Á»çÇ×

exit ¸ñ·Ï ·çƾ¿¡¼­ SQL ¶Ç´Â DB2 API È£ÃâÀ» »ç¿ëÇÏÁö ¸¶½Ê½Ã¿À. exit ·çƾ¿¡ ÀÖ´Â µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ ¿¬°áÇØÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù.

¿¹Á¦ ÇÁ·Î±×·¥¿¡¼­ GET ERROR MESSAGE »ç¿ë

C ¿¹: UTILAPI.C ¹× COBOL ¿¹: CHECKERR.CBL¿¡ Ç¥½ÃµÈ ÄÚµå Ŭ¸³µéÀº, Àü´ÞµÈ SQLCA¿Í °ü·ÃµÈ Á¤º¸¸¦ ¾ò±â À§ÇÑ GET ERROR MESSAGE APIÀÇ »ç¿ë ¿¹¸¦ º¸¿©ÁÝ´Ï´Ù.

ÀÌ·¯ÇÑ ¿¹ÀÇ ±¸Ãà¿¡ ´ëÇØ¼­´Â README ÆÄÀÏÀ̳ª ÀÌ »ùÇà ÇÁ·Î±×·¥ÀÇ Çì´õ ÀýÀ» ÂüÁ¶ÇϽʽÿÀ.

C ¿¹: UTILAPI.C

#include <stdio.h>
#include <stdlib.h>
#include <sql.h>
#include <sqlenv.h>
#include <sqlda.h>
#include <sqlca.h>
#include <string.h>
#include <ctype.h>
#include "utilemb.h"
 
EXEC SQL INCLUDE SQLCA;
 
/*#################################################################
**    1. SQL_CHECK section
**
**        1.1 - SqlInfoPrint - prints on the screen everything that
**                             goes unexpected.
**        1.2 - TransRollback - rolls back the transaction
#################################################################*/
 
/******************************************************************************
**        1.1 - SqlInfoPrint - prints on the screen everything that
**                             goes unexpected.
******************************************************************************/
int SqlInfoPrint( char *         appMsg, 
                  struct sqlca * pSqlca,
                  int            line,
                  char *         file )
{   int   rc = 0;
 
    char  sqlInfo[1024];
    char  sqlInfoToken[1024];
 
    char  sqlstateMsg[1024];
    char  errorMsg[1024];
 
 
    if (pSqlca->sqlcode != 0 && pSqlca->sqlcode != 100)
    {   strcpy(sqlInfo, "");
 
        if( pSqlca->sqlcode < 0)
        {   sprintf( sqlInfoToken, "\n---- error report
----\n");
            strcat( sqlInfo, sqlInfoToken);
        }
        else
        {   sprintf( sqlInfoToken, "\n---- warning report
----\n");
            strcat( sqlInfo, sqlInfoToken);
        } /* endif */
 
        sprintf( sqlInfoToken, "  app. message      = %s\n", appMsg);
        strcat( sqlInfo, sqlInfoToken);
        sprintf( sqlInfoToken, "  line              = %d\n", line);
        strcat( sqlInfo, sqlInfoToken);
        sprintf( sqlInfoToken, "  file              = %s\n", file);
        strcat( sqlInfo, sqlInfoToken);
        sprintf( sqlInfoToken, "  SQLCODE           = %ld\n", pSqlca->sqlcode);
        strcat( sqlInfo, sqlInfoToken);
 
        /* get error message */
        rc = sqlaintp( errorMsg, 1024, 80, pSqlca);
        /* return code is the length of the errorMsg string */
        if( rc > 0)
        {   sprintf( sqlInfoToken, "%s\n", errorMsg);
            strcat( sqlInfo, sqlInfoToken);
        }
 
        /* get SQLSTATE message */
        rc = sqlogstt( sqlstateMsg, 1024, 80, pSqlca->sqlstate);
        if (rc == 0)
        {   sprintf( sqlInfoToken, "%s\n", sqlstateMsg);
            strcat( sqlInfo, sqlInfoToken);
        }
 
 
        if( pSqlca->sqlcode < 0)
        {   sprintf( sqlInfoToken, "--- end error report ---\n");
            strcat( sqlInfo, sqlInfoToken);
 
            printf("%s", sqlInfo);
            return 1;
        }
        else
        {   sprintf( sqlInfoToken, "--- end warning report ---\n");
            strcat( sqlInfo, sqlInfoToken);
 
            printf("%s", sqlInfo);
            return 0;
        } /* endif */
    } /* endif */
 
    return 0;
}
 
/******************************************************************************
**        1.2 - TransRollback - rolls back the transaction
******************************************************************************/
void TransRollback( )
{   int        rc = 0;
 
    /* rollback the transaction */
    printf( "\nRolling back the transaction ...\n") ;
    EXEC SQL ROLLBACK;
    rc = SqlInfoPrint( "ROLLBACK", &sqlca, __LINE__, __FILE__);
    if( rc == 0)
    {   printf( "The transaction was rolled back.\n") ;
    }
 
}

Java ¿¹: SQLException ijġ

JDBC ¹× SQLJ ÀÀ¿ëÇÁ·Î±×·¥Àº SQL ó¸® Áß¿¡ ¿À·ù°¡ ¹ß»ýÇÒ ¶§ SQLExceptionÀ» µå·Î¿ì(throw)ÇÕ´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥Àº ´ÙÀ½ Äڵ带 ÀÌ¿ëÇÏ¿© SQLExceptionÀ» Æ÷Âø ¹× Ç¥½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù.

try {
   Statement stmt = connection.createStatement();
   int rowsDeleted = stmt.executeUpdate(
      "DELETE FROM employee WHERE empno = '000010'");
   System.out.println( rowsDeleted + " rows were deleted");
}
 
catch (SQLException sqle) {
   System.out.println(sqle);
}

SQLExceptionsÀ» Á¶ÀýÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­´Â Java¿¡ ÀÖ´Â SQLSTATE ¹× SQLCODE °ªÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.

COBOL ¿¹: CHECKERR.CBL

       Identification Division.
       Program-ID. "checkerr".
 
       Data Division.
       Working-Storage Section.
 
       copy "sql.cbl".
 
      * Local variables
       77 error-rc        pic s9(9) comp-5.
       77 state-rc        pic s9(9) comp-5.
 
      * Variables for the GET ERROR MESSAGE API
      * Use application specific bound instead of BUFFER-SZ
      * 77 buffer-size     pic s9(4) comp-5 value BUFFER-SZ.
      * 77 error-buffer    pic x(BUFFER-SZ).
      * 77 state-buffer    pic x(BUFFER-SZ).
       77 buffer-size     pic s9(4) comp-5 value 1024.
       77 line-width      pic s9(4) comp-5 value 80.
       77 error-buffer    pic x(1024).
       77 state-buffer    pic x(1024).
 
       Linkage Section.
       copy "sqlca.cbl" replacing ==VALUE "SQLCA   "== by == ==
                                  ==VALUE 136==        by == ==.
       01 errloc          pic x(80).
 
       Procedure Division using sqlca errloc.
       Checkerr Section.
           if SQLCODE equal 0
              go to End-Checkerr.
 
           display "--- error report ---".
           display "ERROR occurred : ", errloc.
           display "SQLCODE : ", SQLCODE.
 
      *************************;*******
      * GET ERROR MESSAGE API called *
      *************************;*******
           call "sqlgintp" using
                                 by value     buffer-size
                                 by value     line-width
                                 by reference sqlca
                                 by reference error-buffer
                           returning error-rc.
 
      ************************
      * GET SQLSTATE MESSAGE *
      ************************
           call "sqlggstt" using
                                 by value     buffer-size
                                 by value     line-width
                                 by reference sqlstate
                                 by reference state-buffer
                           returning state-rc.
 
           if error-rc is greater than 0
              display error-buffer.
 
           if state-rc is greater than 0
              display state-buffer.
 
           if state-rc is less than 0
              display "return code from GET SQLSTATE =" state-rc.
 
           if SQLCODE is less than 0
              display "--- end error report ---"
              go to End-Prog.
 
           display "--- end error report ---"
           display "CONTINUING PROGRAM WITH WARNINGS!".
       End-Checkerr. exit program.
       End-Prog. stop run.

REXX ¿¹: CHECKERR ÇÁ·Î½Ãµà¾î

parse version rexxType .
parse source platform .
 
if platform == 'AIX/6000' & rexxType == 'REXXSAA' then
do
  rcy = SysAddFuncPkg("db2rexx")
end
else
do
  if RxFuncQuery('SQLDBS') <> 0 then
    rcy = RxFuncAdd( 'SQLDBS',  'db2ar', 'SQLDBS'  )
 
  if RxFuncQuery('SQLEXEC') <> 0 then
    rcy = RxFuncAdd( 'SQLEXEC', 'db2ar', 'SQLEXEC' )
end
 

·
·
·
call CHECKERR 'INSERT'
·
·
·
CHECKERR: arg errloc if ( SQLCA.SQLCODE = 0 ) then return 0 else do say '--- error report ---' say 'ERROR occurred :' errloc say 'SQLCODE :' SQLCA.SQLCODE /******************************\ * GET ERROR MESSAGE API called * \******************************/ call SQLDBS 'GET MESSAGE INTO :errmsg LINEWIDTH 80' say errmsg say '--- end error report ---' if (SQLCA.SQLCODE < 0 ) then exit else do say 'WARNING - CONTINUING PROGRAM WITH ERRORS' return 0 end end return 0 /* this variable (SYSTEM) must be user defined */ SYSTEM = AIX if SYSTEM = OS2 then do if RxFuncQuery('SQLDBS') <> 0 then rcy = RxFuncAdd( 'SQLDBS', 'DB2AR', 'SQLDBS' ) if RxFuncQuery('SQLEXEC') <> 0 then rcy = RxFuncAdd( 'SQLEXEC', 'DB2AR', 'SQLEXEC' ) end if SYSTEM = AIX then rcy = SysAddFuncPkg("db2rexx")
·
·
·
call CHECKERR 'INSERT'
·
·
·
CHECKERR: arg errloc if ( SQLCA.SQLCODE = 0 ) then return 0 else do say '--- error report ---' say 'ERROR occurred :' errloc say 'SQLCODE :' SQLCA.SQLCODE /******************************\ * GET ERROR MESSAGE API called * \******************************/ call SQLDBS 'GET MESSAGE INTO :errmsg LINEWIDTH 80' say errmsg say '--- end error report ---' if (SQLCA.SQLCODE < 0 ) then exit else do say 'WARNING - CONTINUING PROGRAM WITH ERRORS' return 0 end end return 0


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