2013-08-06 2 views
0

I가 오라클 11g의 다음 표 :선택 XML 요소 값과 표시 여러 행 오라클 11g

 <results> 
<return> 
    <actualtime>0.0</actualtime> 
    <billingamount>0.0</billingamount> 
    <buildlisttext> 
     <buildnumber>0</buildnumber> 
     <completiondate>2007-04-10T12:36:00+02:00</completiondate> 
     <componentid>0</componentid> 
     <containsrecipients>false</containsrecipients> 
     <containsrecipientshasbeenset>true</containsrecipientshasbeenset> 
     <costamount>0.0</costamount> 
     <createdate>2006-11-20T17:10:02+01:00</createdate> 
     <createdbysystemuserid>89198</createdbysystemuserid> 
     <currentownersystemuserid>12122</currentownersystemuserid> 
     <currentownerusergroupid>0</currentownerusergroupid> 
     <customerid>95</customerid> 
     <description>From: Ricky Bolton</description> 
    </buildlisttext> 
</return> 
<return> 
    <actualtime>0.0</actualtime> 
    <billingamount>0.0</billingamount> 
    <buildlisttext> 
     <buildnumber>0</buildnumber> 
     <completiondate>2007-04-10T12:36:00+02:00</completiondate> 
     <componentid>0</componentid> 
     <containsrecipients>false</containsrecipients> 
     <containsrecipientshasbeenset>true</containsrecipientshasbeenset> 
     <costamount>0.0</costamount> 
     <createdate>2006-11-20T17:10:02+01:00</createdate> 
     <createdbysystemuserid>89198</createdbysystemuserid> 
     <currentownersystemuserid>12122</currentownersystemuserid> 
     <currentownerusergroupid>0</currentownerusergroupid> 
     <customerid>95</customerid> 
     <description>From: Derek Trotter</description> 
    </buildlisttext> 
</return> 
    </results> 

내가 노력하고있어 : 내가 XML 문서를 가지고있는 xml_content 열 내에서

  CREATE TABLE jason_xml(
      id NUMBER(5) PRIMARY KEY, 
      xml_content XMLTYPE 
     )tablespace WD_T 

내 jason_xml 테이블 열에서이 문서를 쿼리 한 다음 결과를 다음과 같이 표시합니다.

 |billingamount|Description| 
     |0.0   |From: Ricky Bolton| 
     |0.0   |From: Derek Trotter| 

오라클 API의 방향을 제시하지만, API를 읽는 데별로 좋지는 않습니다.이 API는 매우 잘못 작성되었습니다. 나는이 페이지에 정의 된 사업자의 숫자를 시도했지만 기쁨이 없었습니다 :

http://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb04cre.htm#BABDGFFH

나는 지금까지이 같은 왔하지만 PL/SQL 개발자에 '잘못된 식별자'점점 계속. 나는 아마 이것으로 완전히 잘못 될 것이라는 것을 알고있다. 그래서 누군가는 어떤 포인터/해결책을 가지고 있는가?

 SELECT extractValue(OBJECT_VALUE, 'results/return/buildlisttext/description') "DESCRIPTION" FROM jason_xml x WHERE xmlexists('results/return/buildlisttext/description' PASSING OBJECT_VALUE); 

나는 PHP와 MySQL 사용자를 사용하고 있습니다 쉽게 기술의 조합으로이 작업을 수행 할 수 있지만, 불행하게도 나는 직장에서 오라클 11g를 사용합니다.

도움을 주시면 감사하겠습니다.

답변

1

는이 상황에 대한 올바른 대응이라고 밝혀 :

   SELECT xtab.billingamount, xtab.description 
       FROM jason_xml jx, xmltable('/results/return' 
       PASSING jx.xml_content 
       COLUMNS billingamount varchar2(4000) path '//billingAmount', 
         description clob path '//description' 
        )xtab; 
0

시도해보십시오. 더 간단한 방법이있을 수 있습니다. 여기

SELECT EXTRACTVALUE (t.COLUMN_VALUE, 'return/billingamount') Billing_Amount, 
     EXTRACTVALUE (t.COLUMN_VALUE, 'return/buildlisttext/description') Description 
    FROM jason_xml, 
     XMLTABLE ('for $i in /results/return return $i' 
       PASSING jason_xml.xml_content) t 

이 당신이 보여 제약 조건을 포함하지 않는 SQL Fiddle example

,하지만 당신은 XQuery 표현식에 그렇게 쉽게 추가 할 수 있습니다.

+0

이 81 개 빈 행을 반환 ... – jezzipin

+0

당신이 SQLFiddle 예를 살펴나요? 내가 제공 한 샘플 데이터로 실행했습니다. – OldProgrammer

+0

나는했다. 아래에 게시 한 코드는 올바르게 작동하도록 관리 한 유일한 코드입니다. – jezzipin