SQL¹® ¹ßÇà ¹× µ¥ÀÌÅͺ£À̽º °ü¸® ÇÁ·Î±×·¥ API È£Ãâ ÀÀ¿ëÇÁ·Î±×·¥Àº ¸®ÅÏ ÄÚµå ¹× SQLCA ±¸Á¶¸¦ °ËÅäÇÏ¿© ¿À·ù Á¶°ÇÀ» Á¦´ë·Î Á¡°ËÇØ¾ß ÇÕ´Ï´Ù.
´ëºÎºÐÀÇ µ¥ÀÌÅͺ£À̽º °ü¸® ÇÁ·Î±×·¥ API´Â ¼º°ø½Ã Á¦·Î ¸®ÅÏ Äڵ带 ´Ù½Ã Àü´ÞÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î Á¦·Î°¡ ¾Æ´Ñ ¸®ÅÏ ÄÚµå´Â 2Â÷ ¿À·ù ó¸® ¸ÞÄ«´ÏÁòÀÎ SQLCA ±¸Á¶°¡ ¼Õ»óµÇ¾úÀ½À» ³ªÅ¸³À´Ï´Ù. ÀÌ·± °æ¿ì, È£ÃâµÇ´Â API°¡ ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. SQLCA ±¸Á¶ÀÇ ¼Õ»óÀº ÀÌ ±¸Á¶¿¡ ´ëÇØ ¹«È¿ ÁÖ¼Ò¸¦ Àü´ÞÇÑ °ÍÀÌ ¿øÀÎÀÏ ¼ö ÀÖ½À´Ï´Ù.
¿À·ù Á¤º¸´Â 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 ¼¹ö¿¡ ¾×¼¼½ºÇÏ´Â ÀÀ¿ëÇÁ·Î±×·¥À» °³¹ßÇÏ·Á¸é ´ÙÀ½À»
¼öÇàÇØ¾ß ÇÕ´Ï´Ù.
|
ÅäÅ«ÀÌ SQLCA ±¸Á¶¿¡¼ Àý´ÜµÉ ¼ö ÀÖÀ¸¹Ç·Î ÅäÅ« Á¤º¸¸¦ Áø´Ü¿ëÀ¸·Î »ç¿ëÇØ¼´Â ¾ÈµË´Ï´Ù. Å×ÀÌºí ¹× Ä÷³ À̸§À» ÃÖ°í 128¹ÙÀÌÆ® ±æÀÌ·Î Á¤ÀÇÇÒ ¼ö ÀÖÁö¸¸ SQLCA ÅäÅ«Àº 17¹ÙÀÌÆ®¿Í Àý´Ü Á¾·áÀÚ(>) ±æÀ̸¦ ÇÕÇÑ ±æÀÌ·Î Àý´ÜµË´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥ ³í¸®´Â sqlerrmc ÇʵåÀÇ ½ÇÁ¦ ±æÀÌ¿¡ ÀÇÁ¸Çؼ´Â ¾ÈµË´Ï´Ù. ÅäÅ« Àý´Ü¿¡ ´ëÇÑ ³íÀÇ ¹× SQLCA ±¸Á¶¿¡ ´ëÇÑ ¼³¸íÀº SQL ÂüÁ¶¼ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
¿À·ù³ª °æ°í°¡ Àְųª, ½ÇÇà Áß¿¡ ¹ß°ßµÇ´Â ÇàÀÌ ¾ø´Â °æ¿ì WHENEVER¹®Àº, »çÀü ó¸® ÄÄÆÄÀÏ·¯°¡ ÁöÁ¤µÈ ·¹À̺í·Î °¡µµ·Ï ÀÀ¿ëÇÁ·Î±×·¥À» ÁöÁ¤ÇÏ´Â ¼Ò½º Äڵ带 »ý¼ºÇϵµ·Ï ÇÕ´Ï´Ù. WHENEVER¹®Àº ´Ù¸¥ WHENEVER¹®ÀÌ »óȲÀ» º¯°æÇÒ ¶§±îÁö, ÀÌÈÄ¿¡ ¿À´Â ¸ðµç ½ÇÇà°¡´É SQL¹®¿¡ ¿µÇâÀ» ¹ÌĨ´Ï´Ù.
WHENEVER¹®Àº ´ÙÀ½°ú °°Àº ¼¼ °¡Áö ±âº» Çü½ÄÀ» °¡Áö°í ÀÖ½À´Ï´Ù.
EXEC SQL WHENEVER SQLERROR action EXEC SQL WHENEVER SQLWARNING action EXEC SQL WHENEVER NOT FOUND action
À§ ¸í·É¹®¿¡¼:
¾î¶² °æ¿ìÀ̵ç, Á¶Ä¡´Â ´ÙÀ½°ú °°½À´Ï´Ù.
WHENEVER¹®À» »ç¿ëÇÏÁö ¾Ê´Â °æ¿ì, ½ÇÇà Áß ¿À·ù, °æ°í ¶Ç´Â ¿¹¿Ü°¡ ¹ß»ýÇÒ °æ¿ì 󸮸¦ °è¼ÓÇÏ´Â °ÍÀÌ ±âº» Á¶Ä¡ÀÔ´Ï´Ù.
WHENEVER¹®Àº ¿µÇâÀ» ÁÖ·Á´Â SQL¹® ¾Õ¿¡ ¿Í¾ß ÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é, »çÀü ó¸® ÄÄÆÄÀÏ·¯´Â ½ÇÇà°¡´ÉÇÑ SQL¹®¿¡ ´ëÇØ Ãß°¡ ¿À·ù ó¸® Äڵ带 »ý¼ºÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ÀνÄÇÏÁö ¸øÇÕ´Ï´Ù. ¾ðÁ¦¶óµµ ¼¼ °¡Áö ±âº» Çü½ÄÀ» Á¶ÇÕÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¼¼ Çü½ÄÀÇ ¼±¾ð ¼ø¼´Â Áß¿äÇÏÁö ¾Ê½À´Ï´Ù. ¹«ÇÑ ·çÇÎÀ» ÇÇÇÏ·Á¸é SQL¹®ÀÌ Çڵ鷯 ³»ºÎ¿¡¼ ½ÇÇàµÇ±â Àü¿¡ WHENEVER Á¶ÀýÀ» ½ÇÇà Ãë¼ÒÇØ¾ß ÇÕ´Ï´Ù. WHENEVER SQLERROR CONTINUE¹®À» »ç¿ëÇÏ¿© À̸¦ ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
WHENEVER¹®¿¡ ´ëÇÑ Àüü ¼³¸íÀº SQL ÂüÁ¶¼¿¡¼ ÀÚ¼¼ÇÑ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
¿¹¿Ü, ½ÅÈ£ ¶Ç´Â ÀÎÅÍ·´Æ® Çڵ鷯´Â ¿¹¿Ü, ½ÅÈ£ ¶Ç´Â ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÒ ¶§ Á¦¾î¸¦ ÇÏ´Â ·çƾÀÔ´Ï´Ù. Àû¿ë°¡´ÉÇÑ Çڵ鷯 À¯ÇüÀº ´ÙÀ½¿¡¼¿Í °°ÀÌ »ç¿ëÀÚÀÇ ¿î¿µ ȯ°æ¿¡ µû¶ó °áÁ¤µË´Ï´Ù.
À§ ¸ñ·Ï¿¡ ¾ø´Â ¿î¿µ üÁ¦ÀÇ °æ¿ì´Â ÀÀ¿ëÇÁ·Î±×·¥ ºôµå ¾È³»¼ÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
¿¹¿Ü, ½ÅÈ£ ¹× ÀÎÅÍ·´Æ® Çڵ鷯¿¡ (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 ¸ñ·Ï ·çƾ¿¡¼ SQL ¶Ç´Â DB2 API È£ÃâÀ» »ç¿ëÇÏÁö ¸¶½Ê½Ã¿À. exit ·çƾ¿¡ ÀÖ´Â µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ ¿¬°áÇØÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù.
C ¿¹: UTILAPI.C ¹× COBOL ¿¹: CHECKERR.CBL¿¡ Ç¥½ÃµÈ ÄÚµå Ŭ¸³µéÀº, Àü´ÞµÈ SQLCA¿Í °ü·ÃµÈ Á¤º¸¸¦ ¾ò±â À§ÇÑ GET ERROR MESSAGE APIÀÇ »ç¿ë ¿¹¸¦ º¸¿©ÁÝ´Ï´Ù.
ÀÌ·¯ÇÑ ¿¹ÀÇ ±¸Ãà¿¡ ´ëÇØ¼´Â README ÆÄÀÏÀ̳ª ÀÌ »ùÇà ÇÁ·Î±×·¥ÀÇ Çì´õ ÀýÀ» ÂüÁ¶ÇϽʽÿÀ.
#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") ; } }
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 °ªÀÇ ³»¿ëÀ» ÂüÁ¶ÇϽʽÿÀ.
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.
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