31.6. È£½ºÆ® º¯¼öÀÇ »ç¿ë

Section 31.4¿¡¼­, ¸ÅÀÔ SQL ÇÁ·Î±×·¥À¸·Î ¾î¶»°Ô SQL ¸í·É¹®À» ½ÇÇàÇÏ´ÂÁö¿¡ ´ëÇØ¼­ ¼³¸íÇß½À´Ï´Ù. ÀÌ ¸í·É¹® Áß¿¡´Â °íÁ¤°ª ¹Û¿¡ »ç¿ëÇÏÁö ¾Ê°Å³ª, »ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ °ªÀ» ¸í·É¹®¿¡ »ðÀÔÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÏÁö ¾Ê´Â °Í, Äõ¸®°¡ µ¹·ÁÁØ °ªÀ» ÇÁ·Î±×·¥À¸·Î ó¸®ÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÏÁö ¾Ê´Â °ÍµéÀÌ ÀÖ¾ú½À´Ï´Ù. ÀÌ·± Á¾·ùÀÇ ¸í·É¹®Àº ½ÇÁ¦ÀÇ ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â µµ¿òÀÌ µÇÁö ¾Ê½À´Ï´Ù. º»Àý¿¡¼­´Â, È£½ºÆ® º¯¼ö¶ó´Â ´Ü¼øÇÑ ±â¹ýÀ» »ç¿ëÇÑ, CÇÁ·Î±×·¥°ú ¸ÅÀÔ SQL ¸í·É¹®°úÀÇ »çÀÌ¿¡ µ¥ÀÌÅ͸¦ ±³È¯ÇÏ´Â ¹æ¹ýÀ» »ó¼¼ÇÏ°Ô ¼³¸íÇÕ´Ï´Ù. ¸ÅÀÔ SQL ÇÁ·Î±×·¥¿¡¼­´Â, SQL¸í·É¹®À» È£½ºÆ® ¾ð¾î°¡ µÇ´Â CÇÁ·Î±×·¥ Äڵ忡¼­ °Ô½ºÆ® guests·Î °£ÁÖÇÕ´Ï´Ù. µû¶ó¼­, CÇÁ·Î±×·¥ÀÇ º¯¼ö´Â È£½ºÆ® º¯¼ö·Î ºÒ¸³´Ï´Ù.

31.6.1. °³¿ä

¸ÅÀÔ SQL¿¡ À־ CÇÁ·Î±×·¥°ú SQL ¸í·É¹®ÀÇ »çÀÌ¿¡¼­ÀÇ µ¥ÀÌÅÍÀÇ ±³È¯Àº ƯÈ÷ ´Ü¼øÇÕ´Ï´Ù. °ª¿¡ ÀûÀýÇÑ ÀοëºÎÈ£¸¦ ºÎ¿©ÇÏ´Â °Íó·³, ¿©·¯°¡Áö º¹ÀâÇÑ Ã³¸®¸¦ ¼ö¹ÝÇÏ´Â, ÇÁ·Î±×·¥¿¡ µ¥ÀÌÅ͸¦ ¸í·É¹®¿¡ ºÙÀÌ´Â ÀÏ ´ë½Å, ´ÜÁö SQL¸í·É¹®¿¡, ÄÝ·ÐÀ¸·Î Á¢µÎ»ç¸¦ ºÙÀÎ Cº¯¼ö¸íÀ» ¾µ »ÓÀÔ´Ï´Ù. ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.

EXEC SQL INSERT INTO sometable VALUES (:v1, 'foo', :v2);

ÀÌ ¹®ÀåÀº, v1¿Í v2¶ó°í ÇÏ´Â 2°³ÀÇ Cº¯¼ö¸¦ ÂüÁ¶Çϰí, ¶ÇÇÑ, º¸ÅëÀÇ SQL ¹®ÀÚ¿­ ¸®ÅÍ·²µµ »ç¿ëÇÕ´Ï´Ù. À̰ÍÀº, »ç¿ëÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ Á¾·ù´Â 1°³ »ÓÀ̶ó´Â Á¦ÇÑÀÌ ¾øÀ½À» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù.

SQL ¸í·É¹® ³»¿¡ Cº¯¼ö¸¦ »ðÀÔÇÏ´Â ÀÌ ¾ç½ÄÀº, SQL ¸í·É¹®À¸·Î °ªÀ» Ç¥ÇöÇÏ¸é ¾îµð¿¡¼­¶óµµ ÀÛµ¿ÇÕ´Ï´Ù.

31.6.2. ¼½¼Ç ¼±¾ð

¿¹¸¦ µé¸é, Äõ¸® ³»ÀÇ ¸Å°³º¯¼ö·Î¼­ ÇÁ·Î±×·¥À¸·ÎºÎÅÍ µ¥ÀÌÅͺ£À̽º¿¡ µ¥ÀÌÅ͸¦ °Ç³×Áְųª, ȤÀº, µ¥ÀÌÅͺ£À̽º¿¡¼­ µ¥ÀÌÅ͸¦ ÇÁ·Î±×·¥À¸·Î º¸³»±â À§Çؼ­, ¸ÅÀÔ 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¼½¼ÇÀÇ ¾ÈÂÊ¿¡ ³ªÅ¸³¾ Çʿ䰡 ÀÖ½À´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ¼±Çà ÇÁ·Î¼¼½º¿¡¼­ ±× Á¤Àǰ¡ ºÒ¸íÇϱ⠶§¹®¿¡, ÀÌ ÇüŸ¦ ´Ù·ê ¼ö ¾ø½À´Ï´Ù.

31.6.3. ¿©·¯°¡Áö È£½ºÆ® º¯¼öÀÇ ÇüÅÂ

È£½ºÆ® º¯¼ö·Î¼­ ¹è¿­, typedef, ±¸Á¶, Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. °Ô´Ù°¡ ECPG¿¡¼­¸¸ Á¸ÀçÇϴ Ưº°ÇÑ È£½ºÆ® º¯¼öÀÇ ÇüŰ¡ Á¸ÀçÇÕ´Ï´Ù.

È£½ºÆ® º¯¼öÀÇ ¿¹¸¦ ÀÌÇÏ¿¡ ³ªÅ¸³À´Ï´Ù.

¹è¿­

¹è¿­ ¼±¾ð¿¡¼­ °¡Àå ÀÚÁÖ »ç¿ëµÇ´Â °ÍÀÇ Çϳª´Â, ÀÌÇÏ¿Í °°Àº ¹®ÀÚ ¹è¿­ÀÇ ÇÒ´çÀÔ´Ï´Ù.

EXEC SQL BEGIN DECLARE SECTION;
    char str[50];
EXEC SQL END DECLARE SECTION;

¹è¿­ ±æÀÌ´Â °³¹ßÀÚ°¡ ½Å°æ½á¾ß ÇÏ´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. ÀÌ È£½ºÆ® º¯¼ö¸¦ 49 ¹®ÀÚº¸´Ù ±ä ¹®ÀÚ¿­À» µ¹·ÁÁÖ´Â Äõ¸®ÀÇ ´ë»ó º¯¼ö¿¡ »ç¿ëÇßÀ» °æ¿ì, ¹öÆÛ ¿À¹öÇ÷ο찡 ¹ß»ýÇÕ´Ï´Ù.

Typedefs

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;
Special types of variables

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 µ¥ÀÌÅÍ¿ÍÀÇ ÀÎÅÍÆäÀ̽º¿¡ ÀûÇÕÇÕ´Ï´Ù.

31.6.4. SELECT INTO ¿Í FETCH INTO

¿©±â±îÁö, ÇÁ·Î±×·¥À¸·Î »ý¼ºÇÑ µ¥ÀÌÅ͸¦ 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ÇุÀ» ²¨³¾ ¼ö°¡ ÀÖ½À´Ï´Ù. º¹¼öÀÇ ÇàÀ» Æ÷ÇÔÇÒ °¡´É¼ºÀÌ ÀÖ´Â °á°ú ÁýÇÕÀ» ó¸®ÇØ¾ß ÇÏ´Â °æ¿ì´Â, µÎ ¹øÂ°ÀÇ ¿¹Ã³·³ Ä¿¼­¸¦ »ç¿ëÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

31.6.5. Áö½ÃÀÚ

À§ÀÇ ¿¹¿¡¼­´Â 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°¡ ¾Æ´ÏÁö¸¸, È£½ºÆ® º¯¼ö¿¡ ÀúÀåµÉ ¶§¿¡ ÀϺΰ¡ »èÁ¦µÈ °ÍÀ» ³ªÅ¸³À´Ï´Ù.