将SQL XML输出解析为多个列

时间:2013-12-04 17:47:36

标签: sql

无法弄清楚如何将每个课程标题分成单独的专栏而不是将它们连成一列?

--create    
CREATE TABLE DEPARTMENTS_LIST(DL_ID NUMBER, D_L_XML XMLTYPE);

--insert
INSERT INTO DEPARTMENTS_LIST VALUES
(1,XMLTYPE('
   <ROW>
       <DEPARTMENT ID="1000">
          <NAME>Science</NAME>
          <COLLEGE>DIT</COLLEGE>
          <COURSES>
             <COURSE NO="2000">
                <TITLE>Computing</TITLE>
                <HOURS>20</HOURS>
             </COURSE>
             <COURSE NO="2001">
                <TITLE>Computer Science</TITLE>
                <HOURS>25</HOURS>
             </COURSE>
             <COURSE NO="2002">
                <TITLE>Networking</TITLE>
                <HOURS>30</HOURS>
             </COURSE>
          </COURSES>
       </DEPARTMENT>
    </ROW>
'));

--query
Select Dl.D_L_Xml.Extract('/ROW/DEPARTMENT/NAME/text()').Getstringval() "DEPARTMENT NAME",
Dl.D_L_Xml.Extract('/ROW/DEPARTMENT/COURSES/COURSE/TITLE/text()').Getstringval() "COURSE TITLE"
From Departments_List Dl;

输出如下:

output looks like this:

1 个答案:

答案 0 :(得分:0)

不理想,但这给了我一些接近我正在寻找的东西:

 Select Dl.D_L_Xml.Extract('/ROW/DEPARTMENT/NAME/text()').Getstringval() "DEPARTMENT NAME",
 Dl.D_L_Xml.Extract('/ROW/DEPARTMENT/COURSES/COURSE[1]/TITLE/text()').Getstringval() "COURSE TITLE"
 From Departments_List Dl
 UNION
 Select Dl.D_L_Xml.Extract('/ROW/DEPARTMENT/NAME/text()').Getstringval() "DEPARTMENT NAME",
 Dl.D_L_Xml.Extract('/ROW/DEPARTMENT/COURSES/COURSE[2]/TITLE/text()').Getstringval() "COURSE TITLE"
 From Departments_List Dl
 UNION
 Select Dl.D_L_Xml.Extract('/ROW/DEPARTMENT/NAME/text()').Getstringval() "DEPARTMENT NAME",
 Dl.D_L_Xml.Extract('/ROW/DEPARTMENT/COURSES/COURSE[3]/TITLE/text()').Getstringval() "COURSE TITLE"
 From Departments_List Dl;

输出:

enter image description here