我試圖做一個INSERT INTO ..從xmltable中選擇。該過程在沒有此插入的情況下成功完成(快速),但是,如果包含此代碼以插入9999行,則需要花時間完成,但表中沒有任何記錄。插入批量xml數據到單個表中
文件片段:
<xyzcompany xmlns="http://www.xyzcompany.com/Canonical" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pmt="http://xyzcompany.com/PmtInfo" xmlns:cmn="http://xyzcompany.com/CommonTypes">
<Pmt>
<pmt:Payments>
<pmt:PayInfo>
<pmt:Single>
<pmt:SingExtRef>HH00000066530</pmt:SingExtRef>
<pmt:SingSequence>0001</pmt:SingSequence>
<pmt:SingAddInfo>
<cmn:AddInfoCmpType>IndivID</cmn:AddInfoCmpType>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>30UAT23203</cmn:AddInfoCmpText>
</pmt:SingAddInfo>
<pmt:SingAddInfo>
<cmn:AddInfoCmpType>Transaction Reference</cmn:AddInfoCmpType>
<cmn:AddInfoCmpText>062001180000553</cmn:AddInfoCmpText>
</pmt:SingAddInfo>
<pmt:SingAddInfo>
<cmn:AddInfoCmpType>EntryDesc</cmn:AddInfoCmpType>
<cmn:AddInfoCmpText>TRADE PYMT</cmn:AddInfoCmpText>
</pmt:SingAddInfo>
<pmt:SingAddInfo>
<cmn:AddInfoCmpType>ACH Company ID</cmn:AddInfoCmpType>
<cmn:AddInfoCmpText>1444444444</cmn:AddInfoCmpText>
</pmt:SingAddInfo>
<pmt:SingAddInfo>
<cmn:AddInfoCmpType>PmtRelInfo0001</cmn:AddInfoCmpType>
<cmn:AddInfoCmpText>IV</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>UAT9999_00001</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>100.01</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
</pmt:SingAddInfo>
<pmt:SingAddInfo>
<cmn:AddInfoCmpType>PmtRelInfo0002</cmn:AddInfoCmpType>
<cmn:AddInfoCmpText>IV</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>UAT9999_00002</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>100.01</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
<cmn:AddInfoCmpText>NA</cmn:AddInfoCmpText>
</pmt:SingAddInfo>
</pmt:Single>
</pmt:PayInfo>
</pmt:Payments>
</Pmt>
</xyzcompany>
上述文件有PMTRELINFO001高達PMTRELINFO9999的最大值。我只需要抓住這些而不是其他數據(如INDIVID)並插入到目標表中。我的代碼如下。
INSERT INTO ach_addenda(ach_id,rmr_number,rmr_code,invoice_number,rmr_paid_amt,rmr_orig_amt,rmr_disc_amt,rmr_date,ref_code,ref_id,ref_name,ref_instructions,adx_instructions,
ent_number)
(SELECT app_data_seq.currval,
sing_d1.sing_info_type,
sing_d1.sing_info_text1,
sing_d1.sing_info_text2,
sing_d1.sing_info_text3,
sing_d1.sing_info_text4,
sing_d1.sing_info_text5,
sing_d1.sing_info_text6,
sing_d1.sing_info_text7,
sing_d1.sing_info_text8,
sing_d1.sing_info_text9,
sing_d1.sing_info_text10,
sing_d1.sing_info_text11,
sing_d1.sing_info_text12
FROM XMLTABLE (
xmlnamespaces (
'http://www.xyzcompany.com/Canonical' AS "xyz",
'http://xyzcompany.com/PmtInfo' AS "pmt",
'http://xyzcompany.com/CommonTypes' AS "cmn",
'http://www.w3.org/2001/XMLSchema-instance' AS "xsi"),
'/xyz:xyz/xyz:Pmt/pmt:Payments/pmt:PayInfo/pmt:Single/pmt:SingAddInfo[cmn:AddInfoCmpType = "PMTREL%"]'
PASSING payXml
COLUMNS sing_info_type VARCHAR2(4000)
PATH 'cmn:AddInfoCmpType',
sing_info_text1 VARCHAR2(4000)
PATH 'cmn:AddInfoCmpText[1]',
sing_info_text2 VARCHAR2(4000)
PATH 'cmn:AddInfoCmpText[2]',
sing_info_text3 VARCHAR2(4000)
PATH 'cmn:AddInfoCmpText[3]',
sing_info_text4 VARCHAR2(4000)
PATH 'cmn:AddInfoCmpText[4]',
sing_info_text5 VARCHAR2(4000)
PATH 'cmn:AddInfoCmpText[5]',
sing_info_text6 VARCHAR2(4000)
PATH 'cmn:AddInfoCmpText[6]',
sing_info_text7 VARCHAR2(4000)
PATH 'cmn:AddInfoCmpText[7]',
sing_info_text8 VARCHAR2(4000)
PATH 'cmn:AddInfoCmpText[8]',
sing_info_text9 VARCHAR2(4000)
PATH 'cmn:AddInfoCmpText[9]',
sing_info_text10 VARCHAR2(4000)
PATH 'cmn:AddInfoCmpText[10]',
sing_info_text11 VARCHAR2(4000)
PATH 'cmn:AddInfoCmpText[11]',
sing_info_text12 VARCHAR2(4000)
PATH 'cmn:AddInfoCmpText[12]'
) sing_d1
);
任何建議,以提高效率,並使插入工作表示讚賞。我也試着用附加提示插入,沒有區別。
Oracle數據庫11g企業版發佈11.2.0.3.0 - 64位生產
PL/SQL發佈11.2.0.3.0 - 生產
CORE 11.2.0.3.0生產
TNS用於Solaris:版本11.2.0.3 .0 - 生產
NLSRTL版本11.2.0.3.0 - 生產
「需要花時間完成」。那是什麼意思?幾小時,幾周,幾年?你做了一個提交?你提到,「程序」。這是在一個PL/SQL程序? – OldProgrammer
沒有提交。完成該過程需要大約15分鐘,插入語句會卡住,但不會插入記錄,執行時不會生成錯誤。減少代碼塊,需要30秒。 – QuickDrawMcgraw
所以如果你只是運行上面的SQL的「選擇」部分,它會返回數據?你是什麼意思,「卡住了?」如果沒有提交的地方,爲什麼你期望表中的數據?我很困惑。 – OldProgrammer