2014-03-13 2 views
2

문제를 해결하는 데 도움을주십시오.XMLTABLE을 사용하여 Oracle 테이블에 XML 속성을 삽입하는 방법

동일한 블로그에서 이전 질문을 확인했지만 문제를 해결할 수 없습니다.

SELECT x.* --,--XXAR_CUST_ACCT_INT_TBL_S.nextval 
     FROM XMLTABLE ('for $i in $wh//NewCustomerToEBS, 
          $j in $i//SiteLine 
          $j in $i//ContactLine 
          return <deNormalizedWH>{$i}{$j}</deNormalizedWH>' 
     PASSING xmltype (y)  
      AS "wh" 
COLUMNS ATTRIBUTE2 VARCHAR2(20) path NewCustomerToEBS/@AccessoryFulfilmentOrg', 
CUSTOMER_TYPE_SITE   VARCHAR2(80) path 'SiteLine/@AccountType', 
CUSTOMER_NUMBER_CONTACT VARCHAR2(40) path 'ContactLine/@AccountNumber') x. 

내 사용자 지정 프로 시저에서 SELECT 문을 실행하려고

, 나는 오류가 아래에 무엇입니까 : 이것은 내 전체 XML 파일입니다 을하지만, 참조를 위해 내가 3 열을 주었다 (헤더 라인과 접촉 각) .

DECLARE 
    P_XML_DATA CLOB; 
BEGIN 
P_XML_DATA := '<NewCustomersToEBS> <NewCustomerToEBS AccessoryFulfilmentOrg="TEST" AccountType="TEST1" AlternateEmail="[email protected]" BlindShippments="NHGSV" Classification="HXHB" ComplianceCustomer="SKBCS" CustomerCategory="IUYT" CustomerNumber="FGGD12" CustomerProspectCode="LKOU" CustomerType="LOUTR" EDISDQSegmentCustomer="LOUY" Email="HDEG" Fax="HHBGG" FreeOnBoardPoint="KJHTR" FreightTerms="LKJ" OrderType="HBHJBJ" OrganizationName="VEN" Phone="LKJU87" PriceList="knjj" ProfileClass="MJRFS" RequestDataType="JNCJA" RoutingWindow="OIJH" SalesChannel="MNJH" ShipSet="RDSA" ShippingWindow="LKOP" StoreLocations="EDCG" UPCLabletype="LKJUO" URLs="JXABHCBH"> <SiteLine AccountType="JHFJS" AlternateEmailAddress="SV" BillToAddressLine1="SVSF" BillToAddressLine2="HGG" BillToAddressLine3="DBH" BillToCity="BJKD" BillToCountry="BB" BillToPostalCode="2323" BillToProvinice="BD" BillToState="GSDG" CensusRegion="DH" Country="HH" CustomerProspectCode="43T" CustomerType="HFHF" ECSRetailStoreLocation="FHF" EDILocation="HFHF" Email="FHF" Fax="5656" FreeOnBoardPoint="NFN" FreightTerms="BC" OrderType="KKMCK" Phone="4756" ProfileClass="KBD" Region="LS" ResidentialAddress="SS" SalesPerson="SW" ShipMethod="BDGD" ShipToAddressLine1="RF" ShipToAddressLine2="ES" ShipToAddressLine3="SS" ShipToCity="FF" ShipToCountry="GG" ShipToPostalCode="76" ShipToProvince="MM" ShipToState="GG" SiteLocation="GGG" SiteNumber="977" StoreLocations="GKV" StoresDistributionCentre="RT" URLs="RRR"/> <SiteLine AccountType="LOKI" AlternateEmailAddress="JJS" BillToAddressLine1="KMKK" BillToAddressLine2="POKJ" BillToAddressLine3="KIJO" BillToCity="PL" BillToCountry="OKJ" BillToPostalCode="OU" BillToProvinice="PL" BillToState="MN" CensusRegion="NB" Country="JH" CustomerProspectCode="KH" CustomerType="LK" ECSRetailStoreLocation="MJ" EDILocation="CF" Email="GF" Fax="987" FreeOnBoardPoint="MN" FreightTerms="LG" OrderType="UY" Phone="23" ProfileClass="LE" Region="DE" ResidentialAddress="ER" SalesPerson="RT" ShipMethod="TY" ShipToAddressLine1="YU" ShipToAddressLine2="IU" ShipToAddressLine3="SD" ShipToCity="DF" ShipToCountry="FG" ShipToPostalCode="34" ShipToProvince="NH" ShipToState="HG" SiteLocation="JK" SiteNumber="98" StoreLocations="YT" StoresDistributionCentre="RE" URLs="EW"/> <ContactLine AccountNumber="123" Acknowledgement="GGG" Email="NB" FaxAreaCode="54" FaxNumber="456" FaxType="BB" FirstName="KJ" Invoices="HG" JobTitle="FD" LastName="DS" OrganizationName="VG" PhoneAreaCode="66" PhoneNumber="55" PhoneType="XX" ShipTo="XX"/><ContactLine AccountNumber="345" Acknowledgement="RT" Email="TT" FaxAreaCode="33" FaxNumber="22" FaxType="BC" FirstName="SS" Invoices="JH" JobTitle="HH" LastName="JJ" OrganizationName="JHG" PhoneAreaCode="57" PhoneNumber="99" PhoneType="90" ShipTo="MM"/> </NewCustomerToEBS></NewCustomersToEBS>'; 
    XXAR_CUSTOMER_INBOUND_PROC(P_XML_DATA); 
    commit; 
END; 

ORA-19114: XPST0003 - error during parsing the XQuery expression: 
LPX-00801: XQuery syntax error at 'j' 
3        $j in $i//ContactLine 
-        ^
ORA-06512: at "APPS.XXAR_CUSTOMER_INBOUND_PROC", line 8 
ORA-06512: at line 13 

오류 메시지를 검토하고 내가 실수를하고있는 중이 야 어디 알려 주시기 바랍니다.

미리 감사드립니다.

답변

0

$j in $i//SiteLine 뒤에 ,이 필요합니다. 이것이 오류의 원인입니다.

그러나 $j도 두 번 사용했습니다 (문제가있을 수 있지만 잘못된 결과가 나타남).
시도 :

SELECT x.* 
     FROM XMLTABLE ('for $i in $wh//NewCustomerToEBS, 
          $j in $i//SiteLine, 
          $z in $i//ContactLine 
          return <deNormalizedWH>{$i}{$j}{$z}</deNormalizedWH>' 
     PASSING xmltype (y)  
      AS "wh" 
COLUMNS ATTRIBUTE2 VARCHAR2(20) path 'NewCustomerToEBS/@AccessoryFulfilmentOrg', 
CUSTOMER_TYPE_SITE   VARCHAR2(80) path 'SiteLine/@AccountType', 
CUSTOMER_NUMBER_CONTACT VARCHAR2(40) path 'ContactLine/@AccountNumber') x 

Here is a sqlfiddle demo