ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. 1 Embedded SQL & PL/SQL1.1 SQLÀÇ »ç¿ë
¾Õ¿¡¼µµ ¸»ÇÑ¹Ù¿Í °°ÀÌ Pro*C/C++ À» »ç¿ëÇÏ´Â ÀÌÀ¯´Â C/C++ ÇÁ·Î±×·¥¿¡¼ SQL ¹®ÀåÀ» »ç¿ëÇϱâ À§ÇؼÀÌ´Ù. ½ÇÇà °¡´ÉÇÑ SQL ¹®ÀåÀ» »ðÀÔÇÏ¿© DB¿¡ Á¢±ÙÇϰí, Á¶ÀÛÇϰí, °ü¸® ÇÒ ¼ö ÀÖ´Ù. »ç¿ë°¡´ÉÇÑ ¹®Àåµé¿¡´Â ¾î¶²°ÍµéÀÌ ÀÖ´ÂÁö »ìÆìº¸ÀÚ.
1.2 µ¥ÀÌÅͺ£À̽º¿¡ Á¢¼Ó
¸ÕÀú µ¥ÀÌÅͺ£À̽º¿¡ ¾î¶² Á¶ÀÛÀ» ÇÏ·Á¸é Á¢¼ÓÀ» ÇØ¾ß¸¸ ÇÑ´Ù. Á¢¼ÓÀ» Çϱâ À§Çؼ± µ¥ÀÌÅͺ£À̽º¿¡ °èÁ¤À» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. ¿ì¸®´Â ¿À¶óŬ¿¡¼ Å×½ºÆ®¿ëÀ¸·Î Á¦°øÇÏ´Â SCOTTÀ̶ó´Â °èÁ¤À» »ç¿ëÇÑ´Ù. ¸ÕÀú À¯ÀÇ ÇØ¾ßÇÒ »çÇ×Àº »ç¿ëÀÚ °èÁ¤°ú ÆÐ½º¿öµå¿ª½Ã SQL ¹®Àå¿¡¼ »ç¿ëµÉ °ÍÀ̹ǷΠÀ̰ÍÀ» ÀúÀåÇÒ º¯¼ö ¿ª½Ã È£½ºÆ® º¯¼ö·Î ¼±¾ðÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. À§¿¡¼ º¸¾ÒµíÀÌ È£½ºÆ® ÇÁ·Î±×·¥¿¡ SQL ¹®ÀåÀ» »ðÀÔÇϱâ À§Çؼ´Â ¹Ýµå½Ã EXEC SQLÀ» ºÙ¿©ÁÖ¾î¾ß¸¸ ÇÑ´Ù.
¾Æ·¡¿¡ ¿¹Á¦¸¦ º¸ÀÚ. EXEC SQL BEGIN DECLARE SECTION;
varchar username [20];
varchar password [20];
varchar dbname [20];
EXEC SQL END DECLARE SECTION;
¡¦ ¡¦ ¡¦
strcpy (username.arr, ¡°SCOTT¡±);
strcpy (password.arr, ¡°TIGER¡±);
strcpy (dbname.arr, ¡°ORCL¡± );
username.len = strlen (¡°SCOTT¡±);
password.len = strlen (¡°TIGER¡±);
dbname.len = strlen (¡°ORCL¡± );
¡¦ ¡¦ ¡¦
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbname;
»ç¿ëÀÚÀÇ À̸§Àº SCOTTÀÌ°í ÆÐ½º¿öµå´Â TIGERÀÌ´Ù. ±×¸®°í varcharÇü½ÄÀÇ º¯¼ö¸¦ ¼±¾ðÇßÀ¸¹Ç·Î arr¿¡ ¹®ÀÚ¿À» ³Ö¾îÁÖ°í len¿¡ ±× ±æÀ̸¦ ³Ö¾îÁØ´Ù. ÁÖÀÇÇÏ¿© º¼ ¸¸ÇÑ »çÇ×À¸·Î USING :dbname ºÎºÐÀÌ ÀÖ´Ù. À̰ÍÀº ¿ø°Ý µ¥ÀÌÅͺ£À̽º¿¡ Á¢¼ÓÇÒ ¶§ »ç¿ëÇÏ´Â °ÍÀ¸·Î ¹Ýµå½Ã ÇÊ¿äÇÑ ±¸¹®Àº ¾Æ´Ï´Ù. dbname º¯¼ö¿¡ µé¾î°¡´Â °ÍÀº ¿ø°Ý µ¥ÀÌÅͺ£À̽º¸¦ ÁöÁ¤ÇÏ´Â Ä¿³ØÆ® ½ºÆ®¸µÀ» ÀúÀåÇÑ´Ù. Ä¿³ØÆ® ½ºÆ®¸µÀº tnsnames.ora ÆÄÀÏ¿¡ µé¾îÀÖÀ¸¸ç ¿©±â¿¡ ¸ÕÀú ¼±¾ðÀÌ µÇ¾î ÀÖ¾î¾ß¸¸ »ç¿ë ÇÒ ¼ö ÀÖ´Ù. ¸¸¾à¿¡ ·ÎÄà µ¥ÀÌÅͺ£À̽º¿¡ Á¢¼ÓÇÑ´Ù¸é Using :dbname ±¸¹®Àº ÇÊ¿ä ¾ø´Ù. 1.3 SELECT ±¸¹®
µ¥ÀÌÅͺ£À̽º¿¡¼ µ¥ÀÌÅ͸¦ ¾ò¾î ¿Ã ¶§ ¾²ÀÌ´Â ¹®ÀåÀÌ´Ù. ¾Æ·¡ ¿¹Á¦¸¦ º¸ÀÚ. /* È£½ºÆ® º¯¼öÀÇ ¼±¾ð ½ÃÀÛ */
EXEC SQL BEGIN DECLARE SECTION;
int empno; /* emp Å×À̺íÀÇ empno¸¦ ¹ÞÀ» º¯¼ö */
char ename[10]; /* emp Å×À̺íÀÇ enameÀ» ¹ÞÀ» º¯¼ö */
char jog[10]; /* emp Å×À̺íÀÇ job À» ¹ÞÀ» º¯¼ö */
float sal; /* emp Å×À̺íÀÇ sal À» ¹ÞÀ» º¯¼ö */
float comm; /* emp Å×À̺íÀÇ comm À» ¹ÞÀ» º¯¼ö */
EXEC SQL EBD DECLARE SECTION;
/* È£½ºÆ® º¯¼öÀÇ ¼±¾ð Á¾·á */
¡¦ ¡¦ ¡¦
/*
* empno¸¦ ¾ò¾î¿Í¼ ÇØ´çÇÏ´Â »ç¶÷ÀÇ À̸§°ú ±Þ¿©, »ó¿©¸¦ ¹Þ¾Æ¿Â´Ù.
*/
empno = atoi (gets ());
EXEC SQL
SELECT ename, job, sal, comm
INTO :ename, :job, :sal, :comm
FROM emp
WHERW empno = :empno;
/*
* ¾ò¾î¿Â ±Þ¿©¿Í »ó¿©¸¦ ¼öÁ¤ÇÏ¿© ´Ù½Ã ¾÷µ¥ÀÌÆ® ÇÑ´Ù.
*/
sal = sal + 3000;
comm = comm + 1000;
EXEC SQL
UPDATE emp
SET sal = :sal, comm = :comm.
WHERE empno = :empno;
¡¦ ¡¦ ¡¦À§ÀÇ ¹®ÀåÀº »ç¿øÁ¤º¸Å×ÀÌºí¿¡¼ »ç¿ø¹øÈ£°¡ 7788ÀÎ »ç¶÷ÀÇ À̸§, Á÷Ã¥, ±Þ¿©, »ó¿©¸¦ ¾ò¾î¿À´Â ¹®ÀåÀÌ´Ù. ¾Õ¿¡¼ º» ¹Ù¿Í °°ÀÌ SQL¹®ÀåÀ» »ç¿ëÇϱâ À§Çؼ EXEC SQL ÀýÀ» ºÙ¿©ÁÖ¾î¾ß ÇÑ´Ù. µ¥ÀÌÅͺ£À̽º¿¡¼ ÆÐÄ¡µÈ Ä®·³ÀÇ ³»¿ëÀÌ ename, job, sal, commÀ̶ó´Â È£½ºÆ® º¯¼ö ¾È¿¡ µé¾î°¡µµ·Ï µÇ¾îÀÖ´Ù. À̶§ WHERE Àý¿¡¼ »ç¿ëµÈ »ç¿ø¹øÈ£ °ªµµ È£½ºÆ® º¯¼ö¸¦ ÀÌ¿ëÇÏ¿© Á¶°ÇÀýÀ» ³Ñ±ä °ÍÀÌ´Ù.
ÇÏÁö¸¸ Àß µ¿ÀÛÇÒ °Í ó·³ º¸ÀÌ´Â À§ÀÇ ÇÁ·Î±×·¥µµ °¡¸¸È÷ »ìÆìº¸¸é ÇѰ¡Áö ¹®Á¦Á¡ÀÌ ÀÖ´Ù. ¹«¾ùÀϱî? ±×°ÍÀº SELECT ÇÒ¶§ commÀ» ¹Þ¾Æ¿À´Â ºÎºÐÀÌ´Ù. ½ÇÁ¦·Î µ¥ÀÌÅͺ£À̽º¿¡ Å×À̺íÀ» º¸¸é comm Ä®·³¿¡´Â NULL °ªÀÌ µé¾îÀÖ´Ù.(C ¾ð¾î¿Í ´Þ¸® µ¥ÀÌÅͺ£À̽º¿¡¼ÀÇ NULLÀº Ä®·³¾È¿¡ °ªÀÌ ¾Æ¿¹ ¾ø´Ù´Â °ÍÀÌ´Ù.) NULLÀÌ µé¾îÀÖ´Â Ä®·³ÀÇ °ªÀ» °¡Á®¿Í¼ ¼öÄ¡¿¬»êÀ» ÇÑ´Ù´Â °ÍÀº ¹®Á¦´Ù. È£½ºÆ® º¯¼ö¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅͺ£À̽º¿Í Åë½ÅÇÒ ¶§ ¹®¹ý»óÀ¸·Î´Â ÀüÇô ÀÌ»óÀÌ ¾øÁö¸¸ È£½ºÆ® º¯¼ö ¾È¿¡ µµ´ëü ¾î¶² °ªÀÌ µé¾î°¥Áö ¾Ë ¼ö ¾ø´Â °ÍÀÌ´Ù. À̶§ »ç¿ëÇØ¾ß ÇÏ´Â °ÍÀÌ INDICATOR º¯¼öÀÌ´Ù. À̰ÍÀ» ÅëÇÏ¿© µ¥ÀÌÅͺ£À̽º¿Í Åë½ÅÇÒ ¶§ È£½ºÆ® º¯¼ö¿Í µ¥ÀÌÅͺ£À̽º°£¿¡ °ªÀÇ Àü´Þ »óȲÀ» Á»´õ Á¤È®È÷ ¾Ë ¼ö ÀÖ´Â °ÍÀÌ´Ù.
¾Æ·¡ INDICATOR º¯¼öÀÇ »ç¿ë ¿¹Á¦°¡ ÀÖ´Ù. EXEC SQL BEGIN DECLARE SECTION; /* È£½ºÆ® º¯¼öÀÇ ¼±¾ð ½ÃÀÛ */
int empno; /* emp Å×À̺íÀÇ empno¸¦ ¹ÞÀ» º¯¼ö */
char ename[10]; /* emp Å×À̺íÀÇ enameÀ» ¹ÞÀ» º¯¼ö */
char job[10]; /* emp Å×À̺íÀÇ job À» ¹ÞÀ» º¯¼ö */
float sal; /* emp Å×À̺íÀÇ sal À» ¹ÞÀ» º¯¼ö */
float comm; /* emp Å×À̺íÀÇ comm À» ¹ÞÀ» º¯¼ö */
short ind_empno; /* empnoº¯¼öÀÇ INDICATOR */
short ind_ename; /* enameº¯¼öÀÇ INDICATOR */
short ind_job; /* job º¯¼öÀÇ INDICATOR */
short ind_sal; /* sal º¯¼öÀÇ INDICATOR */
short ind_comm; /* comm º¯¼öÀÇ INDICATOR */
EXEC SQL END DECLARE SECTION; /* È£½ºÆ® º¯¼öÀÇ ¼±¾ð Á¾·á */
¡¦ ¡¦ ¡¦
/*
* empno¸¦ ¾ò¾î¿Í¼ ÇØ´çÇÏ´Â »ç¶÷ÀÇ À̸§°ú ±Þ¿©, »ó¿©¸¦ ¹Þ¾Æ¿Â´Ù.
*/
empno = atoi (gets ());
EXEC SQL
SELECT ename, job, sal, comm
INTO :ename:ind_ename, :job:ind_job, :sal:ind_sal, :comm:ind_comm
FROM emp
WHERE empno = :empno;
/*
* ¾ò¾î¿Â ±Þ¿©¿Í »ó¿©¸¦ ¼öÁ¤ÇÏ¿© ´Ù½Ã ¾÷µ¥ÀÌÆ® ÇÑ´Ù.
*/
(ind_sal == -1) ? sal = 3000 : sal = sal + 3000;
(ind_comm == -1) ? comm = 1000 : comm = comm + 1000;
EXEC SQL
UPDATE emp
SET sal = :sal, comm = :comm.
WHERE empno = :empno;
¡¦ ¡¦ ¡¦
»õ·Î ÀÛ¼ºÇÑ ÇÁ·Î±×·¥ÀÌ Á»´õ Á¤È®ÇÑ ÇÁ·Î±×·¥À̶ó ÇϰڴÙ. ±×·³ INDICATOR º¯¼öÀÇ ¼±¾ðÀ» º¸ÀÚ. ÀÌ°Í ¿ª½Ã DECLARE SECTION ¾È¿¡ µé¾î°¡¾ß¸¸ ÇÑ´Ù. ±×¸®°í À̰ÍÀº ¹Ýµå½Ã 2 byte Á¤¼öÇüÀ¸·Î ¼±¾ðµÇ¾î¾ß¸¸ ÇÑ´Ù. INDICATOR º¯¼ö´Â È£½ºÆ® º¯¼öÀÇ µÚ¿¡ ¹Ù·Î µû¶ó¼ ºÙµµ·Ï µÇ¾îÀÖ´Ù. À̰͵µ ¿ª½Ã ÄÝ·ÐÀ» ºÙÀ̵µ·Ï ÇÑ´Ù. °¡µ¶¼ºÀ» ³ôÀ̱â À§Çؼ :comm:ind_comm; ´ë½Å :comm INDICATOR :ind_comm; À» »ç¿ëÇÏ¿©µµ µÇÁö¸¸ °ÅÀÇ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
¾Æ·¡ÀÇ Ç¥´Â INDICATOR º¯¼öÀÇ °ªÀÌ °¡Áö´Â Àǹ̸¦ º¸¿©ÁØ´Ù.
À§ÀÇ ¿¹Á¦Ã³·³ SQL¹®ÀåÀ» ¼öÇàÇÑ ÈÄ¿¡ ÀǽɵǴ Į·³¿¡ ´ëÇØ¼ INDICATOR °ªÀ» °Ë»çÇØ º¸µµ·Ï Ç϶ó.
SELECT ±¸¹®°ú °°ÀÌ ÀϹÝÀûÀ¸·Î ¾Ë°íÀÖ´Â FROM, WHERE, INTO Àý À̿ܿ¡µµ Àß ¾²ÀÌÁö ¾ÊÁö¸¸ °èÃþÀûÀÎ °á°ú¸¦ ¾ò±âÀ§ÇÑ START WITH, CONNECT BY¿Í ±×·ìÇÎ, ¿À´õ¸µµµ °¡´ÉÇϸç FOR UPDATE OFÀý ±îÁöµµ °¡´ÉÇÏ´Ù. 1.4 DML ±¸¹®
À̹ø¿¡´Â DML¹®Àå¿¡ ´ëÇÏ¿© Â÷·Ê´ë·Î »ìÆìº¸ÀÚ. EXEC SQL BEGIN DECLARE SECTION;
int deptno;
char dname[10];
char loc[10];
EXEC SQL END DECLARE SECTION;
/*
* ºÎ¼¹øÈ£°¡ 50¹øÀÎ »õ·Î¿î ºÎ¼¸¦ Insert ÇÑ´Ù.
*/
deptno = 50;
strcpy (dname, ¡°MANAGER¡±);
strcpy (loc, ¡°SEOUL¡±);
EXEC SQL
INSERT INTO DEPT
VALUES (:deptno, :dname, :loc);
À§¿¡¼ º¸´Â ¹Ù¿Í °°ÀÌ INSERT ¹®À̶ó ÇÏ¿© Ưº°ÇÑ °ÍÀº ¾ø´Ù. ´Ü¼øÈ÷ VALUES Àý¿¡ µé¾î°¡´Â ½ÇÁ¦ µ¥ÀÌÅ͵鸸 È£½ºÆ® º¯¼ö ¶Ç´Â ½ÇÁ¦ »ó¼ö°ªÀ¸·Î ´ëü½ÃÄÑ ÁÖ¸é µÇ´Â °ÍÀÌ´Ù. EXEC SQL BEGIN DECLARE SECTION;
Int deptno;
EXEC SQL END DECLARE SECTION;
/*
* ºÎ¼¹øÈ£°¡ 50ÀÎ ºÎ¼ÀÇ ºÎ¼¹øÈ£¸¦ 60¹øÀ¸·Î º¯°æÇÑ´Ù.
*/
EXECL SQL
UPDATE DEPT
SET deptno = 60
WHERE deptno = 50;
¡¦ ¡¦ ¡¦
/*
* ºÎ¼¹øÈ£°¡ 60ÀÎ ºÎ¼¸¦ »èÁ¦ÇÑ´Ù.
*/
EXEC SQL
DELETE DEPT
WHERE deptno = 60;
UPDATE, DELETEµµ ¿ª½Ã º°¹Ý ´Ù¸¦¹Ù´Â ¾ø´Ù. 1.5 Cursor »ç¿ë
Ä¿¼¸¦ »ç¿ëÇÏ´Â °Í ¶ÇÇÑ °¡´ÉÇÏ´Ù. ¸ÕÀú Ä¿¼¸¦ ¼±¾ðÇϰí ÇÊ¿äÇÑ ½ÃÁ¡¿¡¼ ¿ÀÇÂÇϰí ÇÊ¿äÇÑ ¸¸Å ÆÐÄ¡ÇÑÈÄ »ç¿ëÀÌ ³¡³ª¸é ´ÝÀ¸¸é µÈ´Ù. EXEC SQL BEGIN DECLARE SECTION;
int empno;
char ename[10];
char job[10];
float sal;
float comm.;
EXEC SQL END DECLARE SECTION;
¡¦ ¡¦ ¡¦
/*
* ºÎ¼¹øÈ£°¡ 10¹øÀÎ »ç¿øÀÇ »ç¿ø¹øÈ£, À̸§, Á÷Ã¥, ±Þ¿©, »ó¿©¸¦
* °¡Á®¿À´Â Ä¿¼¸¦ ¼±¾ðÇÑ´Ù.
*/
EXEC SQL
DECLARE emp_cursor CURSOR FOR
SELECT empno, ename, job, sal, comm
FROM emp
WHERE deptno = 10;
¡¦ ¡¦ ¡¦
/*
* Ä¿¼¸¦ ¿¬´Ù.
*/
EXEC SQL
OPEN emp_cursor;
¡¦ ¡¦ ¡¦
/*
* Ä¿¼¿¡¼ ·¹Äڵ带 ´õ ÀÌ»ó ÆÐÄ¡ÇÒ °ÍÀÌ ¾øÀ» ¶§ Loop¸¦ break Çϵµ·Ï ÇÑ´Ù.
*/
EXEC SQL
WHENEVER NOT FOUND DO break;
While (1)
{
/*
* Ä¿¼¿¡¼ ·¹Äڵ带 Çϳª¾¿ ÆÐÄ¡ÇÑ´Ù.
*/
EXEC SQL
FETCH emp_cursor
INTO :empno, :ename, :job, :sal, :comm.;
printf (¡°Fetch Data : %d, %s, %s, %7.2f, %7.2f\n¡±,
empno, ename, job, sal, comm );
/*
* ÆÐÄ¡ÇÑ ·¹ÄÚµåÀÇ »ç¿ø Á¤º¸¿¡¼ ±Þ¿©¸¦ 20% ÀλóÇÑ´Ù.
*/
EXEC SQL
UPDATE emp
SET sal = sal * 1.2;
WHERE empno = :empno;
}
/*
* »ç¿ëÀÌ ³¡³ Ä¿¼¸¦ ´Ý´Â´Ù.
*/
EXEC SQL
CLOSE emp_cursor;
À§¿¡¼ º¸¿©ÁÖ´Â ¿¹Á¦´Â ºÎ¼¹øÈ£°¡ 10¹øÀÎ »ç¶÷µéÀ» ã¾Æ¼ ÇÑ »ç¶÷¾¿ ¾ò¾î¿Â Á¤º¸¸¦ ÇÁ¸°Æ® ÇÏ°í °¢°¢ ±Þ¿©¸¦ 20% ÀλóÇÏ´Â ÇÁ·Î±×·¥ÀÎ °ÍÀÌ´Ù.
Ưº°ÇÑ °Í ¾øÀÌ ¾Õ¿¡¼ ºÁ¿Ô´ø ÄÚµåµé°ú ºñ½ÁÇÏ´Ù. ´Ù¸¸ ÇѰ¡Áö WHENEVERÀýÀÌ »õ·ÎÀÌ ¼±º¸¿´´Ù. À̰ÍÀº Pro*C/C++¿¡¼ SQLÀ» ¼öÇàÇÏ¸é¼ ¿¡·¯¸¦ °ËÁõÇØ³»´Â µÎ°¡Áö ¹æ¹ýÁß¿¡ ÇϳªÀÌ´Ù. Á»´õ µÚ¿¡¼ ÀÚ¼¼È÷ »ìÆìº¸±â·Î ÇÑ´Ù. 1.6 Transaction Control
À§¿¡¼ »ìÆìº» °Íµé·Î µ¥ÀÌÅ͸¦ ¾ò¾î¿À°í ¼öÁ¤ÇÏ´Â µîÀÇ ÀÛ¾÷À» Çß´Ù°í °¡Á¤ÇÏÀÚ. ±×·³ ÀÌ º¯°æ »çÇ×µéÀ» Àû¿ë½ÃŰ´øÁö Ãë¼ÒÇÏ´øÁö °áÁ¤À» ÇÏ¿©¾ß ÇÑ´Ù. ±× °ÍµéÀÌ Æ®·£Àè¼Ç Á¦¾î ¹®ÀåµéÀÌ´Ù. ¿ì¸®°¡ ÀϹÝÀûÀ¸·Î ¾Ë°í ÀÖ´Â Commit, RollbackÀÌ´Ù. EXEC SQL
COMMIT WORK;
EXECL SQL
ROLLBACK WORK;
À§ÀÇ µÎ ¹®ÀåÁß À§ÀÇ °ÍÀº Áö±Ý±îÁöÀÇ º¯°æ»çÇ×À» µ¥ÀÌÅÍ º£À̽º¿¡ ¿µ±¸ÀûÀ¸·Î Àû¿ëÇÏ´Â ¹®ÀåÀÌ°í ¾Æ·¡°ÍÀº Ãë¼ÒÇϰí ÀÌÀüÀÇ µ¥ÀÌÅÍ·Î µÇµ¹¸®´Â ¹®ÀåÀÌ´Ù. WORK ±¸¹®Àº ´Ü¼øÈ÷ SQLÇ¥ÁØÀ» µû¸£±â À§ÇÑ °ÍÀ¸·Î ¹Ýµå½Ã ºÙÀÏ ÇÊ¿ä´Â ¾ø´Ù.EXEC SQL
COMMIT WORK RELEASE;
EXEC SQL
ROLLBACK WORK RELEASE;
À§ÀÇ µÎ ¹®Àå ÁßÀº ¾Æ±î ºÃ´ø ¹®Àå°ú ¾à°£ ´Ù¸¥ Á¡ÀÌ ÀÖ´Ù. ¹Ù·Î RELEASE°¡ ¶æÇÏ´Â ¹ÙÀε¥ RELEASE´Â ÄÄÇ»ÅÍ¿¡¼ ¡®³õ´Â´Ù¡¯, ¡®Ç¬´Ù¡¯, ¡®ÇØÀçÇÑ´Ù¡¯¶ó´Â Àǹ̷Π¾²ÀδÙ. Pro*C/C++ ¿¡¼´Â ¹Ù·Î µ¥ÀÌÅͺ£À̽º¿ÍÀÇ Á¢¼ÓÀ» ²÷´Â´Ù´Â ÀǹÌÀÌ´Ù. Áï Áö±Ý±îÁöÀÇ º¯°æ»çÇ×À» Àû¿ëÇϰí Á¢¼ÓÀ» ²÷´øÁö Ãë¼ÒÇϰí Á¢¼ÓÀ» ²÷´Â ÀÛ¾÷ÀÌ´Ù. 1.7 ¿¡·¯Ã³¸®
Áö±Ý±îÁö Pro*C/C++¿¡¼ SQLÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀ» »ìÆìº¸¾Ò´Ù. ±×·¸´Ù¸é ±×·¯ÇÑ ±¸¹®µéÀÌ 100% È®½ÇÈ÷ ¼öÇàµÈ´Ù°í Àå´ã ÇÒ ¼ö Àִ°¡? ¼¼»ó¿¡ ¿¡·¯ ¾ø´Â ÇÁ·Î±×·¥Àº ¾ø´Ù. ´ç¿¬È÷ ¿ì¸®µµ SQL ¹®ÀåÀ» ¼öÇàÇÏ¸é¼ ¹ß»ýÇÏ´Â ¿¡·¯µéÀ» ã¾Æ ³¾ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. Pro*C/C++ ¿¡¼´Â µÎ°¡Áö ¹æ¹ýÀ» Á¦°øÇØ ÁØ´Ù. 1) WHENEVER ±¸¹®À» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. À̰ÍÀº Pro*C/C++ ÇÁ·Î±×·¥¿¡¼ ·±Å¸ÀÓ ¿¡·¯¸¦ ã¾Æ Çڵ鸵 ÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â ±â´ÉÀ» °¡Áö°í ÀÖ´Ù. 2) SQL Communications Area¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. À̰ÍÀº ¾ÕÀ¸·Îµµ ¸¹ÀÌ ¾²ÀÏ °ÍÀ¸·Î ¸Å¿ì Áß¿äÇÏ´Ù. ÀϹÝÀûÀ¸·Î ÁÙ¿©¼ SQLCA¶ó°í ÇÑ´Ù. À̰ÍÀº ÇÁ·Î±×·¥¿¡ µé¾î°¡´Â µ¥ÀÌÅͱ¸Á¶·Î sqlca.sqlcode¿Í sqlca.sqlerrm.sqlerrmc ¿¡ º¸¸é ¿¡·¯ ¹øÈ£¿Í ¿¡·¯¿¡ ´ëÇÑ ¼³¸íÀÌ µé¾îÀÖ´Ù. ¿ì¸®´Â À̰͵éÀ» »ç¿ëÇØ¼ ¹ß»ýÇÑ ¿¡·¯¸¦ ¾Ë¾Æ³»°í ÀûÀýÇÑ Á¶Ä¡¸¦ ÃëÇØ¾ß ÇÏ´Â °ÍÀÌ´Ù.
¾Æ·¡¿¡ °¢°¢ÀÇ ¿¹Á¦°¡ ÀÖ´Ù. ¸ÕÀú WHENEVER ±¸¹®À» »ç¿ëÇÑ Ã¹¹øÂ° ¿¹Á¦¸¦ »ìÆìº¸µµ·Ï ÇÏÀÚ. int main (void)
{
¡¦ ¡¦ ¡¦
EXEC SQL
WHENEVER SQLERROR DO sql_error ();
EXEC SQL
DELETE FROM dept
WHERE deptno = 10;
EXEC SQL
WHENEVER SQLERROR DO CONTINUE;
¡¦ ¡¦ ¡¦
}
void sql_error (void)
{
printf (¡°SQL Error Code : %d\n¡±, sqlca.sqlcode);
printf (¡°SQL Error Message : %s\n¡±, sqlca.sqlerrm.sqlerrmc);
EXEC SQL
WHENEVER SQLERROR DO CONTINUE;
EXEC SQL
ROLLBACK WORK RELEASE;
EXIT (EXIT_FAILURE);
}
À§ÀÇ ¿¹Á¦´Â DELETE ¹®ÀåÀ» ½ÇÇàÇϱâ Àü¿¡ ¸ÕÀú SQL ½ÇÇà½Ã ¿¡·¯°¡ ¹ß»ýÇϸé sql_error ¶ó´Â ÇÔ¼ö¸¦ ½ÇÇàÇϵµ·Ï ¸¸µé¾î ³õ°í DELETE¸¦ ½ÇÇàÇÑ´Ù. ¸¸¾à DELETE ±¸¹®À» ½ÇÇàÇÏ´Ù°¡ ¿¡·¯¸¦ ¸¸³ª°Ô µÇ¸é ÇÁ·Î±×·¥Àº ÀÚµ¿À¸·Î sql_error ÇÔ¼ö·Î ºÐ±âÇÏ°Ô µÇ°í °Å±â¼ SQL ¿¡·¯ÄÚµå¿Í ¿¡·¯¸Þ¼¼Áö¸¦ Ãâ·ÂÇϰí ÇÁ·Î±×·¥Àº ¸ðµç º¯°æ»çÇ×À» Ãë¼ÒÇÏ°í µ¥ÀÌÅͺ£À̽º¿Í Á¢¼ÓÀ» ²÷°í Á¾·áÇÑ´Ù. ¸¸¾à DELETE ±¸¹®ÀÌ ¼º°øÇÏ¿´´Ù¸é WHENEVER SQLERROR DO CONTINUEÀ» ¼öÇàÇÏ¿© ¿¡·¯°¡ ¹ß»ýÇÏ¿©µµ °è¼ÓÀûÀ¸·Î ÇÁ·Î±×·¥À» ÁøÇàÇϵµ·Ï ´Ù½Ã º¯°æÇÒ °ÍÀÌ´Ù.
¿©±â¼ Áß¿äÇÑ °ÍÀÌ ÀÖ´Ù. sql_error ÇÔ¼ö¿¡¼´Â ROLLBACK ±¸¹®À» »ç¿ëÇϱâ Àü¿¡ WHENEVER SQLERROR DO CONTINUE À» ÇÏ¿´´Ù´Â Á¡ÀÌ´Ù. ¸¸¾à¿¡ ¿©±â¼µµ SQL ½ÇÇà½Ã ¿¡·¯°¡ ¹ß»ýÇÏ¿´À» ¶§ sql_error ¸¦ ¼öÇàÇϵµ·Ï ÇÏ¿´´Ù¸é Å« ¹®Á¦°¡ ¹ß»ý ÇÒ ¼öµµ ÀÖ´Ù. ¹Ù·Î ¹«ÇÑ ·çÇÁ¿¡ ºüÁö°Ô µÇ´Âµ¥ ROLLBACKÀ» ¼öÇàÇÏ¸é¼ µ¥ÀÌÅͺ£À̽º¿Í Á¢¼ÓÀ» ²÷´Â °úÁ¤¿¡¼ ¶Ç´Ù½Ã ¿¡·¯°¡ ¹ß»ýÇÑ´Ù¸é ´Ù½Ã sql_error À» ¼öÇàÇÒ °ÍÀÌ°í ´Ù½Ã ROLLBACKÀ» ¼öÇàÇÏ¸é¼ DisconnectÀ» ½ÃµµÇÏ°í ¶Ç ´Ù½Ã sql_error À» ¼öÇàÇÏ´Â °úÁ¤ÀÌ ¹Ýº¹ µÇ´Â °ÍÀÌ´Ù. ¹Ýµå½Ã ÁöÄÑÁ®¾ßÇÒ »çÇ×À¸·Î ¿¡·¯Ã³¸®¿¡¼´Â SQLÀ» ¼öÇàÇÑ´Ù ÇÏ´õ¶óµµ ¹Ýµå½Ã WHENEVER SQLERROR DO CONTINUE ·Î ÁöÁ¤Çϵµ·Ï Ç϶ó.
À̹ø¿¡´Â SQLCA¸¦ »ç¿ëÇÑ µÎ¹øÂ° ¿¹Á¦¸¦ º¸µµ·Ï ÇÏÀÚ. int main (void)
{
¡¦ ¡¦ ¡¦
EXEC SQL
DELETE FROM dept
WHERE deptno = 10;
If (sqlca.sqlcode != 0)
{
printf (¡°Error Occurred\n¡±);
sql_error();
}
¡¦ ¡¦ ¡¦
exit (EXIT_SUCCESS);
}
void sql_error (void)
{
printf (¡°SQL Error Code : %d\n¡±, sqlca.sqlcode);
printf (¡°SQL Error Message : %s\n¡±, sqlca.sqlerrm.sqlerrmc);
EXEC SQL
WHENEVER SQLERROR DO CONTINUE;
EXEC SQL
ROLLBACK WORK RELEASE;
EXIT (EXIT_FAILURE);
}
¸ÕÀú ù¹øÂ° º¸¾Ò´ø ÇÁ·Î±×·¥°ú ´ëµ¿¼ÒÀÌÇÏ´Ù. SQL½ÇÇà½Ã ¿¡·¯¸¦ ¾î¶»°Ô ã¾Æ³»´À³ÄÀÇ ¹®Á¦Àε¥ ù¹øÂ°ÀÇ ÇÁ·Î±×·¥Àº ¾Ï½ÃÀûÀÎ ¿¡·¯ÀÇ ½Äº°ÀÌ°í µÎ¹øÂ° °ÍÀº ¸í½ÃÀûÀÎ ¿¡·¯ÀÇ ½Äº°À̶ó´Â °ÍÀÌ´Ù. À§ ÇÁ·Î±×·¥Àº SQL ¹®ÀåÀ» ¼öÇàÇÑ ÈÄ SQLCA¿¡ ÀÖ´Â sqlcode¸¦ °Ë»çÇÑ´Ù. À̰ÍÀº Á¤»óÀûÀ¸·Î ó¸® µÇ¾úÀ» ¶§ 0À¸·Î ¼ÂÆÃµÈ´Ù.
µÎ°¡Áö ¹æ¹ýÀ» ÇÊ¿ä¿Í ÆíÀǼº¿¡ µû¶ó¼ ÀûÀýÈ÷ »ç¿ëÇÏ¸é µÇ°Ú´Ù.
¸ÕÀú WHENNEVER ±¸¹®ÀÇ ¿ÏÀüÇÑ ±¸¹®À» »ìÆìº¸ÀÚ EXEC SQL ----> WHENEVER --+---> NOT FOUND -----+---> CONTINUE
l---> SQLERROR |---> GOTO Label
+---> SQLWARNING |---> STOP
|---> DO routine
|---> DO BREAK
+---> DO CONTINUE
´ÙÀ½À¸·Î sqlca±¸Á¶Ã¼ÀÇ Á¤ÀǸ¦ »ìÆìº¸ÀÚ.
struct sqlca
{
char sqlcaid[8]; /* "SQLCA" */
long sqlabc; /* SQLCA ÀÇ Å©±â */
long sqlcode; /* ¿À¶óŬ ¿¡·¯ ¸Þ½ÃÁö Äڵ尡 ÀúÀåµÈ´Ù. */
struct {
unsigned short sqlerrml; /* ¿¡·¯ ¸Þ½ÃÁöÀÇ Å©±â */
char sqlerrmc[70]; /* ¿¡·¯ ¸Þ½ÃÁö ³»¿ë */
} sqlerrm;
char sqlerrp[8]; /* ¿¹¾à */
long sqlerrd[6]; /* »óÅ ÄÚµå */
char sqlwarn[8]; /* °æ°í Ç÷¡±× */
char sqlext[8];
};
struct sqlca sqlca;
°¢ ±¸Á¶Ã¼ ÇʵåÀÇ Àǹ̸¦ ¾Ë¾Æº»´Ù¸é
|
|
|||||||||||||||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|