ÀÀ¿ëÇÁ·Î±×·¥ °³¹ß ¾È³»¼­

±¸Á¶È­ À¯Çü °³¿ä

±¸Á¶È­ À¯ÇüÀº ¼Ó¼ºÀ¸·Î Àß Á¤ÀÇµÈ ±¸Á¶°¡ µé¾î ÀÖ´Â ¿ÀºêÁ§Æ®¸¦ ¸ðµ¨È­ÇÒ ¶§ À¯¿ëÇÕ´Ï´Ù. ¼Ó¼ºÀº À¯ÇüÀÇ ÀνºÅϽº¸¦ ¼³¸íÇϴ Ư¼ºÀÔ´Ï´Ù. ¿¹¸¦ µé¾î, ±âÇÏÇÐÀû ¸ð¾çÀº µ¥Ä«¸£Æ®½Ä ÁÂÇ¥ ¸ñ·ÏÀ» ±× ¼Ó¼ºÀ¸·Î °¡Áö°í ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. »ç¶÷Àº À̸§, ÁÖ¼Ò µîÀÇ ¼Ó¼ºÀÌ ÀÖ½À´Ï´Ù. ºÎ¼­¿¡´Â À̸§ ¶Ç´Â ´Ù¸¥ Á¾·ùÀÇ ID°¡ ÀÖ½À´Ï´Ù.

À¯ÇüÀ» ÀÛ¼ºÇÏ·Á¸é À¯ÇüÀÇ À̸§, ±× ¼Ó¼º À̸§ ±×¸®°í µ¥ÀÌÅÍ À¯ÇüÀ» ÁöÁ¤Çϰí, ¼±ÅÃÀûÀ¸·Î ÀÌ À¯ÇüÀÇ ÂüÁ¶ À¯ÇüÀ» ½Ã½ºÅÛ¿¡¼­ Ç¥ÇöÇÏ´Â ¹æ¹ýÀ» ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù. ¿©±â¿¡ BusinessUnit_t À¯ÇüÀ» ÀÛ¼ºÇÏ´Â SQLÀÌ ÀÖ½À´Ï´Ù.

   CREATE TYPE BusinessUnit_t AS
     (Name VARCHAR(20),
     Headcount INT)
     REF USING INT
     MODE DB2SQL;

ASÀýÀº À¯Çü¿¡ ¿¬°üµÈ ¼Ó¼º Á¤ÀǸ¦ Á¦°øÇÕ´Ï´Ù. BusinessUnit_t´Â Name°ú HeadcountÀÇ µÎ ¼Ó¼ºÀÌ ÀÖ´Â À¯ÇüÀÔ´Ï´Ù. ±¸Á¶È­ À¯ÇüÀ» ÀÛ¼ºÇÏ·Á¸é CREATE TYPE¹®¿¡ MODE DB2SQLÀýÀ» Æ÷ÇÔ½ÃÄÑ¾ß ÇÕ´Ï´Ù. REF USINGÀý »ç¿ë¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ÂüÁ¶ À¯Çü ¹× ±× Ç¥Çö À¯ÇüÀ» ÂüÁ¶ÇϽʽÿÀ.

±¸Á¶È­ À¯ÇüÀº ÀüÇüÀûÀÎ °ü°è µ¥ÀÌÅÍ À¯ÇüÀ» ´É°¡ÇÏ´Â µÎ °¡Áö ÁÖ¿ä È®ÀåÀ» Á¦°øÇÕ´Ï´Ù. °è½ÂÀÌ Æ¯¼º°ú ±¸Á¶È­ À¯ÇüÀÇ ÀνºÅϽº¸¦ Å×À̺íÀÇ ÇàÀ¸·Î ¶Ç´Â Ä÷³ÀÇ °ªÀ¸·Î ÀúÀåÇÏ´Â ±â´ÉÀÌ ±×°ÍÀÔ´Ï´Ù. ´ÙÀ½ Àý¿¡¼­ ÀÌ·± ±â´ÉÀ» °£´ÜÇÏ°Ô ¼³¸íÇÕ´Ï´Ù.

°è½Â
ÀüÇüÀûÀÎ °ü°è Å×À̺í°ú Ä÷³À» »ç¿ëÇÏ´Â »ç¶÷°ú °°Àº ¿ÀºêÁ§Æ®¸¦ ¸ðµ¨È­ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª, ±¸Á¶È­ À¯ÇüÀº °è½ÂÀ̶ó´Â Ãß°¡ Ư¼ºÀ» Á¦°øÇÕ´Ï´Ù. Áï, ±¸Á¶È­ À¯Çü¿¡´Â ±× ¼Ó¼ºÀ» ÀüºÎ ´Ù½Ã »ç¿ëÇÏ°í ºÎ¼Ó À¯Çü¿¡ °íÀ¯ÇÑ Ãß°¡ ¼Ó¼ºÀÌ µé¾î ÀÖ´Â ºÎ¼Ó À¯ÇüÀÌ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ±¸Á¶È­ À¯Çü Person_t¿¡´Â Name, Age ¹× Address¿¡ ´ëÇÑ ¼Ó¼ºÀÌ ÀÖ½À´Ï´Ù. Person_tÀÇ ºÎ¼Ó À¯ÇüÀº Name, Age, AddressÀÇ ¸ðµç ¼Ó¼º°ú SerialNum, Salary, BusinessUnitÀÇ Ãß°¡ ¼Ó¼ºÀÌ µé¾î ÀÖ´Â Employee_tÀÔ´Ï´Ù.

±×¸² 7. ±¸Á¶È­ À¯Çü Employee_t´Â Person_t¿¡¼­ °è½ÂÇÕ´Ï´Ù.


±¸Á¶È­ À¯Çü Employee_t´Â Person_t¿¡¼­ °è½ÂÇÕ´Ï´Ù.

±¸Á¶È­ À¯ÇüÀÇ ÀνºÅϽº ÀúÀå
±¸Á¶È­ À¯Çü ÀνºÅϽº´Â ´ÙÀ½°ú °°Àº µÎ °¡Áö ¹æ¹ýÀ¸·Î µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåµÉ ¼ö ÀÖ½À´Ï´Ù.

±¸Á¶È­ À¯Çü °èÃþ ÀÛ¼º

±¸Á¶È­ À¯ÇüÀº »õ·Î ÀÛ¼ºµÈ À¯ÇüÀÌ ¿ø·¡ ±¸Á¶ À¯ÇüÀÇ ºÎ¼Ó À¯ÇüÀÎ ´Ù¸¥ ±¸Á¶È­ À¯ÇüÇÏ¿¡¼­ ÀÛ¼ºµÉ ¼ö ÀÖ½À´Ï´Ù. ¿ø·¡ À¯ÇüÀº »óÀ§ À¯ÇüÀÔ´Ï´Ù. ºÎ¼Ó À¯ÇüÀº »óÀ§ À¯ÇüÀÇ ¸ðµç ¼Ó¼ºÀ» °è½ÂÇÏ°í ¼±ÅÃÀûÀ¸·Î ÀÚü Ãß°¡ ¼Ó¼ºÀ» °¡Áú ¼öµµ ÀÖ½À´Ï´Ù.

¿¹¸¦ µé¾î, µ¥ÀÌÅÍ ¸ðµ¨Àº °ü¸®ÀÚ¶ó´Â Á÷¿øÀÇ Æ¯¼ö À¯ÇüÀ» ³ªÅ¸³»¾ß ÇÕ´Ï´Ù. °ü¸®ÀÚ¿¡°Ô´Â °ü¸®ÀÚ°¡ ¾Æ´Ñ Á÷¿øº¸´Ù ´õ ¸¹Àº ¼Ó¼ºÀÌ ÀÖ½À´Ï´Ù. Manager_t À¯ÇüÀº Á÷¿ø¿¡ ´ëÇØ Á¤ÀÇµÈ ¼Ó¼ºÀ» °è½ÂÇÏÁö¸¸, ÀÌ´Â °ü¸®ÀÚ¿¡°Ô¸¸ Àû¿ëÇÒ ¼ö Àִ Ưº° º¸³Ê½º¿Í °°Àº ÀÚü Ãß°¡ ¼Ó¼º°ú ÇÔ²² Á¤ÀǵDZ⵵ ÇÕ´Ï´Ù. ÀÌ Ã¥ÀÇ ¿¹¿¡¼­ »ç¿ëµÇ´Â À¯Çü °èÃþÀº ±×¸² 8¿¡ ÀÖ½À´Ï´Ù. Address_tÀÇ À¯Çü °èÃþÀº Ä÷³¿¡ ±¸Á¶È­ À¯Çü ÀνºÅϽº »ðÀÔ¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù.

±×¸² 8. À¯Çü °èÃþ (BusinessUnit_t ¹× Person_t)


À¯Çü °èÃþ (BusinessUnit_t ¹× Person_t)

±×¸² 8¿¡¼­ »ç¶÷ À¯Çü Person_t´Â °èÃþÀÇ ·çÆ® À¯ÇüÀÔ´Ï´Ù. Person_t´Â ¶ÇÇÑ ±× ¹Ø¿¡ ÀÖ´Â À¯ÇüÀÇ »óÀ§ À¯ÇüÀε¥, ÀÌ °æ¿ì Employee_t·Î ¸í¸íµÈ À¯Çü°ú Student_t·Î ¸í¸íµÈ À¯ÇüÀÔ´Ï´Ù. ºÎ¼Ó À¯Çü°ú »óÀ§ À¯Çü°£ÀÇ °ü°è´Â º¯ÇÕ´Ï´Ù. ´Ù½Ã ¸»Çؼ­ ºÎ¼Ó À¯Çü°ú »óÀ§ À¯Çü°£ÀÇ °ü°è´Â Àüü À¯Çü °èÃþ Àü¹Ý¿¡ °ÉÃÄ Á¸ÀçÇÕ´Ï´Ù. ±×·¯¹Ç·Î Person_t´Â Manager_t¿Í Architect_t À¯ÇüÀÇ »óÀ§ À¯ÇüÀ̱⵵ ÇÕ´Ï´Ù.

±¸Á¶È­ À¯Çü °³¿ä¿¡¼­ Á¤ÀÇµÈ À¯Çü BusinessUnit_t¿¡´Â ºÎ¼Ó À¯ÇüÀÌ ¾ø½À´Ï´Ù. Ä÷³¿¡ ±¸Á¶È­ À¯Çü ÀνºÅϽº »ðÀÔ¿¡¼­ Á¤ÀÇµÈ À¯Çü Address_t¿¡´Â Germany_addr_t, Brazil_addr_t, US_addr_tÀÇ ºÎ¼Ó À¯ÇüÀÌ ÀÖ½À´Ï´Ù.

À¯Çü Person_t¿¡ ´ëÇÑ CREATE TYPE¹®Àº Person_t¸¦ INSTANTIABLE·Î ¼±¾ðÇÕ´Ï´Ù. INSTANTIABLE ¶Ç´Â NOT INSTANTIABLEFÀýÀ» »ç¿ëÇÏ¿© ±¸Á¶È­ À¯ÇüÀ» ¼±¾ðÇÏ´Â °Í¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ±¸Á¶È­ À¯ÇüÀÇ Ãß°¡ Ư¼ºÀ» ÂüÁ¶ÇϽʽÿÀ.

´ÙÀ½ SQL¹®Àº Person_t À¯Çü °èÃþÀ» ÀÛ¼ºÇÕ´Ï´Ù.

   CREATE TYPE Person_t AS
      (Name VARCHAR(20),
      Age INT,
      Address Address_t)
      INSTANTIABLE
      REF USING VARCHAR(13) FOR BIT DATA
      MODE DB2SQL;
 
   CREATE TYPE Employee_t UNDER Person_t AS
      (SerialNum INT,
      Salary DECIMAL (9,2),
      Dept REF(BusinessUnit_t))
      MODE DB2SQL;
 
   CREATE TYPE Student_t UNDER Person_t AS
      (SerialNum CHAR(6),
      GPA DOUBLE)
      MODE DB2SQL;
 
   CREATE TYPE Manager_t UNDER Employee_t AS
      (Bonus DECIMAL (7,2))
      MODE DB2SQL;
 
   CREATE TYPE Architect_t UNDER Employee_t AS
      (StockOption INTEGER)
      MODE DB2SQL;

Person_t¿¡´Â Name, Age, AddressÀÇ ¼¼ °¡Áö ¼Ó¼ºÀÌ ÀÖ½À´Ï´Ù. ÀÌ ¼Ó¼ºÀÇ ºÎ¼Ó À¯ÇüÀÎ Employee_t¿Í Student_t´Â °¢°¢ Person_tÀÇ ¼Ó¼ºÀ» °è½ÂÇϰí, ƯÁ¤ À¯Çü¿¡ °íÀ¯ÇÑ ¿©·¯ °³ÀÇ Ãß°¡ ¼Ó¼ºÀÌ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, Á÷¿ø ¹× Çлý¿¡°Ô ÀÏ·Ã ¹øÈ£°¡ ÀÖ´õ¶óµµ, Çлý ÀÏ·Ã ¹øÈ£¿¡ »ç¿ëµÇ´Â Çü½ÄÀº Á÷¿ø ÀÏ·Ã ¹øÈ£¿¡ »ç¿ëµÇ´Â Çü½Ä°ú ´Ù¸¨´Ï´Ù.
ÁÖ:Person_t À¯Çü¿¡¼­ ÀÛ¼ºµÈ À¯ÇüÈ­ Å×ÀÌºí¿¡´Â ±¸Á¶È­ À¯Çü Address_tÀÇ Address Ä÷³ÀÌ ÀÖ½À´Ï´Ù. ¸ðµç ±¸Á¶È­ À¯Çü Ä÷³Àº ±× Ä÷³ÀÇ ±¸Á¶È­ À¯Çü¿¡ ´ëÇØ º¯È¯ ÇÔ¼ö¸¦ Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù. º¯È¯ ÇÔ¼ö Á¤ÀÇ¿¡ ´ëÇÑ ³»¿ëÀº È£½ºÆ® ¾ð¾î ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¸ÊÇÎ ÀÛ¼º: º¯È¯ ÇÔ¼ö¸¦ ÂüÁ¶ÇϽʽÿÀ.

°á±¹ Manager_t¿Í Architect_t´Â µÑ´Ù Employee_tÀÇ ºÎ¼Ó À¯ÇüÀÔ´Ï´Ù. ÀÌ´Â Employee_tÀÇ ¸ðµç ¼Ó¼ºÀ» °è½ÂÇÏ°í ±× À¯Çü¿¡ ¸Âµµ·Ï È®ÀåÇÕ´Ï´Ù. ±×·¯¹Ç·Î, À¯Çü Manager_tÀÇ ÀνºÅϽº¿¡´Â Name, Age, Address, SerialNum, Salary, Dept Bonus µîÀÇ 7°¡Áö ¼Ó¼ºÀÌ ÀÖ½À´Ï´Ù.

ÂüÁ¶ À¯Çü ¹× ±× Ç¥Çö À¯Çü

ÀÛ¼ºÇÑ ¸ðµç ±¸Á¶È­ À¯Çü¿¡ ´ëÇØ DB2´Â ÀÚµ¿À¸·Î µ¿¹Ý À¯ÇüÀ» ÀÛ¼ºÇÕ´Ï´Ù. µ¿¹Ý À¯ÇüÀº ÂüÁ¶ À¯ÇüÀ̶ó°í Çϸç, ÂüÁ¶ÇÏ´Â ±¸Á¶È­ À¯ÇüÀº ÂüÁ¶µÈ À¯ÇüÀ̶ó°í ÇÕ´Ï´Ù. À¯ÇüÈ­ Å×À̺íÀº À¯ÇüÈ­ Å×ÀÌºí¿¡¼­ÀÇ ±¸Á¶È­ À¯Çü »ç¿ë¿¡ ¼³¸íµÈ ´ë·Î ÂüÁ¶ À¯ÇüÀ» Ưº°ÇÑ ¿ëµµ·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÕ´Ï´Ù. SQL¹®¿¡¼­ ´Ù¸¥ »ç¿ëÀÚ Á¤ÀÇ À¯Çü°ú °°ÀÌ ÂüÁ¶ À¯ÇüÀ» »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. SQl¹®¿¡¼­ ÂüÁ¶ À¯ÇüÀ» »ç¿ëÇÏ·Á¸é REF(type-name)À» »ç¿ëÇϽʽÿÀ. ¿©±â¼­ type-nameÀº ÂüÁ¶µÈ À¯ÇüÀ» ³ªÅ¸³À´Ï´Ù.

DB2´Â ÂüÁ¶ À¯ÇüÀ» À¯ÇüÈ­ Å×ÀÌºí¿¡ ÀÖ´Â ¿ÀºêÁ§Æ® ½Äº°ÀÚ Ä÷³ÀÇ À¯ÇüÀ¸·Î »ç¿ëÇÕ´Ï´Ù. ¿ÀºêÁ§Æ® ½Äº°ÀÚ´Â À¯ÇüÈ­ Å×ÀÌºí °èÃþ¿¡ ÀÖ´Â Çà ¿ÀºêÁ§Æ®¸¦ °íÀ¯ÇÏ°Ô ½Äº°ÇÕ´Ï´Ù. DB2´Â ¶ÇÇÑ ÂüÁ¶ À¯ÇüÀ» »ç¿ëÇÏ¿© ÂüÁ¶¸¦ À¯ÇüÈ­ Å×ÀÌºí¿¡ ÀÖ´Â Çà¿¡ ÀúÀåÇÕ´Ï´Ù. ÂüÁ¶ À¯ÇüÀ» »ç¿ëÇÏ¿© Å×ÀÌºí¿¡ ÀÖ´Â °¢ ¿ÀºêÁ§Æ®¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÂüÁ¶ »ç¿ë¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ÂüÁ¶ À¯Çü »ç¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. À¯ÇüÈ­ Å×ÀÌºí¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº À¯ÇüÈ­ Å×ÀÌºí¿¡¼­ÀÇ ¿ÀºêÁ§Æ® ÀúÀåÀ» ÂüÁ¶ÇϽʽÿÀ.

ÂüÁ¶´Â ¸í¹éÇÏ°Ô À¯Çü ÁöÁ¤µË´Ï´Ù. ±×·¯¹Ç·Î Ç¥Çö½Ä¿¡¼­ À¯ÇüÀ» »ç¿ëÇÒ ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù. À¯Çü °èÃþÀÇ ·çÆ® À¯ÇüÀ» ÀÛ¼ºÇÒ ¶§ CREATE TYPE¹®ÀÇ REF USINGÀýÀ» »ç¿ëÇÏ¿© ÂüÁ¶ÀÇ ±âº» À¯ÇüÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÂüÁ¶ ±âº» À¯ÇüÀº Ç¥Çö À¯ÇüÀ̶ó°í ÇÕ´Ï´Ù. REF USINGÀýÀ» »ç¿ëÇÏ¿© Ç¥Çö À¯ÇüÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é, DB2´Â VARCHAR(16) FOR BIT DATAÀÇ ±âº» µ¥ÀÌÅÍ À¯ÇüÀ» »ç¿ëÇÕ´Ï´Ù. ·çÆ® À¯ÇüÀÇ Ç¥Çö À¯ÇüÀº ±× ¸ðµç ºÎ¼Ó À¯Çü¿¡¼­ °è½ÂµË´Ï´Ù. REF USINGÀýÀº °èÃþÀÇ ·çÆ® À¯ÇüÀ» Á¤ÀÇÇÒ ¶§¸¸ À¯È¿ÇÕ´Ï´Ù. ÀÌ Àý Àü¹Ý¿¡ °ÉÃÄ »ç¿ëµÈ ¿¹¿¡¼­ BusinessUnit_t À¯ÇüÀÇ Ç¥Çö À¯ÇüÀº INTEGERÀÎ ¹Ý¸é Person_tÀÇ Ç¥Çö À¯ÇüÀ» VARCHAR(13)ÀÔ´Ï´Ù.

ÂüÁ¶ À¯Çü À¯Çüº¯È¯ ¹× ºñ±³

DB2´Â ¾çÂÊ µð·ºÅ丮¿¡¼­ ÂüÁ¶ À¯Çü°ú ±× Ç¥Çö À¯Çü °£¿¡ °ªÀ» À¯Çüº¯È¯ÇÏ´Â ÇÔ¼ö¸¦ ÀÚµ¿À¸·Î ÀÛ¼ºÇÕ´Ï´Ù. CREATE TYPE¹®¿¡´Â SQL ÂüÁ¶¼­¿¡¼­ ¼³¸íµÈ ´ë·Î ÀÌ·± µÎ À¯Çüº¯È¯ ÇÔ¼öÀÇ À̸§À» ¼±ÅÃÇÒ ¼ö ÀÖ°Ô ÇÏ´Â ¼±ÅÃÀû CAST WITHÀýÀÌ ÀÖ½À´Ï´Ù. ±âº»ÀûÀ¸·Î, À¯Çüº¯È¯ ÇÔ¼öÀÇ À̸§Àº ±¸Á¶È­ À¯Çü°ú ±× ÂüÁ¶ Ç¥Çö À¯ÇüÀÇ À̸§°ú °°½À´Ï´Ù. ¿¹¸¦ µé¾î, ±¸Á¶È­ À¯Çü °èÃþ ÀÛ¼ºÀÇ CREATE TYPE Person_t¹®Àº ´ÙÀ½ ÇÔ¼ö¸¦ ÀÚµ¿À¸·Î ÀÛ¼ºÇÕ´Ï´Ù.

   CREATE FUNCTION VARCHAR(REF(Person_t))
      RETURNS VARCHAR

DB2´Â Á¶ÀÛÀ» ¹ÝÀü½ÃŰ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇϱ⵵ ÇÕ´Ï´Ù.

   CREATE FUNCTION Person_t(VARCHAR(13))
      RETURNS REF(Person_t)

»õ °ªÀ» À¯ÇüÈ­ Å×ÀÌºí¿¡ »ðÀÔÇϰųª ÂüÁ¶ °ªÀ» ´Ù¸¥ °ª°ú ºñ±³ÇÒ ¶§¸¶´Ù ÀÌ À¯Çüº¯È¯ ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.

DB2´Â ¶ÇÇÑ =, <>, <, <=, > ±×¸®°í >=°ú °°Àº ºñ±³ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© ÂüÁ¶ À¯ÇüÀ» ºñ±³ÇÏ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ÂüÁ¶ À¯ÇüÀÇ ºñ±³ ¿¬»êÀÚ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â SQL ÂüÁ¶¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.

±âŸ ½Ã½ºÅÛ-»ý¼º ·çƾ

ÀÛ¼ºÇÏ´Â ¸ðµç ±¸Á¶È­ À¯ÇüÀº DB2¿¡¼­ ±¸Á¶È­ À¯Çü °ªÀ» ±¸¼º, °üÂû ¶Ç´Â ¼öÁ¤ÇÒ ¶§ »ç¿ëÇÏ´Â ÇÔ¼ö ¹× ¸Þ¼Òµå ¼¼Æ®¸¦ ¾Ï½ÃÀûÀ¸·Î ÀÛ¼ºÇÏ°Ô ÇÕ´Ï´Ù. Áï, ¿¹¸¦ µé¾î Person_t À¯Çü¿¡ ´ëÇØ DB2´Â À¯ÇüÀ» ÀÛ¼ºÇÒ ¶§ ´ÙÀ½ ÇÔ¼ö¿Í ¸Þ¼Òµå¸¦ ÀÚµ¿À¸·Î ÀÛ¼ºÇÕ´Ï´Ù.

±¸¼ºÀÚ ÇÔ¼ö
À¯Çü°ú °°Àº À̸§ÀÇ ÇÔ¼ö°¡ ÀÛ¼ºµË´Ï´Ù. ÀÌ ÇÔ¼ö¿¡´Â ¸Å°³º¯¼ö°¡ ¾øÀ¸¸ç ±× ¸ðµç ¼Ó¼ºÀÌ ³Î(NULL)·Î ¼³Á¤µÈ À¯ÇüÀÇ ÀνºÅϽº¸¦ ¸®ÅÏÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, Person_t¿¡ ´ëÇØ ÀÛ¼ºµÈ ÇÔ¼ö´Â ´ÙÀ½ ¸í·É¹®ÀÌ ½ÇÇàµÈ °Í°ú °°½À´Ï´Ù.

   CREATE FUNCTION Person_t ( ) RETURNS Person_t

Manager_t ºÎ¼Ó À¯Çü¿¡ ´ëÇØ ±¸¼ºÀÚ ÇÔ¼ö´Â ´ÙÀ½ ¸í·É¹®ÀÌ ½ÇÇàµÈ °Íó·³ ÀÛ¼ºµË´Ï´Ù.

   CREATE FUNCTION Manager_t ( ) RETURNS Manager_t

Ä÷³¿¡ »ðÀÔÇÒ À¯ÇüÀÇ ÀνºÅϽº¸¦ ±¸¼ºÇÏ·Á¸é º¯È¯ ¸Þ¼Òµå¿Í ÇÔ²² ±¸¼ºÀÚ ÇÔ¼ö¸¦ »ç¿ëÇϽʽÿÀ. À¯ÇüÀÌ Ä÷³ ´ë½Å Å×ÀÌºí¿¡ ÀúÀåµÇ¸é ±¸¼ºÀÚ ÇÔ¼ö¸¦ º¯È¯ ¸Þ¼Òµå¿¡¼­ »ç¿ëÇÏ¿© À¯ÇüÀÇ ÀνºÅϽº¸¦ »ðÀÔÇÏÁö ¾Ê¾Æµµ µË´Ï´Ù. µ¥ÀÌÅ͸¦ À¯ÇüÈ­ Å×ÀÌºí¿¡ »ðÀÔÇÏ´Â °Í¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ±¸Á¶È­ À¯Çü °ªÀÌ ÀÖ´Â Çà »ðÀÔÀ» ÂüÁ¶ÇϽʽÿÀ.

º¯È¯ ¸Þ¼Òµå
º¯È¯ ¸Þ¼Òµå´Â ¿ÀºêÁ§Æ®ÀÇ ¼Ó¼º¸¶´Ù Á¸ÀçÇÕ´Ï´Ù. ¸Þ¼Òµå°¡ È£ÃâµÇ´Â À¯ÇüÀÇ ÀνºÅϽº´Â ¸Þ¼ÒµåÀÇ ÁÖÁ¦ ÀνºÅϽº¶ó°í ÇÕ´Ï´Ù. ÁÖÁ¦ ÀνºÅϽº¿¡¼­ È£ÃâµÈ º¯È¯ ¸Þ¼Òµå°¡ ¼Ó¼º¿¡ ´ëÇØ »õ °ªÀ» ¼ö½ÅÇÏ¸é ¸Þ¼Òµå´Â »õ °ªÀ¸·Î °»½ÅµÈ ¼Ó¼º°ú ÇÔ²² »õ ÀνºÅϽº¸¦ ¸®ÅÏÇÕ´Ï´Ù. ±×·¯¹Ç·Î, Person_t À¯Çü¿¡ ´ëÇØ DB2´Â name, age ±×¸®°í address ¼Ó¼º¸¶´Ù º¯È¯ ¸Þ¼Òµå¸¦ ÀÛ¼ºÇÕ´Ï´Ù.

¿¹¸¦ µé¾î, DB2°¡ age ¼Ó¼º¿¡ ´ëÇØ ÀÛ¼ºÇÏ´Â º¯È¯ ¸Þ¼Òµå´Â ¸¶Ä¡ ´ÙÀ½ ¸í·É¹®ÀÌ ½ÇÇàµÈ °Í°ú °°½À´Ï´Ù.

   ALTER TYPE Person_t
      ADD METHOD AGE(int)
      RETURNS Person_t;

¿ÀºêÁ§Æ® º¯È¯¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ±¸Á¶È­ À¯Çü °ªÀÇ °Ë»ö ¹× ¼öÁ¤À» ÂüÁ¶ÇϽʽÿÀ.

°üÂû ¸Þ¼Òµå
°üÂû ¸Þ¼Òµå´Â ¿ÀºêÁ§Æ®ÀÇ °¢ ¼Ó¼º¸¶´Ù Á¸ÀçÇÕ´Ï´Ù. ¼Ó¼º¿¡ ´ëÇÑ ¸Þ¼Òµå°¡ ¿¹»ó À¯ÇüÀ̳ª ºÎ¼Ó À¯ÇüÀÇ ¿ÀºêÁ§Æ®¸¦ ¼ö½ÅÇÏ¸é ¸Þ¼Òµå¸¦ ±× ¿ÀºêÁ§Æ®¿¡ ´ëÇØ ¼Ó¼ºÀÇ °ªÀ» ¸®ÅÏÇÕ´Ï´Ù.

¿¹¸¦ µé¾î, DB2°¡ Person_t À¯ÇüÀÇ age ¼Ó¼º¿¡ ´ëÇØ ÀÛ¼ºÇÏ´Â °üÂû ¸Þ¼Òµå´Â DB2¿¡¼­ ´ÙÀ½ ¸í·ÉÀ» ¹ßÇàÇÑ °Í°ú °°½À´Ï´Ù.

   ALTER TYPE Person_t
      ADD METHOD AGE()
      RETURNS INTEGER;

°üÂû ¸Þ¼Òµå »ç¿ë¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ±¸Á¶È­ À¯Çü °ªÀÇ °Ë»ö ¹× ¼öÁ¤À» ÂüÁ¶ÇϽʽÿÀ.

±¸Á¶È­ À¯Çü¿¡¼­ ¸Þ¼Òµå¸¦ È£ÃâÇÏ·Á¸é ¸Þ¼Òµå È£Ãâ ¿¬»êÀÚ '..'¸¦ »ç¿ëÇϽʽÿÀ. ¸Þ¼Òµå È£Ãâ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº SQL ÂüÁ¶¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.

À¯Çü µ¿ÀÛ Á¤ÀÇ

±¸Á¶È­ À¯ÇüÀÇ µ¿ÀÛÀ» Á¤ÀÇÇÏ·Á¸é »ç¿ëÀÚ Á¤ÀÇ ¸Þ¼Òµå¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ±¸º° À¯Çü¿¡ ´ëÇØ ¸Þ¼Òµå¸¦ ÀÛ¼ºÇÒ ¼ö ¾ø½À´Ï´Ù. ¸Þ¼Òµå ÀÛ¼ºÀº ·çƾÀ» ÀÛ¼ºÇÏ´Â °Í°ú ºñ½ÁÇÕ´Ï´Ù. ´Ü, ±× ¸Þ¼Òµå¸¦ ƯÈ÷ ÇÑ À¯Çü¿¡ ´ëÇØ ÀÛ¼ºµÇ¹Ç·Î ±× À¯Çü°ú µ¿ÀÛÀº ¹ÐÁ¢ÇÏ°Ô ÅëÇյǾî ÀÖ½À´Ï´Ù.

¸Þ¼Òµå ½ºÆåÀº CREATE METHOD¹®À» ¹ßÇàÇϱâ Àü¿¡ À¯Çü¿¡ ¿¬°üµÇ¾î ÀÖ¾î¾ß ÇÕ´Ï´Ù. ´ÙÀ½ ¸í·É¹®Àº calc_bonus¶ó°í ÇÏ´Â ¸Þ¼Òµå¿¡ ´ëÇÑ ¸Þ¼Òµå ½ºÆåÀ» Employee_t À¯Çü¿¡ Ãß°¡ÇÕ´Ï´Ù.

   ALTER TYPE Employee_t
      ADD METHOD calc_bonus (rate DOUBLE)
      RETURNS DECIMAL(7,2)
      LANGUAGE SQL
      CONTAINS SQL
      NO EXTERNAL ACTION
      DETERMINISTIC;

ÀÏ´Ü ¸Þ¼Òµå ½ºÆåÀ» À¯Çü¿¡ ¿¬°ü½ÃŰ¸é ¸Þ¼Òµå¸¦ ¸Å¼Òµå ½ºÆå¿¡ µû¶ó ¿ÜºÎ ¸Þ¼Òµå ¶Ç´Â SQL º»¹® ¸Þ¼Òµå·Î ÀÛ¼ºÇÏ¿© À¯ÇüÀÇ µ¿ÀÛÀ» Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ ¸í·É¹®Àº Employee_t À¯Çü°ú °°Àº ½ºÅ°¸¶¿¡ »óÁÖÇÏ´Â calc_bonus¶ó´Â SQL ¸Þ¼Òµå¸¦ µî·ÏÇÕ´Ï´Ù.

   CREATE METHOD calc_bonus (rate DOUBLE)
      FOR Employee_t
      RETURN SELF..salary * rate;

calc_bonus¶ó´Â ¸Þ¼Òµå¸¦ ¿øÇÏ´Â ´ë·Î ÀÛ¼ºÇÒ ¼ö Àִµ¥, ¸Å°³º¯¼öÀÇ ¼ö ¶Ç´Â À¯ÇüÀÌ ´Ù¸£°Å³ª ´Ù¸¥ À¯Çü °èÃþ¿¡ ÀÖ´Â À¯Çü¿¡ ´ëÇØ Á¤ÀǵǾî¾ß ÇÕ´Ï´Ù. ´Ù½Ã ¸»Çؼ­ Architect_t¿¡ ´ëÇØ ¸Å°³º¯¼ö À¯Çü°ú °°Àº ¼öÀÇ ¸Å°³º¯¼ö¸¦ °¡Áø calc_bonus¶ó´Â ¶Ç´Ù¸¥ ¸Þ¼Òµå¸¦ ÀÛ¼ºÇÒ ¼ö ¾ø½À´Ï´Ù.
ÁÖ:DB2´Â ÇöÀç µ¿Àû µð½ºÆÐÄ¡¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. Áï, ÇÑ À¯Çü¿¡ ´ëÇØ ¸Þ¼Òµå¸¦ ¼±¾ðÇÑ ´ÙÀ½ µ¿ÀÏÇÑ ¼öÀÇ ¸Å°³º¯¼ö¸¦ »ç¿ëÇÏ¿© ºÎ¼Ó À¯Çü¿¡ ´ëÇØ ¸Þ¼Òµå¸¦ ´Ù½Ã Á¤ÀÇÇÒ ¼ö ¾ø½À´Ï´Ù. ÀϽÃÀûÀÎ ÇØ°áÃ¥À¸·Î TYPE ¼ú¾î¸¦ »ç¿ëÇÏ¿© µ¿Àû À¯ÇüÀ» °áÁ¤ÇÑ ´ÙÀ½, TREAT ASÀýÀ» »ç¿ëÇÏ¿© °¢ µ¿Àû À¯Çü¿¡ ´ëÇØ ´Ù¸¥ ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ºÎ¼Ó À¯ÇüÀ» ó¸®ÇÏ´Â º¯È¯ ÇÔ¼öÀÇ ¿¹´Â DB2¿¡¼­ ºÎ¼Ó À¯Çü µ¥ÀÌÅÍ °Ë»ö(¹ÙÀÎµå¾Æ¿ô)¿¡¼­ ÂüÁ¶ÇϽʽÿÀ.

¸Þ¼Òµå µî·Ï, ÀÛ¼º ±×¸®°í È£Ãâ¿¡ ´ëÇØ¼­´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö(UDFs)¿Í ¸Þ¼Òµå ¹× »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö(UDF)¿¡¼­ ÂüÁ¶ÇϽʽÿÀ.

À¯ÇüÈ­ Å×ÀÌºí¿¡¼­ÀÇ ¿ÀºêÁ§Æ® ÀúÀå

±¸Á¶È­ À¯ÇüÀÇ ÀνºÅϽº¸¦ À¯ÇüÀÇ °¢ ¼Ó¼ºÀÌ º°µµÀÇ Ä÷³¿¡ ÀúÀåµÇ´Â À¯ÇüÈ­ Å×ÀÌºí¿¡¼­ ÇàÀ¸·Î ÀúÀåÇϰųª, À¯ÇüÀÇ ¸ðµç ¼Ó¼ºÀÌ ´ÜÀÏ Ä÷³¿¡ ÀúÀåµÇ´Â Ä÷³¿¡¼­ ¿ÀºêÁ§Æ®·Î ÀúÀåÇÒ ¼ö ÀÖ½À´Ï´Ù. À¯ÇüÈ­ Å×ÀÌºí¿¡´Â ½Äº°ÀÇ ¼Ó¼ºÀÌ ÀÖ½À´Ï´Ù. Áï, ´Ù¸¥ Å×ÀÌºí¿¡¼­ ÂüÁ¶¸¦ »ç¿ëÇÏ¿© ÀνºÅϽºÀÇ ¼Ó¼ºÀ» ¾×¼¼½ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ Å×ÀÌºí¿¡¼­ ÀνºÅϽº¸¦ ÂüÁ¶ÇÏ·Á¸é À¯ÇüÈ­ Å×À̺íÀ» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ¿ÀºêÁ§Æ®¸¦ ´Ù¸¥ Å×ÀÌºí¿¡¼­ ½Äº°ÇÏÁö ¾Ê¾Æµµ µÇ¸é ¿ÀºêÁ§Æ®¸¦ Ä÷³¿¡ ÀúÀåÇϽʽÿÀ.

¿ÀºêÁ§Æ®°¡ Å×À̺í ÇàÀ¸·Î ÀúÀåµÇ¸é Å×À̺íÀÇ °¢ Ä÷³¿¡´Â ¿ÀºêÁ§Æ®ÀÇ ¼Ó¼ºÀÌ Çϳª¾¿ µé¾î ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, '»ç¶÷' ÀνºÅϽº¸¦ 'À̸§' Ä÷³°ú '³ªÀÌ' Ä÷³ÀÌ ÀÖ´Â Å×ÀÌºí¿¡ ÀúÀåÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½Àº PersonÀÇ ÀνºÅϽº¸¦ ÀúÀåÇÏ´Â CREATE TABLE¹®ÀÇ ¿¹ÀÔ´Ï´Ù.

   CREATE TABLE Person OF Person_t
      (REF IS Oid USER GENERATED)

PersonÀÇ ÀνºÅϽº¸¦ Å×ÀÌºí¿¡ »ðÀÔÇÏ·Á¸é ´ÙÀ½ ±¸¹®À» »ç¿ëÇϽʽÿÀ.

   INSERT INTO Person (Oid, Name, Age)
      VALUES(Person_t('a'), 'Andrew', 29);

Ç¥ 10. Person À¯ÇüÈ­ Å×À̺í
Oid À̸§ ³ªÀÌ ÁÖ¼Ò
a Andrew 29  

ÇÁ·Î±×·¥Àº À¯ÇüÈ­ Å×À̺íÀÇ Ä÷³À» ¾×¼¼½ºÇÏ¿© ¿ÀºêÁ§Æ®ÀÇ ¼Ó¼ºÀ» ¾×¼¼½ºÇÕ´Ï´Ù.

UPDATE Person SET Age=30 WHERE Name='Andrew';

ÀÌÀü UPDATE¹® ÀÌÈÄ Å×À̺íÀº ´ÙÀ½°ú °°½À´Ï´Ù.

Ç¥ 11. °»½Å ÈÄÀÇ Person À¯ÇüÈ­ Å×À̺í
Oid À̸§ ³ªÀÌ ÁÖ¼Ò
a Andrew 30

Employee_t¶ó´Â Person_t ¼­ºêÅ×À̺íÀÌ ÀÖÀ¸¹Ç·Î, Employee_t ÀνºÅϽº´Â Person Å×ÀÌºí¿¡ ÀúÀåµÉ ¼ö ¾ø°í ´Ù¸¥ Å×ÀÌºí¿¡ ÀúÀåµÇ¾î¾ß ÇÕ´Ï´Ù. ÀÌ Å×À̺íÀ» ¼­ºêÅ×À̺íÀ̶ó°í ÇÕ´Ï´Ù. ´ÙÀ½ REATE TABLE¹®Àº Person Å×ÀÌºí ¾Æ·¡¿¡ Employee ¼­ºêÅ×À̺íÀ» ÀÛ¼ºÇÕ´Ï´Ù.

   CREATE TABLE Employee OF Employee_t UNDER Person
      INHERIT SELECT PRIVILEGES
      (SerialNum WITH OPTIONS NOT NULL,
      Dept WITH OPTIONS SCOPE BusinessUnit);

±×¸®°í Employee Å×ÀÌºí¿¡ ´Ù½Ã »ðÀÔÇÏ¸é ´ÙÀ½°ú °°½À´Ï´Ù.

   INSERT INTO Employee (Oid, Name, Age, SerialNum, Salary)
      VALUES (Employee_t('s'), 'Susan', 39, 24001, 37000.48)

Ç¥ 12. Employer À¯ÇüÈ­ ¼­ºêÅ×À̺í
Oid À̸§ ³ªÀÌ ÁÖ¼Ò SerialNum Salary Dept
s Susan 39   24001 37000.48  

´ÙÀ½ Á¶È¸¸¦ ½ÇÇàÇϸé SusanÀÇ Á¤º¸°¡ ¸®Åϵ˴ϴÙ.

   SELECT *
      FROM Employee
      WHERE Name='Susan';

ÀÌ·± µÎ Å×ÀÌºí¿¡ ´ëÇØ Èï¹Ì·Î¿î °ÍÀº Person Å×ÀÌºí¿¡¼­ SQL¹®À» ½ÇÇàÇÏ´Â °Í¸¸À¸·Îµµ 'Á÷¿ø'°ú '»ç¶÷' ¸ðµÎ¿¡ ´ëÇÑ ÀνºÅϽº¸¦ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ ±â´ÉÀ» ´ëü °¡´É¼ºÀ̶ó°í ÇÏ°í ±¸Á¶È­ À¯ÇüÀÇ Ãß°¡ Ư¼º¿¡¼­ ¼³¸íµË´Ï´Ù. À¯Çü °èÃþ¿¡¼­ ´õ ³ôÀº À§Ä¡¿¡ ÀÖ´Â ÀνºÅϽº¸¦ °¡Áö°í ÀÖ´Â Å×À̺íÀ» Á¶È¸Çϸé, °èÃþ¿¡¼­ ´õ ³·Àº À§Ä¡¿¡ ÀÖ´Â À¯ÇüÀÇ ÀνºÅϽº¸¦ ÀÚµ¿À¸·Î ¾ò°Ô µË´Ï´Ù. ´Ù½Ã ¸»ÇØ Person Å×À̺íÀº ³í¸®ÀûÀ¸·Î SELECT, UPDATE ¹× DELETE¹®ÀÎ °Íó·³ Ç¥½ÃµË´Ï´Ù.

Ç¥ 13. Person Å×ÀÌºí¿¡´Â Person°ú Employee ÀνºÅϽº°¡ ÀÖ½À´Ï´Ù.
Oid À̸§ ³ªÀÌ ÁÖ¼Ò
a Andrew 30 (³Î(NULL))
s Susan 39 (³Î(NULL))

´ÙÀ½ Á¶È¸¸¦ ½ÇÇàÇϸé (»ç¶÷) Andrew¿Í (Á÷¿ø) Susan¿¡ ´ëÇÑ ¿ÀºêÁ§Æ® ½Äº°ÀÚ ¹× Person_t Á¤º¸¸¦ ¾ò°Ô µË´Ï´Ù.

   SELECT *
   FROM Person;

´ëü °¡´É¼º¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ±¸Á¶È­ À¯ÇüÀÇ Ãß°¡ Ư¼ºÀ» ÂüÁ¶ÇϽʽÿÀ.

À¯ÇüÈ­ Å×ÀÌºí¿¡¼­ÀÇ ¿ÀºêÁ§Æ®°£ °ü°è Á¤ÀÇ

À¯ÇüÈ­ Å×À̺í ÇϳªÀÇ ¿ÀºêÁ§Æ®¿Í ´Ù¸¥ Å×À̺íÀÇ ¿ÀºêÁ§Æ®°£ °ü°è¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. µ¿ÀÏÇÑ À¯ÇüÈ­ Å×À̺íÀÇ ¿ÀºêÁ§Æ®°£ °ü°è¸¦ Á¤ÀÇÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ºÎ¼­ÀÇ ÀνºÅϽº°¡ µé¾î ÀÖ´Â À¯ÇüÈ­ Å×À̺íÀ» Á¤ÀÇÇß´Ù°í °¡Á¤ÇϽʽÿÀ. Employee Å×ÀÌºí¿¡¼­ ºÎ¼­ ¹øÈ£¸¦ À¯Áöº¸¼öÇÏ´Â ´ë½Å, Employee Å×À̺íÀÇ Dept Ä÷³¿¡´Â BusinessUnit Å×ÀÌºí¿¡ ÀÖ´Â ºÎ¼­ Áß Çϳª¿¡ ´ëÇÑ ³í¸®Àû Æ÷ÀÎÅͰ¡ µé¾î ÀÖ½À´Ï´Ù. ÀÌ·± Æ÷ÀÎÅ͸¦ ÂüÁ¶¶ó°í ÇÏ¸ç ±×¸² 9¿¡¼­ ¼³¸íµË´Ï´Ù.

±×¸² 9. Employee_t¿¡¼­ BusinessUnit_t·ÎÀÇ ±¸Á¶È­ À¯Çü ÂüÁ¶


Employee_t¿¡¼­ BusinessUnit_t·ÎÀÇ ±¸Á¶È­ À¯Çü ÂüÁ¶

Áß¿ä»çÇ×: ÂüÁ¶´Â ÂüÁ¶ Á¦¾àÁ¶°Ç°ú µ¿ÀÏÇÑ ±â´ÉÀ» ¼öÇàÇÏÁö ¾Ê½À´Ï´Ù. Á¸ÀçÇÏÁö ¾Ê´Â ºÎ¼­¸¦ ÂüÁ¶ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ºÎ¼­¿Í Á÷¿ø°£¿¡ ¹«°á¼ºÀ» À¯Áöº¸¼öÇÏ´Â °ÍÀÌ Áß¿äÇϸé, ÀÌ·± µÎ Å×ÀÌºí°£¿¡ ÂüÁ¶ Á¦ÇÑÁ¶°ÇÀ» Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ÂüÁ¶ÀÇ ½ÇÁ¦ ´É·ÂÀº Å×ÀÌºí°£ÀÇ °ü°è¸¦ Ž»öÇÏ´Â Á¶È¸¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù´Â µ¥ ÀÖ½À´Ï´Ù. Á¶È¸´Â °ü°è¸¦ ÂüÁ¶ ÇØÁ¦ÇÏ°í Æ÷ÀÎÆ®µÈ ¿ÀºêÁ§Æ®¸¦ ÀνºÅϽºÈ­ÇÕ´Ï´Ù. ÀÌ ÀÛ¾÷À» ¼öÇàÇÒ ¶§ »ç¿ëÇÑ ¿¬»êÀÚ´Â ÂüÁ¶ ÇØÁ¦ ¿¬»êÀÚ¶ó°í Çϸç, ->¿Í °°½À´Ï´Ù.

¿¹¸¦ µé¾î, Employee Å×ÀÌºí¿¡¼­ ´ÙÀ½ Á¶È¸´Â ÂüÁ¶ ÇØÁ¦ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© DB2¿¡°Ô Dept Ä÷³¿¡¼­ BusinessUnit Å×À̺í·ÎÀÇ °æ·Î¸¦ µû¸£µµ·Ï Áö½ÃÇÕ´Ï´Ù. ÂüÁ¶ ÇØÁ¦ ¿¬»êÀÚ´Â Name Ä÷³ÀÇ °ªÀ» ¸®ÅÏÇÕ´Ï´Ù.

   SELECT Name, Salary, Dept->Name
      FROM Employee;

À¯ÇüÈ­ Å×ÀÌºí¿¡¼­ Á¶È¸¸¦ ÀÛ¼ºÇÏ´Â °Í¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â À¯ÇüÈ­ Å×À̺í Á¶È¸¸¦ ÂüÁ¶ÇϽʽÿÀ.

Ä÷³¿¡¼­ÀÇ ¿ÀºêÁ§Æ® ÀúÀå

Ä÷³¿¡ ¿ÀºêÁ§Æ®¸¦ ÀúÀåÇϸé DB2 ³»Àå µ¥ÀÌÅÍ À¯ÇüÀ¸·Î ÀûÀýÈ÷ ¸ðµ¨È­µÉ ¼ö ¾ø´Â ¾÷¹« ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ »ç½ÇÀ» ¸ðµ¨È­ÇÒ ¶§ À¯¿ëÇÕ´Ï´Ù. ´Ù½Ã ¸»Çؼ­, ¾÷¹« ¿ÀºêÁ§Æ®(Á÷¿ø, ºÎ¼­ µî)¸¦ À¯ÇüÈ­ Å×ÀÌºí¿¡ ÀúÀåÇÒ ¼ö ÀÖÁö¸¸, ÀÌ ¿ÀºêÁ§Æ®¿¡´Â ±¸Á¶È­ À¯ÇüÀ» »ç¿ëÇÏ¿© °¡Àå Àß ¸ðµ¨È­µÇ´Â ¼Ó¼ºÀÌ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù.

¿¹¸¦ µé¾î, ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ÁÖ¼ÒÀÇ Æ¯Á¤ ºÎºÐÀ» ¾×¼¼½ºÇØ¾ß ÇÑ´Ù°í °¡Á¤ÇϽʽÿÀ. ÁÖ¼Ò¸¦ ±¸Á¶È­µÇÁö ¾ÊÀº ¹®ÀÚ¿­·Î ÀúÀåÇÏ´Â ´ë½Å, À̸¦ ±×¸² 10¿¡¼­¿Í °°ÀÌ ±¸Á¶È­ ¿ÀºêÁ§Æ®·Î ÀúÀåÇÒ ¼ö ÀÖ½À´Ï´Ù.

±×¸² 10. ±¸Á¶È­ À¯ÇüÀ¸·Î¼­ÀÇ ÁÖ¼Ò ¼Ó¼º


±¸Á¶È­ À¯ÇüÀ¸·Î¼­ÀÇ ÁÖ¼Ò ¼Ó¼º

¶ÇÇÑ, ÁÖ¼ÒÀÇ À¯Çü °èÃþÀ» Á¤ÀÇÇÏ¿© ¿©·¯ ³ª¶ó¿¡¼­ »ç¿ëµÇ´Â ¼­·Î ´Ù¸¥ ÁÖ¼Ò Çü½ÄÀ» ¸ðµ¨È­ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ¿ìÆí¹øÈ£ Äڵ尡 ÀÖ´Â ¹Ì±¹ ÁÖ¼Ò À¯Çü°ú ÀÌ¿ô ¼Ó¼ºÀÌ ÇÊ¿äÇÑ ºê¶óÁú ÁÖ¼Ò À¯ÇüÀ» µÑ´Ù Æ÷ÇÔ½Ãų ¼ö ÀÖ½À´Ï´Ù. Address_t À¯Çü °èÃþÀº Ä÷³¿¡ ±¸Á¶È­ À¯Çü ÀνºÅϽº »ðÀÔ¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù.

¿ÀºêÁ§Æ®°¡ Ä÷³ °ªÀ¸·Î ÀúÀåµÇ¸é, ¼Ó¼ºÀº Å×À̺íÀÇ Çà¿¡ ÀúÀåµÈ ¿ÀºêÁ§Æ®¿Í °°ÀÌ ¿ÜºÎÀûÀ¸·Î Ç¥ÇöµÇÁö ¾Ê½À´Ï´Ù. ´ë½Å ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ±× ¼Ó¼ºÀ» ó¸®ÇØ¾ß ÇÕ´Ï´Ù. DB2´Â °üÂû ¸Þ¼Òµå¸¦ »ý¼ºÇÏ¿© ¼Ó¼ºÀ» ¸®ÅÏÇϰí, º¯È¯ ¸Þ¼Òµå¸¦ »ý¼ºÇÏ¿© ¼Ó¼ºÀ» º¯°æÇÕ´Ï´Ù. ´ÙÀ½ ¿¹´Â °üÂû ¸Þ¼Òµå Çϳª¿Í º¯È¯ ¸Þ¼Òµå µÎ °³¸¦ »ç¿ëÇÕ´Ï´Ù. Çϳª´Â Number ¼Ó¼ºÀ» À§ÇÑ °ÍÀ̰í, ´Ù¸¥ Çϳª´Â Street ¼Ó¼ºÀ» À§ÇÑ °ÍÀ¸·Î ÁÖ¼Ò¸¦ º¯°æÇÕ´Ï´Ù.

   UPDATE Employee
      SET Address=Address..Number('4869')..Street('Appletree')
      WHERE Name='Franky'
      AND Address..State='CA';

¾ÕÀÇ ¿¹¿¡¼­ UPDATE¹®ÀÇ SETÀýÀº Number¿Í Street º¯È¯ ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© Address_t À¯ÇüÀÇ ÀνºÅϽº ¼Ó¼ºÀ» °»½ÅÇÕ´Ï´Ù. WHEREÀýÀº ¼ú¾î°¡ µÎ °³ÀÎ °»½Å ¸í·É¹® Á¶ÀÛÀ» Á¦ÇÑÇÕ´Ï´Ù. Çϳª´Â Name Ä÷³ÀÇ µ¿µî¼º ºñ±³À̰í, ´Ù¸¥ Çϳª´Â Address Ä÷³ÀÇ State °üÂû ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â µ¿µî¼º ºñ±³ÀÔ´Ï´Ù.

±¸Á¶È­ À¯ÇüÀÇ Ãß°¡ Ư¼º

´ëü °¡´É¼º
SELECT, UPDATE ¶Ç´Â DELETE¹®ÀÌ À¯ÇüÈ­ Å×ÀÌºí¿¡ Àû¿ëµÇ¸é Á¶ÀÛÀº ¸í¸íµÈ Å×À̺í°ú ±× ¸ðµç ¼­ºêÅ×ÀÌºí¿¡ Àû¿ëµË´Ï´Ù. ¿¹¸¦ µé¾î, Person_t¿¡¼­ À¯ÇüÈ­ Å×À̺íÀ» ÀÛ¼ºÇÏ°í ±× Å×À̺íÀÇ ¸ðµç ÇàÀ» ¼±ÅÃÇϸé, ÀÀ¿ëÇÁ·Î±×·¥Àº Person À¯ÇüÀÇ ÀνºÅϽº»Ó¸¸ ¾Æ´Ï¶ó Employee ºÎ¼Ó À¯Çü°ú ±âŸ ºÎ¼Ó À¯ÇüÀÇ ÀνºÅϽº¿¡ ´ëÇÑ Person Á¤º¸¸¦ ¹Þ½À´Ï´Ù. ´ëü °¡´É¼ºÀÇ Æ¯¼ºÀº ¶ÇÇÑ ºÎ¼Ó À¯Çü¿¡¼­ ÀÛ¼ºµÈ ¼­ºêÅ×ÀÌºí¿¡ Àû¿ëµË´Ï´Ù. ¿¹¸¦ µé¾î, Employee ¼­ºêÅ×À̺íÀÇ SELECT, UPDATE ¹× DELETE¹®Àº Employee_t À¯Çü°ú ±× ºÎ¼Ó À¯Çü¿¡ Àû¿ëµË´Ï´Ù.

ÀÌ¿Í ºñ½ÁÇÏ°Ô Address_t À¯ÇüÀ¸·Î Á¤ÀÇµÈ Ä÷³¿¡´Â ¹Ì±¹ ÁÖ¼Ò ¶Ç´Â ºê¶óÁú ÁÖ¼ÒÀÇ ÀνºÅϽº°¡ ÀÖ½À´Ï´Ù.

ÀÌ¿Í ´Þ¸® INSERT Á¶ÀÛÀº INSER¹®¿¡¼­ ÁöÁ¤µÈ Å×ÀÌºí¿¡¸¸ Àû¿ëµË´Ï´Ù. Employee Å×ÀÌºí¿¡ »ðÀÔÇϸé, Employee_t ¿ÀºêÁ§Æ®°¡ Person Å×ÀÌºí °èÃþ¿¡ ÀÛ¼ºµË´Ï´Ù.

±¸Á¶È­ À¯ÇüÀ» ¸Å°³º¯¼ö·Î ÇÔ¼ö¿¡ Àü´ÞÇϰųª ÇÔ¼ö¿¡¼­ °á°ú·Î Àü´ÞÇÏ¸é ºÎ¼Ó À¯Çü ÀνºÅϽº¸¦ ´ëüÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ½ºÄ®¶ó ÇÔ¼ö¿¡ Address_t À¯ÇüÀÇ ¸Å°³º¯¼ö°¡ ÀÖÀ¸¸é, US_addr_t¿Í °°Àº ±× ºÎ¼Ó À¯Çü Áß ÇϳªÀÇ ÀνºÅϽº¸¦ Address_tÀÇ ÀνºÅϽº ´ë½Å Àü´ÞÇÒ ¼ö ÀÖ½À´Ï´Ù. Å×À̺í ÇÔ¼ö´Â ±¸Á¶È­ À¯Çü Ä÷³À» ¸®ÅÏÇÒ ¼ö ¾ø½À´Ï´Ù.

Ä÷³À̳ª Å×À̺íÀº ÇϳªÀÇ À¯ÇüÀ¸·Î Á¤ÀǵÇÁö¸¸ ´Ù¸¥ À¯ÇüÀÇ ÀνºÅϽº°¡ µé¾î ÀÖÀ» ¼öµµ ÀÖÀ¸¹Ç·Î, Á¤ÀÇ¿¡ »ç¿ëµÈ À¯Çü°ú ½ÇÁ¦ ·±Å¸Àӽà ¸®ÅϵǴ ÀνºÅϽº À¯ÇüÀ» ±¸ºÐÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. Ä÷³, Çà ¶Ç´Â ÇÔ¼ö ¸Å°³º¯¼öÀÇ ±¸Á¶È­ À¯ÇüÀÇ Á¤ÀǸ¦ Á¤Àû À¯ÇüÀ̶ó°í ÇÕ´Ï´Ù. ±¸Á¶È­ À¯Çü ÀνºÅϽºÀÇ ½ÇÁ¦ À¯ÇüÀ» µ¿Àû À¯ÇüÀ̶ó°í ÇÕ´Ï´Ù. µ¿Àû À¯Çü¿¡ ´ëÇÑ Á¤º¸¸¦ °Ë»öÇÏ·Á¸é, ÀÀ¿ëÇÁ·Î±×·¥Àº ±âŸ À¯Çü-°ü·Ã ³»Àå ÇÔ¼ö¿¡¼­ ¼³¸íµÈ TYPE_NAME, TYPE_SCHEMA ¹× TYPE_IDÀÇ ³»Àå ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÀνºÅϽºÈ­ °¡´É¼º
À¯ÇüÀº INSTANTIABLE ¶Ç´Â NOT INSTANTIABLE·Î Á¤ÀÇµÉ ¼öµµ ÀÖ½À´Ï´Ù. ±âº»ÀûÀ¸·Î À¯ÇüÀº ÀνºÅϽºÈ­µÉ ¼ö ÀÖ½À´Ï´Ù. Áï ±× ¿ÀºêÁ§Æ®ÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ ÇÑÆí, ÀνºÅϽºÈ­µÇÁö ¾Ê´Â À¯ÇüÀº À¯Çü °èÃþ¿¡¼­ Ãß°¡ Á¶ÀýÀ» À§ÇÑ ¸ðµ¨ÀÇ ¿ªÇÒÀ» ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, NOT INSTANTIABLEÀýÀ» »ç¿ëÇÏ¿© Person_t¸¦ Á¤ÀÇÇϸé, µ¥ÀÌÅͺ£À̽º¿¡ '»ç¶÷' ÀνºÅϽº¸¦ ÀúÀåÇÒ ¼ö ¾øÀ¸¸ç Person_t¸¦ »ç¿ëÇÏ¿© Å×À̺íÀ» ÀÛ¼ºÇϰųª º¼ ¼ö ¾ø½À´Ï´Ù. ´ë½Å Á¤ÀÇÇÑ Employee_tÀÇ ÀνºÅϽº³ª Person_tÀÇ ±âŸ ºÎ¼Ó À¯Çü¸¸ ÀúÀåÇÒ ¼ö ÀÖ½À´Ï´Ù.


[ ÆäÀÌÁöÀÇ ¸Ç À§ | ÀÌÀü ÆäÀÌÁö | ´ÙÀ½ ÆäÀÌÁö | ¸ñÂ÷ | »öÀÎ ]