XMLÀº »ê¾÷ Ç¥ÁØÀÇ µ¥ÀÌÅÍ ±³È¯ Æ÷¸ËÀÌ´Ù. ´ëºÎºÐÀÇ DBMS´Â XML ¹®¼¸¦ ÀúÀå, º¯È¯ÇÏ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù. XML ŸÀÔÀÇ Çʵå·Î Àû¹ýÇÑ(Well formed) ¹®¼¸¦ ÀúÀåÇÒ ¼ö ÀÖ°í ½ºÅ°¸¶¸¦ ÁöÁ¤Çϸé À¯È¿¼º(Valid)À» Á¡°ËÇÒ ¼öµµ ÀÖ´Ù. OPENXML ÇÔ¼ö·Î XML ¹®¼¸¦ ºÒ·¯¿Í RDB¿¡ ³ÖÀ» ¼ö ÀÖ°í ¹Ý´ë·Î FOR XML¹®À¸·Î RDB¸¦ XML Çü½ÄÀ¸·Î º¯È¯ÇÒ ¼öµµ ÀÖ´Ù.
XML¿¡ ´ëÇÑ ¾ê±â´Â ±æ°í º¹ÀâÇØ¼ º°µµÀÇ Ã¥ ÇѱÇÀ» ºÁ¾ß ÇÒ Á¤µµÀÇ ºÎÇÇÀ̰í ÀÌ°É SQL°ú ÇÔ²² »ç¿ëÇÏ´Â °Íµµ ±â¼úÀûÀ¸·Î ³À̵µ°¡ ³ô´Ù. ¿©±â¼´Â ½Ç¿ëÀûÀ¸·Î ¾µ¸¸ÇÑ FOR XML¹®¿¡ ´ëÇØ¼¸¸ °£·«ÇÏ°Ô ¼Ò°³ÇÑ´Ù. FOR XML ´ÙÀ½¿£ º¯È¯ Çü½ÄÀ» ÁöÁ¤ÇÏ´Â RAW, AUTO, EXPLICIT, PATH µîÀÇ Å°¿öµå¿Í ¿©·¯ °¡Áö ¿É¼ÇÀÌ ¿Â´Ù. µµ½Ã ¸ñ·ÏÀ» °¡Áö´Â tCity Å×À̺í·Î ½Ç½ÀÇØ º¸ÀÚ.
SELECT * FROM tCity;

RDB´Â Ç¥ ÇüÅ·ΠÅ×À̺íÀ» º¸¿© ÁØ´Ù. ÀÌ Á¤º¸¸¦ ´Ù¸¥ ½Ã½ºÅÛ°ú ±³È¯ÇÏ·Á¸é XML·Î º¯È¯ÇØ¾ß ÇÑ´Ù. Äõ¸®¹® ³¡¿¡ FOR XML ¹®À» ºÙ¿© º¯È¯ Çü½ÄÀ» ÁöÁ¤ÇÑ´Ù. °¡Àå ±âº»ÀûÀÎ Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
SELECT * FROM tCity FOR XML RAW;
<row name="ºÎ»ê " area="765" popu="1234" metro="y" region="°æ»ó "/>
<row name="¼¿ï " area="605" popu="977" metro="y" region="°æ±â "/>
<row name="¼øÃµ " area="910" popu="27" metro="n" region="Àü¶ó "/>
<row name="¿À»ê " area="42" popu="21" metro="n" region="°æ±â "/>
<row name="ÀüÁÖ " area="205" popu="65" metro="n" region="Àü¶ó "/>
<row name="ûÁÖ " area="940" popu="83" metro="n" region="ÃæÃ» "/>
<row name="Ãáõ " area="1116" popu="27" metro="n" region="°¿ø "/>
<row name="ȫõ " area="1819" popu="7" metro="n" region="°¿ø "/>
·¹ÄÚµå Çϳª´ç row ¿¤¸®¸ÕÆ® Çϳª·Î Ãâ·ÂµÇ¸ç Çʵå´Â ¼Ó¼ºÀ¸·Î Ç¥ÇöÇÑ´Ù. RAW¿¡ Àμö¸¦ ÁöÁ¤ÇÏ¸é ¿¤¸®¸ÕÆ® À̸§ÀÌ µÇ°í ROOT ¿É¼Ç¿¡ Àμö¸¦ ÁöÁ¤Çϸé Àüü ·¹Äڵ带 °¨½Î´Â ·çÆ® ¿¤¸®¸ÕÆ®¸¦ ¸¸µé¾î ÁØ´Ù.
SELECT * FROM tCity FOR XML RAW('city'), ROOT('korea');
<korea> ·çÆ® ÅÂ±× ¾È¿¡ <city> ű׸¦ ¹èÄ¡ÇÑ´Ù.
<korea>
<city name="ºÎ»ê " area="765" popu="1234" metro="y" region="°æ»ó "/>
<city name="¼¿ï " area="605" popu="977" metro="y" region="°æ±â "/>
....
</korea>
area, popu °°Àº Çʵ尡 XML ¹®¼ÀÇ Çʵå·Î Ç¥ÇöµÇ´Âµ¥ °¢°¢ÀÇ ¿¤¸®¸ÕÆ®·Î Á¤ÀÇÇÏ°í ½ÍÀ¸¸é ELEMENTS ¿É¼ÇÀ» Ãß°¡ÇÑ´Ù. ¿É¼ÇÀÇ ¼ø¼´Â ¾Æ¹«·¡µµ »ó°ü ¾ø´Ù.
SELECT * FROM tCity FOR XML RAW('city'), ROOT('korea'), ELEMENTS;
<korea>
<city>
<name>ºÎ»ê </name>
<area>765</area>
<popu>1234</popu>
<metro>y</metro>
<region>°æ»ó </region>
</city>
....
</korea>
FOR XML AUTO´Â ·¹ÄÚµå ¿¤¸®¸ÕÆ®ÀÇ À̸§À» Å×À̺í¸íÀ¸·Î ÀÚµ¿ ÁöÁ¤ÇÑ´Ù. FOR XML RAW('tCity')¿Í °°µÇ Å×À̺í¸íÀ» ÀÚµ¿À¸·Î Á¶»çÇØ ÁÖ´Â Á¤µµ¸¸ ´Ù¸£´Ù. ROOT³ª ELEMENTS ¿É¼Çµµ ¹°·Ð »ç¿ëÇÒ ¼ö ÀÖ´Ù.
SELECT * FROM tCity FOR XML AUTO;
<tCity name="ºÎ»ê " area="765" popu="1234" metro="y" region="°æ»ó "/>
<tCity name="¼¿ï " area="605" popu="977" metro="y" region="°æ±â "/>
<tCity name="¼øÃµ " area="910" popu="27" metro="n" region="Àü¶ó "/>
....
RAW¿Í AUTO´Â ELEMENTS ¿É¼Ç ¿©ºÎ¿¡ µû¶ó Àüü Çʵ带 ¼Ó¼ºÀ¸·Î Ç¥ÇöÇÒÁö, ¾Æ´Ï¸é ¿¤¸®¸ÕÆ®·Î Ç¥ÇöÇÒÁö¸¦ °áÁ¤ÇÏ¸ç °³º° ÁöÁ¤Àº ÇÒ ¼ö ÀÖ´Ù. EXPLICIT´Â °¢ Çʵ带 ¾î¶»°Ô Ç¥ÇöÇÒÁö »ó¼¼ÇÏ°Ô ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸³ª Çʵ帶´Ù Ç¥Çö Çü½ÄÀ» ÁöÁ¤ÇØ¾ß ÇϹǷΠ¹®¹ýÀÌ º¹ÀâÇÏ´Ù. À̸¦ Á» ´Ü¼øÇÏ°Ô Ç¥ÇöÇÏ´Â ¿É¼ÇÀÌ PATHÀÌ´Ù.
¿©±â¼´Â FOR XML PATH¸¦ »ç¿ëÇÏ¿© Çະ·Î ³ª¿µÇ¾î ÀÖ´Â °ªÀ» Çϳª·Î ÇÕÃÄ Ç¥½ÃÇÏ´Â ½Ç½ÀÀ» ´Ü°èº°·Î ÇØ º¸ÀÚ. ´ÙÀ½ Äõ¸®¹®Àº µµ½ÃÀÇ À̸§¸¸ ³ª¿ÇÑ´Ù.
SELECT name FROM tCity;
¼öÁ÷À¸·Î ³ª¿µÈ À̸§À» Çϳª·Î ÇÕÃÄ º¸ÀÚ. XML·Î ¹Ù²î¸é¼ µµ½Ã¸íÀÌ ¿·À¸·Î ÁÖ¿í ³ª¿µÈ´Ù.
SELECT name FROM tCity FOR XML PATH;
°á°ú : <row><name>ºÎ»ê </name></row><row><name>¼¿ï </name></row>....
row ¿¤¸®¸ÕÆ®´Â ±»ÀÌ ÇÊ¿äÄ¡ ¾ÊÀ¸´Ï PATH¿¡ ºó ű׸íÀ» ÁÖ¾î Á¦°ÅÇÑ´Ù.
SELECT name FROM tCity FOR XML PATH('');
°á°ú : <name>ºÎ»ê </name><name>¼¿ï </name>....
row´Â Á¦°ÅµÇ¾úÁö¸¸ ¾ÆÁ÷ name űװ¡ ºÙ¾î ÀÖ´Ù. ¾Õ µÚ¿¡ ¹» µ¡ºÙ¿© Çʵ带 °¡°øÇϸé name ¿¤¸®¸ÕÆ®µµ »ç¶óÁø´Ù. ´ÙÀ½Àº µµ½Ã¸í »çÀÌ¿¡ ÄÞ¸¶¸¦ ³Ö¾î ¼·Î ±¸ºÐÇÑ´Ù.
SELECT ',' + name FROM tCity FOR XML PATH('');
°á°ú : ,ºÎ»ê ,¼¿ï ,¼øÃµ ,¿À»ê ,ÀüÁÖ ,ûÁÖ ,Ãáõ ,ȫõ
name Çʵ尡 CHAR(10)ÀÌ¾î¼ ÀÏÁ¤ÇÑ Æø¸¸Å Â÷ÁöÇÑ´Ù. ÄÞ¸¶ »çÀ̰¡ ³Ê¹« ¹ú¾îÁ® º¸±â ½ÈÀºµ¥ ÀÌ·² ¶§ TRIM ÇÔ¼ö·Î µÞºÎºÐÀÇ °ø¹éÀ» Á¦°ÅÇÑ´Ù. nameÀÌ VARCHAR¶ó¸é ÀÌ Ã³¸®´Â ÇÊ¿äÄ¡ ¾Ê´Ù.
SELECT ',' + TRIM(name) FROM tCity FOR XML PATH('');
°á°ú : ,ºÎ»ê,¼¿ï,¼øÃµ,¿À»ê,ÀüÁÖ,ûÁÖ,Ãáõ,ȫõ
µµ½Ã¸í »çÀÌ¿¡ ÄÞ¸¶¸¦ »ðÀÔÇÑ °Ç ÁÁÀºµ¥ Á¦ÀÏ ¾Õ¿¡ ÀÖ´Â ÄÞ¸¶´Â ºÒÇÊ¿äÇÏ´Ù. Àüü ¹®ÀÚ¿¿¡¼ ¾Õ ºÎºÐ ÇÑ ¹®ÀÚ¸¦ Á¦°ÅÇÑ´Ù.
SELECT STUFF((SELECT ',' + TRIM(name) FROM tCity FOR XML PATH('')),1,1,'');
°á°ú : ºÎ»ê,¼¿ï,¼øÃµ,¿À»ê,ÀüÁÖ,ûÁÖ,Ãáõ,ȫõ
SUBSTRINGÀ̳ª RIGHT ÇÔ¼ö¸¦ ¾µ ¼öµµ ÀÖÁö¸¸ ±æÀ̸¦ Á¶»çÇØ¾ß ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ¾î Æ¯Á¤ À§Ä¡¿¡¼ ¿øÇÏ´Â ±æÀ̸¸Å ´ëüÇÏ´Â STUFF ÇÔ¼ö·Î ¾Õ ù ±ÛÀÚ¸¦ ºó ¹®ÀÚ¿·Î ´ëüÇß´Ù. Ãâ·Â °á°ú¸¦ STUFF·Î °¨½ÕÀ¸´Ï °¡°ø ÈÄÀÇ °á°ú¸¦ Ãâ·ÂÇÒ ¹Ù±ùÂÊÀÇ SELECT¹®ÀÌ Çϳª ´õ ÇÊ¿äÇÏ´Ù.
´ÙÀ½ Äõ¸®´Â Áö¿ªº°·Î µµ½Ã¸¦ ºÐ·ùÇÏ¿© º¸¿© ÁÖ°í µµ½Ã¸í ´ÙÀ½¿¡ °ø¹éµµ Çϳª ³Ö´Â´Ù. ¹Ù±ùÂÊ SELECT¹®¿¡¼ tCity¸¦ ÀÐ°í ¾ÈÂÊ ¼ºêÄõ¸®¿¡¼ ¹Ù±ùÂÊ tCity¿Í Áö¿ªÀÌ °°Àº µµ½Ã¸í¸¸ ÃßÃâÇÏ¿© ÄÞ¸¶·Î ÇÕÄ£´Ù. »ó°ü ¼ºê Äõ¸®ÀÌ´Ù. ±×¸®°í Áö¿ªº°·Î Áߺ¹ ¾øÀÌ Ãâ·ÂÇÏ¿´´Ù.
SELECT DISTINCT region, STUFF(
(SELECT ',' + TRIM(name) + ' ' FROM tCity WHERE region = A.region FOR XML PATH('')
),1,1,'') AS B
FROM tCity AS A;
ÃÖÁ¾ °á°ú´Â ´ÙÀ½°ú °°´Ù. ±ò²ûÇÏ°Ô Àß Ãâ·ÂµÇ¾ú´Ù.

ÀÌ·± Äõ¸®¸¦ Çѹø¿¡ ¸¸µé¾î ³»±â´Â ¾î·Æ°í ´Ü°èº°·Î ¾ÈÂʺÎÅÍ ½ÇÇàÇØ °¡¸ç Çϳª¾¿ ¸¸µé¾î ¿Í¾ß ÇÑ´Ù. ÀÌ ¹®¹ýÀº MSSQL Àü¿ëÀÌ¸ç ¿À¶óŬÀ̳ª ¸¶¸®¾Æ´Â Áö¿øÇÏÁö ¾Ê´Â´Ù.

µ· ¸ø ¹ú¾îµµ ÁÁ´Ù. Áñ°Ì°Ô »ì¸é µÈ´Ù. |
|