| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 31. ECPG - C¾ð¾î¿¡ ÀÇÇÑ ¸ÅÀÔSQL | Fast Forward | Next |
Section 31.4¿¡¼, ¸ÅÀÔ SQL ÇÁ·Î±×·¥À¸·Î ¾î¶»°Ô SQL ¸í·É¹®À» ½ÇÇàÇÏ´ÂÁö¿¡ ´ëÇØ¼ ¼³¸íÇß½À´Ï´Ù. ÀÌ ¸í·É¹® Áß¿¡´Â °íÁ¤°ª ¹Û¿¡ »ç¿ëÇÏÁö ¾Ê°Å³ª, »ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ °ªÀ» ¸í·É¹®¿¡ »ðÀÔÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÏÁö ¾Ê´Â °Í, Äõ¸®°¡ µ¹·ÁÁØ °ªÀ» ÇÁ·Î±×·¥À¸·Î ó¸®ÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÏÁö ¾Ê´Â °ÍµéÀÌ ÀÖ¾ú½À´Ï´Ù. ÀÌ·± Á¾·ùÀÇ ¸í·É¹®Àº ½ÇÁ¦ÀÇ ¾îÇø®ÄÉÀ̼ǿ¡¼´Â µµ¿òÀÌ µÇÁö ¾Ê½À´Ï´Ù. º»Àý¿¡¼´Â, È£½ºÆ® º¯¼ö¶ó´Â ´Ü¼øÇÑ ±â¹ýÀ» »ç¿ëÇÑ, CÇÁ·Î±×·¥°ú ¸ÅÀÔ SQL ¸í·É¹®°úÀÇ »çÀÌ¿¡ µ¥ÀÌÅ͸¦ ±³È¯ÇÏ´Â ¹æ¹ýÀ» »ó¼¼ÇÏ°Ô ¼³¸íÇÕ´Ï´Ù. ¸ÅÀÔ SQL ÇÁ·Î±×·¥¿¡¼´Â, SQL¸í·É¹®À» È£½ºÆ® ¾ð¾î°¡ µÇ´Â CÇÁ·Î±×·¥ Äڵ忡¼ °Ô½ºÆ® guests·Î °£ÁÖÇÕ´Ï´Ù. µû¶ó¼, CÇÁ·Î±×·¥ÀÇ º¯¼ö´Â È£½ºÆ® º¯¼ö·Î ºÒ¸³´Ï´Ù.
¸ÅÀÔ SQL¿¡ ÀÖ¾î¼ CÇÁ·Î±×·¥°ú SQL ¸í·É¹®ÀÇ »çÀÌ¿¡¼ÀÇ µ¥ÀÌÅÍÀÇ ±³È¯Àº ƯÈ÷ ´Ü¼øÇÕ´Ï´Ù. °ª¿¡ ÀûÀýÇÑ ÀοëºÎÈ£¸¦ ºÎ¿©ÇÏ´Â °Íó·³, ¿©·¯°¡Áö º¹ÀâÇÑ Ã³¸®¸¦ ¼ö¹ÝÇÏ´Â, ÇÁ·Î±×·¥¿¡ µ¥ÀÌÅ͸¦ ¸í·É¹®¿¡ ºÙÀÌ´Â ÀÏ ´ë½Å, ´ÜÁö SQL¸í·É¹®¿¡, ÄÝ·ÐÀ¸·Î Á¢µÎ»ç¸¦ ºÙÀÎ Cº¯¼ö¸íÀ» ¾µ »ÓÀÔ´Ï´Ù. ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.
EXEC SQL INSERT INTO sometable VALUES (:v1, 'foo', :v2);
ÀÌ ¹®ÀåÀº, v1¿Í v2¶ó°í ÇÏ´Â 2°³ÀÇ Cº¯¼ö¸¦ ÂüÁ¶Çϰí, ¶ÇÇÑ, º¸ÅëÀÇ SQL ¹®ÀÚ¿ ¸®ÅÍ·²µµ »ç¿ëÇÕ´Ï´Ù. À̰ÍÀº, »ç¿ëÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ Á¾·ù´Â 1°³ »ÓÀ̶ó´Â Á¦ÇÑÀÌ ¾øÀ½À» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù.
SQL ¸í·É¹® ³»¿¡ Cº¯¼ö¸¦ »ðÀÔÇÏ´Â ÀÌ ¾ç½ÄÀº, SQL ¸í·É¹®À¸·Î °ªÀ» Ç¥ÇöÇÏ¸é ¾îµð¿¡¼¶óµµ ÀÛµ¿ÇÕ´Ï´Ù.
¿¹¸¦ µé¸é, Äõ¸® ³»ÀÇ ¸Å°³º¯¼ö·Î¼ ÇÁ·Î±×·¥À¸·ÎºÎÅÍ µ¥ÀÌÅͺ£À̽º¿¡ µ¥ÀÌÅ͸¦ °Ç³×Áְųª, ȤÀº, µ¥ÀÌÅͺ£À̽º¿¡¼ µ¥ÀÌÅ͸¦ ÇÁ·Î±×·¥À¸·Î º¸³»±â À§Çؼ, ¸ÅÀÔ SQL ÇÁ¸®ÇÁ·Î¼¼¼¸¦ °ü¸®ÇÒ ¼ö ÀÖµµ·Ï, ÀÌ·¯ÇÑ µ¥ÀÌÅ͸¦ Æ÷ÇÔÇϵµ·Ï ÀǵµµÈ Cº¯¼ö¸¦ Ư¼öÇÑ Ç¥°¡ ºÙÀº ¼½¼ÇÀ¸·Î ¼±¾ðÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
ÀÌ ¼½¼ÇÀº ÀÌÇÏ·Î ½ÃÀ۵˴ϴÙ.
EXEC SQL BEGIN DECLARE SECTION;
±×¸®°í, ÀÌÇÏ·Î ³¡³³´Ï´Ù.
EXEC SQL END DECLARE SECTION;
ÀÌ ÇàÀÇ »çÀÌ´Â, ÀÌÇÏ¿Í °°Àº ÀϹÝÀûÀÎ Cº¯¼ö ¼±¾ðÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
int x = 4; char foo[16], bar[16];
º¸ÀÌ´Â ´ë·Î, º¯¼ö¿¡ ÃʱⰪÀ» ÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù. º¯¼öÀÇ ¹üÀ§´Â ÇÁ·Î±×·¥³»ÀÇ ¼½¼Ç ¼±¾ð Àå¼Ò¿¡ ÀÇÇØ Á¤ÇØÁý´Ï´Ù. ¶Ç, ÀÌÇÏ¿Í °°ÀÌ ¾Ï¹¬ÀûÀ¸·Î ¼±¾ð ¼½¼ÇÀ» »ý¼ºÇÏ´Â ±¸¹®À» »ç¿ëÇØ º¯¼ö¸¦ ¼±¾ðÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
EXEC SQL int i = 4;
ÇÁ·Î±×·¥¿¡ ¿øÇÏ´Â ¸¸Å º¹¼öÀÇ ¼±¾ð ¼½¼ÇÀ» °®°ÔÇÒ ¼ö ÀÖ½À´Ï´Ù.
¶Ç, ¼±¾ðÀº º¸Åë Cº¯¼ö·Î¼ ±×´ë·Î Ãâ·Â ÆÄÀÏ¿¡ Ãâ·ÂµË´Ï´Ù. ±×·¯¹Ç·Î, À̰͵éÀ» ÀçÂ÷ ¼±¾ðÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. Åë»ó, SQL ¸í·ÉÀ¸·Î »ç¿ëÇÒ Àǵµ°¡ ¾ø´Â º¯¼ö´Â ÀÌ Æ¯º°ÇÑ ¼½¼ÇÀÇ ¹Û¿¡¼ ¼±¾ðµË´Ï´Ù.
¸¶Âù°¡Áö·Î, ±¸Á¶³ª unionÀÇ Á¤Àǵµ DECLARE¼½¼ÇÀÇ ¾ÈÂÊ¿¡ ³ªÅ¸³¾ Çʿ䰡 ÀÖ½À´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ¼±Çà ÇÁ·Î¼¼½º¿¡¼ ±× Á¤Àǰ¡ ºÒ¸íÇϱ⠶§¹®¿¡, ÀÌ ÇüŸ¦ ´Ù·ê ¼ö ¾ø½À´Ï´Ù.
È£½ºÆ® º¯¼ö·Î¼ ¹è¿, typedef, ±¸Á¶, Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. °Ô´Ù°¡ ECPG¿¡¼¸¸ Á¸ÀçÇϴ Ưº°ÇÑ È£½ºÆ® º¯¼öÀÇ ÇüŰ¡ Á¸ÀçÇÕ´Ï´Ù.
È£½ºÆ® º¯¼öÀÇ ¿¹¸¦ ÀÌÇÏ¿¡ ³ªÅ¸³À´Ï´Ù.
¹è¿ ¼±¾ð¿¡¼ °¡Àå ÀÚÁÖ »ç¿ëµÇ´Â °ÍÀÇ Çϳª´Â, ÀÌÇÏ¿Í °°Àº ¹®ÀÚ ¹è¿ÀÇ ÇÒ´çÀÔ´Ï´Ù.
EXEC SQL BEGIN DECLARE SECTION;
char str[50];
EXEC SQL END DECLARE SECTION;
¹è¿ ±æÀÌ´Â °³¹ßÀÚ°¡ ½Å°æ½á¾ß ÇÏ´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. ÀÌ È£½ºÆ® º¯¼ö¸¦ 49 ¹®ÀÚº¸´Ù ±ä ¹®ÀÚ¿À» µ¹·ÁÁÖ´Â Äõ¸®ÀÇ ´ë»ó º¯¼ö¿¡ »ç¿ëÇßÀ» °æ¿ì, ¹öÆÛ ¿À¹öÇ÷ο찡 ¹ß»ýÇÕ´Ï´Ù.
typedefŰ¿öµå¸¦ »ç¿ëÇØ, »õ·Î¿î ÇüŸ¦ ±âÁ¸ÀÇ ÇüÅ¿¡ ÇÒ´çÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
EXEC SQL BEGIN DECLARE SECTION;
typedef char mychartype[40];
typedef long serial_t;
EXEC SQL END DECLARE SECTION;
ÀÌÇϵµ »ç¿ëÇÒ ¼ö ÀÖÀ½¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä.
EXEC SQL TYPE serial_t IS long;
ÀÌ ¼±¾ðÀÌ ¼±¾ð ¼½¼ÇÀÇ ÀϺÎÀÏ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.
ÀÚÁÖ »ç¿ëµÇ´Â ÇüÅÂÀÇ Æ÷ÀÎÅ͸¦ ¼±¾ðÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×·¯³ª, ÀÚµ¿ ÇÒ´ç¾øÀÌ Æ÷ÀÎÅ͸¦ ´ë»ó º¯¼ö·Î »ç¿ëÇÒ ¼ö ¾ø´Â Á¡¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. ÀÚµ¿ ÇÒ´ç¿¡ °üÇÑ Á¤º¸´Â Section 31.10À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä.
EXEC SQL BEGIN DECLARE SECTION;
int *intp;
char **charp;
EXEC SQL END DECLARE SECTION;
ECPG¿¡´Â, SQL ¼¹öÀÇ µ¥ÀÌÅ͸¦ °£´ÜÇÏ°Ô Ãë±ÞÇϱâ À§ÇÑ Æ¯º°ÇÑ ÇüŰ¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, varchar, numeric, date, timestamp, intervalÇü¿¡ ´ëÇÑ Áö¿øÀÌ ±¸ÇöµÇ°í ÀÖ½À´Ï´Ù. Section 31.8¿¡´Â, ÀÌ·¯ÇÑ ÇüŸ¦ Ãë±ÞÇÏ´Â ±âº» ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, À̰͵éÀ» »ç¿ëÇϸé, ½Ã°£ °£°ÝÀ» ŸÀÓ½ºÅÛÇÁ¿¡ °¡»êÇϱâ À§Çؼ, SQL ¼¹ö¿¡ Äõ¸®¸¦ ¼Û½ÅÇÒ Çʿ䰡 ¾ø¾îÁý´Ï´Ù.
Ưº°ÇÑ VARCHARÇüÀº °¢ º¯¼ö¸¦ À̸§ ÷ºÎÀÇ struct·Î º¯È¯ÇÕ´Ï´Ù.
VARCHAR var[180];
ÀÌ·¯ÇÑ ¼±¾ðÀº, ÀÌÇÏ¿Í °°ÀÌ º¯È¯µË´Ï´Ù.
struct varchar_var { int len; char arr[180]; } var;
ÀÌ ±¸Á¶´Â, varcharÇüÀÇ SQL µ¥ÀÌÅÍ¿ÍÀÇ ÀÎÅÍÆäÀ̽º¿¡ ÀûÇÕÇÕ´Ï´Ù.
¿©±â±îÁö, ÇÁ·Î±×·¥À¸·Î »ý¼ºÇÑ µ¥ÀÌÅ͸¦ SQL ¸í·É¿¡ º¸³¾ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù. ±×·¯³ª, ¾î¶»°Ô Äõ¸®ÀÇ °á°ú¸¦ ²¨³»´Â °ÍÀϱî¿ä? ÀÌ ¸ñÀûÀ» À§Çؼ, ¸ÅÀÔ SQL¿¡¼´Â, SELECT¿Í FETCH¸¦ ÆÄ»ýÇÑ, º¸Åë ¸í·ÉÀÇ Æ¯º°ÇÑ º¯ÇüÀ» Á¦°øÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ¸í·ÉÀº Ưº°ÇÑ INTO±¸¸¦ °¡Á®, ¿©±â¼ µ¹·Á¹ÞÀº °ªÀ» ¾î´À È£½ºÆ® º¯¼ö¿¡ ÀúÀåµÉ °÷À» ÁöÁ¤ÇÕ´Ï´Ù.
ÀÌÇÏ¿¡ »ùÇÃÀ» ³ªÅ¸³À´Ï´Ù.
/* * ÀÌÇÏÀÇ Å×À̺íÀ» ÀüÁ¦·Î Çϰí ÀÖ½À´Ï´Ù. * CREATE TABLE test1 (a int, b varchar(50)); */ EXEC SQL BEGIN DECLARE SECTION; int v1; VARCHAR v2; EXEC SQL END DECLARE SECTION; ... EXEC SQL SELECT a, b INTO :v1, :v2 FROM test;
INTO±¸°¡ ¼±Åà ¸®½ºÆ®¿Í FROM±¸ÀÇ »çÀÌ¿¡ ³ªÅ¸³³´Ï´Ù. ¼±Åà ¸®½ºÆ®³»ÀÇ ¿ä¼ÒÀÇ ¼ö¿Í INTOÁ÷ÈÄÀÇ ¸®½ºÆ®(Ÿ°Ù ¸®½ºÆ®¶ó°íµµ ºÒ¸³´Ï´Ù)ÀÇ ¿ä¼ÒÀÇ ¼ö´Â µ¿ÀÏÇØ¾ß ÇÕ´Ï´Ù.
ÀÌÇÏ¿¡ FETCH¸í·ÉÀ» »ç¿ëÇÏ´Â ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.
EXEC SQL BEGIN DECLARE SECTION;
int v1;
VARCHAR v2;
EXEC SQL END DECLARE SECTION;
...
EXEC SQL DECLARE foo CURSOR FOR SELECT a, b FROM test;
...
do {
...
EXEC SQL FETCH NEXT FROM foo INTO :v1, :v2;
...
} while (...);
¿©±â¿¡¼´Â, INTO±¸°¡ ¸ðµç ÀϹÝÀûÀÎ ±¸ÀÇ µÚ¿¡ ³ªÅ¸³ª°í ÀÖ½À´Ï´Ù.
ÀÌ·¯ÇÑ µÎ°¡Áö ¹æ¹ýÀº ¸ðµÎ, ÇÑ ¹ø¿¡ 1ÇุÀ» ²¨³¾ ¼ö°¡ ÀÖ½À´Ï´Ù. º¹¼öÀÇ ÇàÀ» Æ÷ÇÔÇÒ °¡´É¼ºÀÌ ÀÖ´Â °á°ú ÁýÇÕÀ» ó¸®ÇØ¾ß ÇÏ´Â °æ¿ì´Â, µÎ ¹øÂ°ÀÇ ¿¹Ã³·³ Ä¿¼¸¦ »ç¿ëÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
À§ÀÇ ¿¹¿¡¼´Â NUJLL°ªÀ» Ãë±ÞÇÏÁö ¾Ê½À´Ï´Ù. ½ÇÁ¦, °Ë»ö ¿¹¿¡¼´Â, ¸¸¾à µ¥ÀÌÅͺ£À̽º¿¡¼ NULL°ªÀÌ ³ª¿ÔÀ» °æ¿ì¿¡ ¿¡·¯°¡ ¹ß»ýÇÕ´Ï´Ù. µ¥ÀÌÅͺ£À̽º¿¡ NULL°ªÀ» °Ç³×°Å³ª, ¶Ç´Â, µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ NULL°ªÀ» ²¨³»±â À§Çؼ´Â, Á¦2ÀÇ È£½ºÆ® º¯¼ö »ç¾çÀ» µ¥ÀÌÅ͸¦ ÀúÀåÇϴ ȣ½ºÆ® º¯¼ö °¢°¢ Ãß°¡ÇØ¾ß ÇÕ´Ï´Ù. Á¦2ÀÇ È£½ºÆ® º¯¼ö´Â Áö½ÃÀÚ·Î ºÒ·ÁÁ® µ¥ÀÌÅͰ¡ NULLÀÎÁö ¾Æ´ÑÁö¸¦ ³ªÅ¸³»´Â Ç÷¡±×°¡ Æ÷ÇԵ˴ϴÙ. NULLÀÇ °æ¿ì, ½ÇÁ¦ÀÇ È£½ºÆ® º¯¼öÀÇ °ªÀº ¹«½ÃµË´Ï´Ù. ÀÌÇÏ¿¡, NULL°ªÀÇ ÃëµæÀ» ¿Ã¹Ù¸£°Ô ´Ù·ç´Â ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.
EXEC SQL BEGIN DECLARE SECTION; VARCHAR val; int val_ind; EXEC SQL END DECLARE SECTION: ... EXEC SQL SELECT b INTO :val :val_ind FROM test1;
°ªÀÌ NULL°¡ ¾Æ´Ï¸é, Áö½ÃÀÚ º¯¼ö val_ind´Â 0ÀÌ µË´Ï´Ù. °ªÀÌ NULL¶ó¸é, ºÎÀÇ °ªÀÌ µË´Ï´Ù.
Áö½ÃÀÚ´Â ´Ù¸¥ ±â´ÉÀ» °¡Áý´Ï´Ù. Áö½ÃÀÚÀÇ °ªÀÌ Á¤À̶ó¸é, °ªÀÌ NULL°¡ ¾Æ´ÏÁö¸¸, È£½ºÆ® º¯¼ö¿¡ ÀúÀåµÉ ¶§¿¡ ÀϺΰ¡ »èÁ¦µÈ °ÍÀ» ³ªÅ¸³À´Ï´Ù.