31.7. µ¿Àû SQL

¸¹Àº °æ¿ì, ¾îÇø®ÄÉÀ̼ÇÀÌ ½ÇÇàÇØ¾ß ÇÏ´Â SQL¹®Àº, ¾îÇø®ÄÉÀ̼ÇÀÇ ÀÛ¼º ´Ü°è¿¡¼­ Á¤ÇØÁý´Ï´Ù. ±×·¯³ª, ÀÌ Áß¿¡¼­, SQL¸í·É¹®ÀÌ ½ÇÇà ½Ã ±¸¼ºµÇ°Å³ª ¿ÜºÎ ¼Ò½º·Î Á¦°øµÇ´Â ÀÏÀÌ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì, SQL¸í·É¹®À» Á÷Á¢ C ¼Ò½º Äڵ忡 ³¢¿ö ³ÖÀ» ¼ö ¾ø½À´Ï´Ù. ±×·¯³ª, ¹®ÀÚ¿­ º¯¼ö·Î Á¦°øµÇ´Â ÀÓÀÇÀÇ SQL¸í·É¹®À» È£ÃâÇÒ ¼ö ÀÖ´Â ±â´ÉÀÌ Á¸ÀçÇÕ´Ï´Ù.

ÀÓÀÇÀÇ SQL¸í·É¹®À» ½ÇÇàÇÏ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº, EXECUTE IMMEDIATE¸í·ÉÀ» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.

EXEC SQL BEGIN DECLARE SECTION;
const char *stmt = "CREATE TABLE test1 (...);";
EXEC SQL END DECLARE SECTION;

EXEC SQL EXECUTE IMMEDIATE :stmt;

ÀÌ ¹æ¹ý¿¡¼­´Â µ¥ÀÌÅ͸¦ °Ë»öÇÏ´Â ¸í·É¹®(¿¹¸¦ µé¸é SELECT)À» ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù.

ÀÓÀÇÀÇ SQL¸í·É¹®À» ½ÇÇàÇÏ´Â °Íº¸´Ù °­·ÂÇÑ ¹æ¹ýÀº, ¹Ì¸® ¸í·É¹®µéÀ» ÁغñÇÑ µÚ ½ÇÇàÇÏ°í ½ÍÀ» ¶§ ½ÇÇàÇÏ´Â °ÍÀÔ´Ï´Ù. ¶Ç, ¸í·É¹®À» ÀϹÝÈ­µÈ ÇüÅ·ΠÁغñÇϰí, ¸Å°³º¯¼ö¸¦ ¿Å°Ü, ƯÁ¤ÀÇ ¸í·É¹®À» ½ÇÇà½Ãų ¼ö ÀÖ½À´Ï´Ù. ¸í·É¹®À» ÁغñÇÒ ¶§, ³ªÁß¿¡ ¸Å°³º¯¼ö·Î¼­ ¿Å°Ü³õ°í ½ÍÀº °÷¿¡ ¹°À½Ç¥¸¦ ±âÀçÇØ ÁÖ¼¼¿ä. ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.

EXEC SQL BEGIN DECLARE SECTION;
const char *stmt = "INSERT INTO test1 VALUES(?, ?);";
EXEC SQL END DECLARE SECTION;

EXEC SQL PREPARE mystmt FROM :stmt;
 ...
EXEC SQL EXECUTE mystmt USING 42, 'foobar';

½ÇÇà½ÃŰ´Â ¸í·É¹®ÀÌ °ªÀ» µ¹·ÁÁÖ´Â °æ¿ì, INTO ±¸¸¦ ºÙ¿© ÁÖ¼¼¿ä.

EXEC SQL BEGIN DECLARE SECTION;
const char *stmt = "SELECT a, b, c FROM test1 WHERE a > ?";
int v1, v2;
VARCHAR v3;
EXEC SQL END DECLARE SECTION;

EXEC SQL PREPARE mystmt FROM :stmt;
 ...
EXEC SQL EXECUTE mystmt INTO v1, v2, v3 USING 37;

EXECUTE¸í·ÉÀº INTO±¸, USING±¸, ÀÌ ¾çÂÊ ¸ðµÎ¸¦ °¡Áö°Å³ª, ¾î´À Âʵµ °¡ÁöÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù.

ÁغñµÈ ¹®ÀåÀÌ ÇÊ¿ä¾ø°Ô µÇ¾úÀ» ¶§, ÇÒ´çÀ» ÇØÁ¦ÇØ¾ß ÇÕ´Ï´Ù.

EXEC SQL DEALLOCATE PREPARE 
name
;