使用pl sql将xml文件解析为2个oracle标头详细信息表
我试图通过pl sql解析xml文件。有一个标题部分(GrpHdr),其中包含一个Id元素,该元素应插入到特定表及其详细信息(Ntfctn)中,其元素将插入到另一个表中,外键是第一个表的Id。文件如下:使用pl sql将xml文件解析为2个oracle标头详细信息表,sql,xml,oracle,parsing,plsql,Sql,Xml,Oracle,Parsing,Plsql,我试图通过pl sql解析xml文件。有一个标题部分(GrpHdr),其中包含一个Id元素,该元素应插入到特定表及其详细信息(Ntfctn)中,其元素将插入到另一个表中,外键是第一个表的Id。文件如下: <?xml version="1.0" encoding="utf-8" standalone="no"?> <DMCTfh:DIASMCTFH xmlns:DMCTfh="urn:DMCTfh:xsd:$DIASMCTFH"> <DMCTfh:DIASFile
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<DMCTfh:DIASMCTFH xmlns:DMCTfh="urn:DMCTfh:xsd:$DIASMCTFH">
<DMCTfh:DIASFileHdr>
<DMCTfh:SndgInst>DIASGRA1</DMCTfh:SndgInst>
<DMCTfh:RcvgInst>90874</DMCTfh:RcvgInst>
<DMCTfh:FileRef>0252013352000001</DMCTfh:FileRef>
<DMCTfh:SrvcID>DCT</DMCTfh:SrvcID>
<DMCTfh:TstCode>T</DMCTfh:TstCode>
<DMCTfh:FType>XCT</DMCTfh:FType>
<DMCTfh:NumGrp>1</DMCTfh:NumGrp>
</DMCTfh:DIASFileHdr>
<DMCTfh:BkToCstmrDbtCdtNtfctn xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.03">
<GrpHdr>
<MsgId>024201335200000000000132</MsgId>
<CreDtTm>2013-05-24T09:35:10</CreDtTm>
<MsgRcpt>
<Id>
<OrgId>
<Othr>
<Id>90874</Id>
<Issr>DIAS</Issr>
</Othr>
</OrgId>
</Id>
</MsgRcpt>
</GrpHdr>
<Ntfctn>
<Id>024201335200000000000129</Id>
<CreDtTm>2013-05-24T09:35:10</CreDtTm>
<Acct>
<Id>
<IBAN>GR6302602320000590200493673</IBAN>
</Id>
<Svcr>
<FinInstnId>
<BICFI>ERBKGRAA</BICFI>
</FinInstnId>
</Svcr>
</Acct>
<TxsSummry>
<TtlNtries>
<NbOfNtries>1</NbOfNtries>
</TtlNtries>
</TxsSummry>
<Ntry>
<Amt Ccy="EUR">100.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>BOOK</Sts>
<ValDt>
<Dt>2013-05-24</Dt>
</ValDt>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>CNTR</Cd>
<SubFmlyCd>CDPT</SubFmlyCd>
</Fmly>
</Domn>
</BkTxCd>
<NtryDtls>
<Btch>
<NbOfTxs>1</NbOfTxs>
<TtlAmt Ccy="EUR">100.00</TtlAmt>
</Btch>
<TxDtls>
<Refs>
<InstrId>01913351000006</InstrId>
<EndToEndId>NOTPROVIDED</EndToEndId>
<TxId>CRED-874-0208-2</TxId>
</Refs>
<Amt Ccy="EUR">100.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<RltdPties>
<Dbtr>
<Nm>Debtor-NAME-301-01-1</Nm>
</Dbtr>
</RltdPties>
<RltdAgts>
<DbtrAgt>
<FinInstnId>
<BICFI>ETHNGRAA</BICFI>
</FinInstnId>
</DbtrAgt>
</RltdAgts>
<RmtInf>
<Ustrd>00000042280000087428</Ustrd>
</RmtInf>
<RltdDts>
<AccptncDtTm>2013-05-24T00:00:00</AccptncDtTm>
</RltdDts>
</TxDtls>
</NtryDtls>
</Ntry>
</Ntfctn>
<Ntfctn>
<Id>024201335200000000000130</Id>
<CreDtTm>2013-05-24T09:35:10</CreDtTm>
<Acct>
<Id>
<IBAN>GR7301723510005351020742556</IBAN>
</Id>
<Svcr>
<FinInstnId>
<BICFI>PIRBGRAA</BICFI>
</FinInstnId>
</Svcr>
</Acct>
<TxsSummry>
<TtlNtries>
<NbOfNtries>1</NbOfNtries>
</TtlNtries>
</TxsSummry>
<Ntry>
<Amt Ccy="EUR">100.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>BOOK</Sts>
<ValDt>
<Dt>2013-05-24</Dt>
</ValDt>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>RCDT</Cd>
<SubFmlyCd>ESCT</SubFmlyCd>
</Fmly>
</Domn>
</BkTxCd>
<NtryDtls>
<Btch>
<NbOfTxs>1</NbOfTxs>
<TtlAmt Ccy="EUR">100.00</TtlAmt>
</Btch>
<TxDtls>
<Refs>
<InstrId>01913351000003</InstrId>
<EndToEndId>NOTPROVIDED</EndToEndId>
<TxId>DD087401305240001</TxId>
</Refs>
<Amt Ccy="EUR">100.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<RltdPties>
<Dbtr>
<Nm>ΔΕΛΗΑΝΤΩΝΗ ΜΑΡΙΑ</Nm>
</Dbtr>
</RltdPties>
<RltdAgts>
<DbtrAgt>
<FinInstnId>
<BICFI>GPSBGRAA</BICFI>
</FinInstnId>
</DbtrAgt>
</RltdAgts>
<RmtInf>
<Ustrd>00000047780000087424</Ustrd>
</RmtInf>
<RltdDts>
<AccptncDtTm>2013-05-24T00:00:00</AccptncDtTm>
</RltdDts>
</TxDtls>
</NtryDtls>
</Ntry>
</Ntfctn>
<Ntfctn>
<Id>024201335200000000000131</Id>
<CreDtTm>2013-05-24T09:35:10</CreDtTm>
<Acct>
<Id>
<IBAN>GR9801100400000004050700154</IBAN>
</Id>
<Svcr>
<FinInstnId>
<BICFI>ETHNGRAA</BICFI>
</FinInstnId>
</Svcr>
</Acct>
<TxsSummry>
<TtlNtries>
<NbOfNtries>1</NbOfNtries>
</TtlNtries>
</TxsSummry>
<Ntry>
<Amt Ccy="EUR">600.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>BOOK</Sts>
<ValDt>
<Dt>2013-05-24</Dt>
</ValDt>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>CNTR</Cd>
<SubFmlyCd>CDPT</SubFmlyCd>
</Fmly>
</Domn>
</BkTxCd>
<NtryDtls>
<Btch>
<NbOfTxs>2</NbOfTxs>
<TtlAmt Ccy="EUR">600.00</TtlAmt>
</Btch>
<TxDtls>
<Refs>
<InstrId>01913351000001</InstrId>
<EndToEndId>NOTPROVIDED</EndToEndId>
<TxId>CRED-874-0208-1</TxId>
</Refs>
<Amt Ccy="EUR">100.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<RltdPties>
<Dbtr>
<Nm>Debtor-NAME-301-01-1</Nm>
</Dbtr>
</RltdPties>
<RltdAgts>
<DbtrAgt>
<FinInstnId>
<BICFI>CRBAGRAA</BICFI>
</FinInstnId>
</DbtrAgt>
</RltdAgts>
<RmtInf>
<Ustrd>00000042270000087428</Ustrd>
</RmtInf>
<RltdDts>
<AccptncDtTm>2013-05-24T00:00:00</AccptncDtTm>
</RltdDts>
</TxDtls>
<TxDtls>
<Refs>
<InstrId>01913352000001</InstrId>
<EndToEndId>3121990500874553</EndToEndId>
<TxId>61229720000000291396</TxId>
</Refs>
<Amt Ccy="EUR">500.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<RltdPties>
<Dbtr>
<Nm>ΠΑΠΑΙΟΡΔΑΝΟΥ ΠΑΥΛΟΣ</Nm>
</Dbtr>
</RltdPties>
<RltdAgts>
<DbtrAgt>
<FinInstnId>
<BICFI>CITIGRAA</BICFI>
</FinInstnId>
</DbtrAgt>
</RltdAgts>
<RmtInf>
<Ustrd>00000042270000087428</Ustrd>
</RmtInf>
<RltdDts>
<AccptncDtTm>2013-05-22T00:00:00</AccptncDtTm>
</RltdDts>
</TxDtls>
</NtryDtls>
</Ntry>
</Ntfctn>
</DMCTfh:BkToCstmrDbtCdtNtfctn>
</DMCTfh:DIASMCTFH>
可以使用XMLTABLE函数从XML中提取行。作为测试,我创建了一个名为“text”的表,其中一列名为“xmldata” 然后,您可以像这样从XML文档中查询数据:
select header.id, data.*
from test, xmltable(-- GrpHdr as table
xmlnamespaces(default 'urn:iso:std:iso:20022:tech:xsd:camt.054.001.03', 'urn:DMCTfh:xsd:$DIASMCTFH' as "DMCTfh" ),
'/DMCTfh:DIASMCTFH/DMCTfh:BkToCstmrDbtCdtNtfctn/GrpHdr'
passing test.xmldata
columns id varchar2(50) path 'MsgRcpt/Id/OrgId/Othr/Id'
) as header,
xmltable(-- Ntfctn as table
xmlnamespaces(default 'urn:iso:std:iso:20022:tech:xsd:camt.054.001.03', 'urn:DMCTfh:xsd:$DIASMCTFH' as "DMCTfh" ),
'/DMCTfh:DIASMCTFH/DMCTfh:BkToCstmrDbtCdtNtfctn/Ntfctn'
passing test.xmldata
columns iban varchar2(50) path 'Acct/Id/IBAN',
dt varchar2(50) path 'Ntry/ValDt/Dt' -- and so on
) as data;
select header.id, data.*
from test, xmltable(-- GrpHdr as table
xmlnamespaces(default 'urn:iso:std:iso:20022:tech:xsd:camt.054.001.03', 'urn:DMCTfh:xsd:$DIASMCTFH' as "DMCTfh" ),
'/DMCTfh:DIASMCTFH/DMCTfh:BkToCstmrDbtCdtNtfctn/GrpHdr'
passing test.xmldata
columns id varchar2(50) path 'MsgRcpt/Id/OrgId/Othr/Id'
) as header,
xmltable(-- Ntfctn as table
xmlnamespaces(default 'urn:iso:std:iso:20022:tech:xsd:camt.054.001.03', 'urn:DMCTfh:xsd:$DIASMCTFH' as "DMCTfh" ),
'/DMCTfh:DIASMCTFH/DMCTfh:BkToCstmrDbtCdtNtfctn/Ntfctn'
passing test.xmldata
columns iban varchar2(50) path 'Acct/Id/IBAN',
dt varchar2(50) path 'Ntry/ValDt/Dt' -- and so on
) as data;