ÇöÀç°­Á : UNIX ¼ÒÄÏ ÀÀ¿ë ÇÁ·Î±×·¡¹Ö ÀÌÀü 4.5 ¼ÒÄÏ ÇÔ¼ö 󸮽ð£ ÃøÁ¤


4.6 ³×Æ®¿÷ µ¥ÀÌÅͺ£À̽º ¾×¼¼½º ÀÀ¿ë

¢º 4.6Àý¿¡¼­´Â ³×Æ®¿÷À» ÅëÇÏ¿© ¼­¹ö¿¡ ÀÖ´Â µ¥ÀÌÅͺ£À̽º(DB: database) ÀڷḦ °Ë»öÇϰųª »õ·Î¿î ÀڷḦ Ãß°¡ÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù.

¢º µ¥ÀÌÅͺ£À̽º¿¡ ÀڷḦ ÀÔÃâ·ÂÇϱâ À§Çؼ­ DBMS(DataBase Management System)¿Í SQL(Structured Query Language)¹®À» »ç¿ëÇÑ´Ù.

¢º º» ¿¹Á¦ÀÇ ¼­¹ö ÇÁ·Î±×·¥¿¡¼­´Â SQLÀ» Áö¿øÇÏ´Â c ¾ð¾îÀÎ ESQL/CÀ» »ç¿ëÇÑ´Ù.

4.6.1 Ç¥ÁØ SQL¹®

¢º SQLÀº ¼³Ä¡µÈ DBMS Á¾·ù¿¡ ¹«°üÇÏ°Ô DB ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ¸í·É¹®ÀÇ ÁýÇÕÀ¸·Î Ç¥ÁØ SQLÀÌ Á¦°øÇÏ´Â ÁÖ¿ä ¸í·É¹®°ú ±â´ÉÀ» Ç¥ 4-2¿¡ Á¤¸®ÇÏ¿´´Ù.

±¸ºÐ

SQL ¹®

»ç¿ë¹ý

±â ´É

ÀÚ ·á

Á¤Àǹ®

CREATE DATABASE CREATE DATABASE <DB¸í> DB¸¦ »õ·Î ¸¸µç´Ù.
DATABASE DATABASE <DB¸í> [EXCLUSIVE] »ç¿ëÇÒ DB¸¦ ¼±ÅÃÇÑ´Ù.

[EXCLUSIVE] ¿É¼ÇÀº ÇöÀç »ç¿ëÀÚ¸¸ DB¿¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.

CREATE TABLE CREATE TABLE <Å×À̺í¸í>

(<Ä®·³¸í>, <ÀÚ·áÇüÅÂ> )

ÇöÇà DB¿¡ »õ·Î¿î Å×À̺íÀ» »ý¼ºÇÑ´Ù.
DROP TABLE DROP TABLE <Å×À̺í¸í> ÇöÇà DB¿¡¼­ ÁöÁ¤ÇÑ Å×À̺íÀ» »èÁ¦ÇÑ´Ù.
DROP DATABASE DROP DATABASE <DB¸í> ÁöÁ¤ÇÑ DATABASE¸¦ »èÁ¦ÇÑ´Ù.

ÀÚ ·á

󸮹®

DELETE DELETE FROM <Å×À̺í¸í>

WHERE <Ä®·³¸í> = <°ª>

FROM¿¡ ÁöÁ¤ÇÑ Å×ÀÌºí¿¡¼­ WHERE Á¶°ÇÀ» ¸¸Á·ÇÏ´Â ÇàÀ» »èÁ¦ÇÑ´Ù.
INSERT INSERT INTO <Å×À̺í¸í> ( <Ä®·³¸í>) VALUES (<°ª>) INTO¿¡ ÁöÁ¤ÇÑ Å×ÀÌºí¿¡ »õ·Î¿î ÇàÀ» Ãß°¡ÇÑ´Ù.
SELECT SELECT <Ä®·³¸í>

FROM <Å×À̺í¸í>

WHERE <Ä®·³¸í> = <°ª>

FROM¿¡ ÁöÁ¤ÇÑ Å×ÀÌºí¿¡¼­ WHERE Á¶°ÇÀ» ¸¸Á·ÇÏ´Â ÇàÀ» ¼±ÅÃÇÑ´Ù.
UPDATE UPDATE <Å×À̺í¸í>

SET <Ä®·³¸í> = <°ª>

WHERE <Ä®·³¸í> = <°ª>

UPDATE¿¡ ÁöÁ¤ÇÑ Å×ÀÌºí¿¡¼­ WHERE Á¶°ÇÀ» ¸¸Á·ÇÏ´Â ÇàÀÇ ³»¿ëÀ» SET Àý¿¡¼­ ÁöÁ¤ÇÑ °Í°ú °°ÀÌ º¯°æÇÑ´Ù.

Ç¥ 4-2 ÁÖ¿ä Ç¥ÁØ SQL ¹®

¢º ¿¹¸¦µé¾î »õ·Î¿î DB¸¦ Çϳª ¸¸µé ¶§¿¡´Â CREATE DATA- BASE¹®À» »ç¿ëÇÑ´Ù.

¢º DB³»¿¡ »õ·Î¿î Å×À̺íÀ» »ý¼ºÇÒ ¶§¿¡´Â CREATE TABLE¹®À» ÀÌ¿ëÇÏ°í Å×ÀÌºí¿¡ ¾î¶² Ç׸ñÀ» Ãß°¡ÇÏ·Á¸é INSERT¹®À» »ç¿ëÇÑ´Ù.

¢º ¾Æ·¡´Â UNIV(´ëÇÐ)À̶ó´Â DB¸¦ »õ·Î ¸¸µé°í ¿©±â¿¡ DEPT(ºÎ¼­)¶ó´Â Å×À̺íÀ» ¸¸µç ÈÄ DEPTÀÇ ID, dept_ID°¡ 01ÀÌ°í ºÎ¼­¸í dept_NameÀÌ 'Ãѹ«°ú'ÀÎ µ¥ÀÌÅÍ Ç׸ñÀ» Ãß°¡Çϴ ǥÁØ SQL ¹®À» ³ªÅ¸³Â´Ù.

¢º ¾Æ·¡ÀÇ Å×À̺í DEPT¿¡¼­ dept_ID´Â µÎ ±ÛÀÚÀÌ°í, dept_ NameÀ» 20ÀÚ·Î ÁöÁ¤ÇÏ¿´´Ù.

CREATE DATABASE UNIV

CREATE TABLE DEPT (dept_ID char(2), dept_Name char(20))

INSERT INTO DEPT VALUES ('01', 'Ãѹ«°ú')

¢º Å×ÀÌºí³»ÀÇ ¾î¶² µ¥ÀÌÅÍ Ç׸ñ °ªÀ» ¹Ù²Ü ¶§´Â UPDATE¸¦ »ç¿ëÇϴµ¥ ´ÙÀ½Àº DEPT Å×ÀÌºí¿¡¼­ dept_ID°¡ 01ÀÎ ÇàÀÇ dept_NameÀ» '°æ¸®°ú'·Î º¯°æÇÏ´Â ¿¹Á¦ÀÌ´Ù.

UPDATE DEPT

SET dept_Name = '°æ¸®°ú'

WHERE dept_ID = '01'

¢º Å×ÀÌºí¿¡¼­ ¾î¶² Ä®·³ÀÌ ¾î¶² Á¶°ÇÀ» ¸¸Á·ÇÏ´Â µ¥ÀÌÅ͸¦ °Ë»öÇϱâ À§Çؼ­´Â SELECT¸¦ ÀÌ¿ëÇÑ´Ù.

¢º SELECT µÚ¿¡´Â Ãâ·ÂÇÒ Ä®·³ÀÇ ¸ñ·ÏÀÌ, FROM µÚ¿¡´Â °Ë»öÇÒ Å×ÀÌºí ¸íÀÌ, ±×¸®°í WHERE µÚ¿¡´Â °Ë»ö Á¶°ÇÀ» ÁöÁ¤ÇÑ´Ù.

¢º ¿¹¸¦µé¾î Å×À̺í DEPT¿¡¼­ dept_Name Ä®·³ÀÌ 'Ãѹ«°ú'ÀÎ ÇàÀ» °Ë»öÇϱâ À§ÇÑ SQL¹®Àº ´ÙÀ½°ú °°´Ù.

SELECT dept_Name, dept_ID

FROM DEPT

WHERE dept_Name = 'Ãѹ«°ú'

4.6.2 ESQL/C

¢º ESQL/C´Â c ¾ð¾î ÇÁ·Î±×·¥¿¡¼­ SQL ¸í·É¹®À» Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ±â´ÉÀ» È®ÀåÇÑ ¾ð¾î·Î c ¾ð¾îÀÇ ÀϹÝÀûÀÎ ±â´ÉÀ» Áö¿øÇϸç SQL¹®À» »ç¿ëÇÒ ¼ö ÀÖ´Â ÇÔ¼ö°¡ Ãß°¡µÇ¾ú´Ù(ESQL/C·Î ÀÛ¼ºÇÑ ÆÄÀÏÀº .ecÈ®ÀåÀÚ¸¦ °®´Â´Ù).

¢º ESQL/C ÇÁ·Î±×·¥ ³»¿¡¼­ SQL¹®Àº $·Î ½ÃÀÛÇØ¾ß Çϴµ¥ ¿¹¸¦µé¾î DEPT¶ó´Â Å×ÀÌºí¿¡ dept_ID °ªÀÌ 01ÀÎ 'Ãѹ«°ú' Ç׸ñÀ» Ãß°¡ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.

$insert into DEPT values ( '01', 'Ãѹ«°ú');

¡¡

¢º ¶Ç´Â $´ë½Å exec sqlÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.

exec sql insert into DEPT values ( '01', 'Ãѹ«°ú');

¡¡

¢º SQL¹® ³»¿¡¼­ c ¾ð¾î ÇÁ·Î±×·¥¿¡¼­ Á¤ÀÇÇÑ º¯¼öµéÀ» »ç¿ëÇÒ ¼ö Àִµ¥ ÀÌ·¯ÇÑ c ¾ð¾î º¯¼ö¸¦ È£½ºÆ® º¯¼ö¶ó°í ÇÑ´Ù.

¢º È£½ºÆ® º¯¼ö¸¦ ¼±¾ðÇÒ ¶§¿¡´Â º¯¼ö ŸÀÔ ¾Õ¿¡ $¸¦ ºÙ¿©¾ß Çϸç, SQL¹®¿¡¼­ ÀÌ º¯¼ö¸¦ »ç¿ëÇÒ °æ¿ì¿¡´Â : ¸¦ ºÙ¿©¾ß ÇÑ´Ù.

¢º ¿¹¸¦µé¾î È£½ºÆ® º¯¼ö¸¦ »ç¿ëÇÏ¿© DEPT Å×ÀÌºí¿¡ 'Ãѹ«°ú'¸¦ Ãß°¡Çϱâ À§Çؼ­´Â ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.

¢º ¾Æ·¡¿¡¼­ È£½ºÆ® º¯¼ö´Â id¿Í name µÎ °³ÀÌ´Ù.

# ID_LEN 2

# NAME_LEN 20

$char id[ID_LEN], name[NAME_LEN];

strcpy(id, "01");

strcpy(name, "Ãѹ«°ú");

$insert into DEPT values ( :id, :name ) ;

¢º Ç¥ 4-3¿¡ SQL ¹®¿¡¼­ »ç¿ëÇÏ´Â º¯¼öÀÇ Á¾·ù¿Í À̸¦ Áö¿øÇϱâ À§ÇÑ ESQL/CÀÇ È£½ºÆ® º¯¼öµéÀ» Á¤¸®ÇÏ¿´´Ù.

SQL º¯¼ö

È£½ºÆ® º¯¼ö

¼³ ¸í

CHAR(n),

CHARACTER(n)

char[n+1],

char*

1ºÎÅÍ 32,767±îÁö °¡º¯ ±æÀÌÀÇ ¹®ÀÚ¿­À» ÀúÀåÇÑ´Ù. C¾ð¾î¿¡¼­ ¹®ÀÚ¿­Àº ³Î(NULL)·Î ³¡³ª¾ß ÇϹǷÎ, CHAR(n) °ªÀ» ¹Þ´Â È£½ºÆ® ¹è¿­Àº (n+1) Å©±â¸¦ °¡Á®¾ß ÇÔ
SMALLINT short int -32,767¿¡¼­ 32,767ÀÇ ¹üÀ§¸¦ °®´Â Á¤¼öÇü
INTEGER long int -2,147,483,647¿¡¼­ 2,147,483,647ÀÇ ¹üÀ§¸¦ °®´Â Á¤¼öÇü
SMALLFLOAT REAL float 7ÀÚ¸®ÀÇ À¯È¿ ÀÚ¸®¼ö¸¦ °®´Â ºÎµ¿ ¼Ò¼öÁ¡ ¼ö
FLOAT,

DOUBLE PRECISION

double 14ÀÚ¸®ÀÇ À¯È¿ ÀÚ¸´¼ö¸¦ °®´Â ºÎµ¿ ¼Ò¼öÁ¡ ¼ö
SERIAL long int SERIAL ÀÚ·áÇüÅ´ »ç¿ëÀÚ°¡ INSERT ¹®À» ½ÇÇàÇÒ ¶§ ESQL/C°¡ ÀÚµ¿À¸·Î ¹èÁ¤ÇÏ´Â ¼øÂ÷ Á¤¼ö
DATE long int 1899³â 12¿ù 31ÀÏ ÀÌÈÄÀÇ ³¯Â¥¸¦ Ç¥ÇöÇϸç 4¹ÙÀÌÆ® int¿¡ ÀúÀå
DECIMAL

DEC

NUMERIC

dec_t,

struct decimal

¼Ò¼öÁ¡ÀÇ À¯¹«¿¡ °ü°è¾øÀÌ 32°³ÀÇ À¯È¿¼ýÀÚ¸¦ °®´Â ¼ö¸¦ ³ªÅ¸³¿
MONEY dec_t,

struct decimal

MONEY(m,n)ÀÇ ÇüÅ·Π³ªÅ¸³»¸ç, °íÁ¤µÈ Á¤¹Ðµµ m°ú ¼Ò¼öÀÚ¸® ¼ö nÀ» ÀǹÌ
DATETIME dtime_t,

struct dtime

ÇÑ ½ÃÁ¡À» "³¯Â¥ ½Ã:ºÐ:ÃÊ"·Î ³ªÅ¸³¿
INTERVAL intrvl_t, struct intrvl ±â°£À» ³ªÅ¸³»´Â º¯¼ö

Ç¥ 4-3 È£½ºÆ® º¯¼ö Á¾·ù

¢º ESQL/C¿¡¼­´Â óÀ½ SQL¹®À» ½ÇÇàÇϱâ Àü¿¡ database ¹®À» »ç¿ëÇÏ¿© ¾ÕÀ¸·Î »ç¿ëÇÒ µ¥ÀÌÅͺ£À̽º¸¦ ¼±¾ðÇØ¾ß ÇÑ´Ù.

¢º ÇÁ·Î±×·¥À» Á¾·áÇϱâ Àü¿¡ close database ¹®À¸·Î ¼±ÅÃÇß´ø µ¥ÀÌÅͺ£À̽º¸¦ ´Ý¾Æ¾ß ÇÑ´Ù.

¢º ¿¹¸¦µé¾î Test_DB¶ó´Â DB¸¦ ¼±ÅÃÇÏ°í ´ÝÀ¸·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

$database Test_DB;

{ /* Test_DB »ç¿ë */ }

$close database;

¢º ÇÑÆí ESQL/C·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥ÀÇ ÄÄÆÄÀÏÀº ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

esql -o Ãâ·ÂÆÄÀÏ¸í ¼Ò½ºÆÄÀϸí

¡¡

4.6.3 ÇÁ·Î±×·¥ °³¿ä

¢º ¿©±â¼­´Â ³×Æ®¿÷À» ÅëÇÏ¿© µ¥ÀÌÅͺ£À̽º ÀڷḦ °Ë»öÇϰųª ÀڷḦ Ãß°¡ÇÏ´Â ¼­ºñ½º¸¦ Á¦°øÇÏ´Â ¼­¹ö ÇÁ·Î±×·¥, db_server.ec¿Í À̸¦ ÀÌ¿ëÇϴ Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ db_ client.cÀÇ °³¿ä¸¦ ¼³¸íÇÏ°Ú´Ù.

¢º db_server.ec¿¡¼­´Â »ç¿ëÇÒ µ¥ÀÌÅͺ£À̽º¸¦ ¼±¾ðÇÏ°í Ŭ¶óÀ̾ðÆ®¿Í Á¢¼ÓÇϱâ À§ÇÑ ¼ÒÄÏÀ» °³¼³ÇÑ ÈÄ Å¬¶óÀ̾ðÆ®¿¡¼­ ¿ä±¸ÇÏ´Â DB ¾×¼¼½º¸¦ ¼­ºñ½ºÇÑ´Ù.

¢º º» ¿¹Á¦¿¡¼­´Â Ŭ¶óÀ̾ðÆ®°¡ ¿ä±¸ÇÏ´Â µ¿ÀÛÀ¸·Î 1) ÀÚ·áÃß°¡¿Í 2) ÀÚ·á°Ë»ö µÎ °¡Áö¸¸ ±¸ÇöÇÏ¿´´Ù.

¢º ¼­¹ö´Â µÎ °¡Áö Áß ÇϳªÀÇ µ¿ÀÛÀ» ½ÇÇàÇÏ°í ±× °á°ú¸¦ Ŭ¶óÀ̾ðÆ®¿¡°Ô ¾Ë·ÁÁØ´Ù.

¢º Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ db_client.c¿¡¼­´Â ¸ÕÀú ¼ÒÄÏÀ» »ý¼ºÇÏ°í ¼­¹ö¿¡ Á¢¼ÓÇÑ´Ù.

¢º »ç¿ëÀÚ È­¸é¿¡ 1) ÀÚ·áÃß°¡¿Í 2) ÀÚ·á°Ë»ö ¸Þ´º¸¦ º¸¿©ÁÖ°í ¸Þ´º¼±Åÿ¡ µû¶ó ÇÊ¿äÇÑ µ¥ÀÌÅ͸¦ Ãß°¡·Î ÀԷ¹޴´Ù.

¢º ÀÚ·á ÀÔ·ÂÀÌ ³¡³ª¸é ¼­¹ö·Î µ¿ÀÛÀ» ¿ä±¸(request)ÇÏ°í ±× °á°ú(response)¸¦ ¼ö½ÅÇÏ¿© È­¸é¿¡ Ãâ·ÂÇÑ´Ù.

¢º ¾Æ·¡´Â ¼­¹ö ÇÁ·Î±×·¥ÀÇ ½ÇÇà ¿¹·Î ¼­¹ö°¡ Æ÷Æ®¹øÈ£·Î 3000À» »ç¿ëÇÏ´Â °æ¿ìÀÌ´Ù.

db_server 3000

¢º ´ÙÀ½Àº Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥(db_client.c)ÀÇ ½ÇÇàÈ­¸éÀ¸·Î ¸ÕÀú ¸Þ´º 1À» ¼±ÅÃÇÏ¿© ºÎ¼­¸í(dept_Name)À» Ãß°¡ÇÏ´Â °ÍÀ» º¸ÀÌ°í ÀÖ´Ù.

# db_client

>> ÀÚ·áÃß°¡ ¹× Á¶È¸ ¸Þ´º

1. ÀÚ·áÃß°¡

2. ÀÚ·áÁ¶È¸

>> ¸Þ´º ¼±Åà : 1

>> Ãß°¡ÇÒ ºÎ¼­ ID : 01

>> ºÎ¼­¸í : Ãѹ«°ú

¢º ¾Æ·¡´Â ¸Þ´º 2¸¦ ¼±ÅÃÇÏ°í ºÎ¼­ ID°¡ 01ÀÎ ºÎ¼­¸íÀ» Á¶È¸ÇÏ´Â °ÍÀ» º¸ÀÌ°í ÀÖ´Ù.

>> ÀÚ·áÃß°¡ ¹× Á¶È¸ ¸Þ´º

1. ÀÚ·áÃß°¡

2. ÀÚ·áÁ¶È¸

>> ¸Þ´º ¼±Åà : 2

>> Á¶È¸ÇÒ ºÎ¼­ ID : 01

==> Á¶È¸ °á°ú : Ãѹ«°ú

4.6.4 ¼­¹ö ÇÁ·Î±×·¥ ÁÖ¿äºÎºÐ ¼³¸í

¢º ¸ÕÀú db_server.ec¿¡¼­ »ç¿ëÇÒ Çì´õ ÆÄÀÏÀ» ¼±¾ðÇØ¾ß ÇÑ´Ù.

¢º ESQL/C ÇÁ·Î±×·¥¿¡¼­´Â SQL ¹®ÀÌ ½ÇÇàµÈ µÚ °á°ú Äڵ尡 Ç×»ó Àü¿ªº¯¼ö sqlca¿¡ ÀúÀåµÇ¸ç ÀÌ º¯¼ö¸¦ »ç¿ëÇϱâ À§ÇÏ¿©´Â Çì´õ ÆÄÀÏ sqlca.h¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù.

¢º sqlca.h¿Ü¿¡ sqlda.h, sqltypes.h µîÀÇ Çì´õ ÆÄÀÏÀ» Æ÷ÇÔÇÒ ¼ö Àִµ¥ sqlda.h¿¡´Â µ¿ÀûÀ¸·Î Á¤ÀÇµÈ SQL ¹®À» ½ÇÇàÇϱâ À§ÇÑ ±¸Á¶Ã¼°¡ Á¤ÀǵǾî ÀÖ´Ù.

¢º sqltypes.h¿¡´Â SQL Ä®·³ÀÇ Á¾·ù°¡ Á¤ÀǵǾî ÀÖ´Ù.

¢º ÇÑÆí SQL °ü·Ã Çì´õ ÆÄÀÏÀº ¾Æ·¡¿Í °°ÀÌ #include ¹®ÀÌ ¾Æ´Ñ $include ¹®À» »ç¿ëÇØ¾ß ÇÑ´Ù.

$include sqlca.h;

¢ºÅ¬¶óÀ̾ðÆ®´Â DB ¾×¼¼½º¸¦ ÇÒ ¶§¸¶´Ù '¸Þ´º¹øÈ£\nºÎ¼­ID\ºÎ¼­¸í\n'ÀÇ ÇüÅ·Π±¸¼ºµÈ ¸Þ½ÃÁö¸¦ ¼­¹ö·Î º¸³»µµ·Ï ÇÏ¿´´Ù.

¢º¸Þ´º¹øÈ£´Â 1À̸é ÀÚ·áÃß°¡ÀÌ°í 2À̸é ÀÚ·áÁ¶È¸¸¦ ³ªÅ¸³½´Ù.

¢º ¼­¹ö´Â ¸ÕÀú Ŭ¶óÀ̾ðÆ®°¡ ¾î¶² ¸Þ´º¸¦ ¼±ÅÃÇß´ÂÁö¸¦ ¾Ë¾Æ³»¾ß Çϴµ¥ À̸¦ À§Çؼ­ »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö readline()À» »ç¿ëÇÑ´Ù.

¢º readline()Àº ¼ÒÄÏ¿¡ µµÂøÇÑ µ¥ÀÌÅ͸¦ ÁöÁ¤ÇÑ Å©±â¸¸Å­ Àд ÇÔ¼öÀε¥ ¿¹¸¦µé¾î ¼ÒÄϹøÈ£ s¸¦ ÅëÇؼ­ ÀÔ·ÂµÈ µ¥ÀÌÅÍÀÇ ¾Õ¿¡¼­ºÎÅÍ ¼¼ ¹ÙÀÌÆ®(Áï, ¸Þ´º¹øÈ£\n)¸¦ Àоî menu¶ó´Â º¯¼ö¿¡ ÀúÀåÇÏ·Á¸é ¾Æ·¡¿Í °°ÀÌ ÇÑ´Ù(¸Þ´º¹øÈ£´Â ÇÑ ÀÚ¸® ¼ö¶ó°í °¡Á¤).

¢º ÇÑÆí readline()Àº user_func.h¿¡ Á¤ÀǵǾî ÀÖ´Ù.

n = readline(s, menu, 3);

¢º °°Àº ¹æ¹ýÀ¸·Î dept_ID¿Í dept_NameÀ» readline()À» ÀÌ¿ëÇÏ¿© Àд´Ù.

¢º¿¹¸¦µé¾î Ŭ¶óÀ̾ðÆ®°¡ ¸Þ´º 1) ÀÚ·áÃß°¡¸¦ ¼±ÅÃÇÑ °æ¿ì ¼­¹ö´Â ¾Æ·¡¿Í °°ÀÌ Ãß°¡ÇÒ ÀڷḦ ÀÐÀº ÈÄ insert¸¦ ½ÇÇàÇÑ´Ù.

¢º ¸Þ´º 2) ÀÚ·áÁ¶È¸¸¦ ¼±ÅÃÇÑ °æ¿ì¿¡´Â select¸¦ »ç¿ëÇÏ¿© DEPT DB¿¡¼­ dept_ID°¡ idÀÎ ºÎ¼­¸¦ Á¶È¸ÇÏ¿© ÇØ´ç ºÎ¼­¸í(dept_Name)À» º¯¼ö name¿¡ ÀúÀåÇÑ´Ù.

switch((int)menu[0] - '0') {

/*------------------------------------------ ÀÚ·á Ãß°¡ ¿ä±¸ ------------------------------------------*/

case 1:

/* ºÎ¼­¸í Àбâ */

n = readline(s, name, NAME_LEN+2);

name[n-1] = '\0';

/* SQL ¹® ¼öÇà */

$insert into DEPT values (:id, :name);

/*------------------------------------------- ÀÚ·á Á¶È¸ ¿ä±¸ ----------------------------------------*/

case 2:

/* SQL ¹® ¼öÇà */

$select dept_Name into :name from DEPT where dept_ID = :id ;

¢º ¸Þ´º¿¡ µû¸¥ 󸮰¡ ³¡³µÀ¸¸é ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô SQL ¹®ÀÇ ½ÇÇà°á°ú¸¦ ¾Ë·ÁÁÖ±â À§ÇÏ¿© Ŭ¶óÀ̾ðÆ®¿¡°Ô Àü¼ÛÇÒ ¸ðµç ¸Þ½ÃÁö¸¦ ¹®ÀÚ ½ºÆ®¸µ º¯¼öÀÎ msg¿¡ ÀúÀåÇÏ¿© À̸¦ Ŭ¶óÀ̾ðÆ®·Î Àü¼ÛÇÑ´Ù.

¢º SQL ¹® ó¸®Áß ¿À·ù°¡ ¹ß»ýÇÑ °æ¿ì´Â msg¿¡ ¿À·ù ¸Þ½ÃÁö¸¦ ½Ç¾î Àü¼ÛÇÑ´Ù.

¢º db_server.ec ÇÁ·Î±×·¥ ¸®½ºÆ®

4.6.5 Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ ÁÖ¿äºÎºÐ ¼³¸í

¢º Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ db_client.c¿¡¼­´Â ¸ÕÀú È­¸é¿¡ ¸Þ´º¸¦ º¸¿©ÁÖ°í ¸Þ´º¸¦ ¼±ÅÃÇϵµ·Ï ÇÏ´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö printMenu()¸¦ È£ÃâÇÑ´Ù.

¢º ¼±ÅÃÇÑ ¸Þ´º°ªÀ» »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö getMenu() ÇÔ¼ö¸¦ ÅëÇØ ÀԷ¹޴µ¥ ±× °ªÀÌ À¯È¿ÇÑ °æ¿ì¿¡´Â ÇØ´ç ¸Þ´º ¹øÈ£¸¦ ¸®ÅÏÇÏ°í, À¯È¿ÇÏÁö ¾ÊÀº °æ¿ì¿¡´Â 0À» ¸®ÅÏÇÑ´Ù.

¢º printMenu()¿Í getMenu()´Â ¾Æ·¡¿Í °°´Ù.

¢º ¿©±â¼­ gets()´Â Å°º¸µå·ÎºÎÅÍ ÇÑ ÇàÀÇ ¹®ÀÚ¿­À» ÀԷ¹޴ ÇÔ¼öÀÌ´Ù.

void printMenu(void) {

printf("\n >> ÀÚ·áÃß°¡ ¹× Á¶È¸ ¸Þ´º\n");

printf("\t1. ÀÚ·áÃß°¡\n");

printf("\t2. ÀÚ·áÁ¶È¸\n");

printf("\n >> ¸Þ´º ¼±Åà : ");

}

int getMenu(void) {

char tmp[2];

gets(tmp);

tmp[1] = '\0';

if (tmp[0] != '1' && tmp[0] != '2' ) return 0;

else return (int)(tmp[0] - '0');

}

¢º »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ¸Þ´º Á¾·ù¿¡ µû¶ó ÇÊ¿äÇÑ ÀڷḦ Ãß°¡·Î ÀԷ¹޴´Ù.

¢º 1) ÀÚ·áÃß°¡¸¦ ¼±ÅÃÇÑ °æ¿ì¿¡´Â Ãß°¡ÇÒ ºÎ¼­ÀÇ ID¿Í ºÎ¼­¸íÀ» ÀԷ¹ްí 2) ÀÚ·áÁ¶È¸¸¦ ¼±ÅÃÇÑ °æ¿ì¿¡´Â Á¶È¸ÇÒ ºÎ¼­ÀÇ ID¸¦ ÀԷ¹޴´Ù.

case 1:

/* ÀÚ·áÃß°¡¸¦ À§ÇØ ºÎ¼­ID¿Í À̸§À» ÀԷ¹޴´٠*/

printf("\n >> Ãß°¡ÇÒ ºÎ¼­ ID : ");

gets(dept_ID);

printf("\n >> ºÎ¼­¸í : ");

gets(dept_Name);

case 2:

/* Á¶È¸ÇÒ ºÎ¼­ ID ÀÔ·Â */

printf("\n >> Á¶È¸ÇÒ ºÎ¼­ ID : ");

gets(dept_ID);

¢º ¾Æ·¡´Â »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ ¸í·É¹®À» ¹®ÀÚ¿­·Î ¸¸µé°í À̸¦ ¼­¹ö·Î Àü¼ÛÇÏ´Â ºÎºÐÀÌ´Ù.

sprintf(msg, "%d\n%s\n%s\n", menu, dept_ID, dept_Name);

msgLen = strlen(msg);

send(s, msg, msgLen, 0) != msgLen);

¢º ¾Æ·¡´Â 2) ÀÚ·áÁ¶È¸ ¸Þ´º¸¦ ¼±ÅÃÇÑ °æ¿ì¿¡ ¼­¹ö°¡ º¸³»¿Â Á¶È¸°á°ú¸¦ recv()¸¦ ÀÌ¿ëÇÏ¿© ¼ö½ÅÇÏ°í À̸¦ È­¸é¿¡ Ãâ·ÂÇÏ´Â ºÎºÐÀÌ´Ù.

recv(s, msg, MSG_LEN+1, 0);

printf("\tÁ¶È¸ °á°ú : %s\n\n", msg);

¢º db_client.c ÇÁ·Î±×·¥ ¸®½ºÆ®


ÇöÀç°­Á : UNIX ¼ÒÄÏ ÀÀ¿ë ÇÁ·Î±×·¡¹Ö ÀÌÀü 4.5 ¼ÒÄÏ ÇÔ¼ö 󸮽ð£ ÃøÁ¤