2014-01-24 69 views
2

我有要求將xml文件加載到特定的表。我試着用下面的代碼,但它並沒有解決我的問題。將xml文件加載到oracle表

XML數據:

<FAX> 
    <EMAILOG> 
    <ID>7839</ID> 
    <RESPONSE>FAX SENT</RESPONSE> 
    </EMAILOG> 
    <EMAILOG> 
    <ID>7566</ID> 
    <RESPONSE>FAX NOT SENT</RESPONSE> 
    </EMAILOG> 
</FAX> 

我是執行與PL/SQL開發網格的幫助程序。右鍵單擊程序Test - >從硬盤加載xml文件 - >執行。

這裏是解釋過程的DDL。

create table emp3 as select * From emp where 1=1;  
alter table emp3 add (fax_response varchar2(50)); 
create global temporary table tmp_xml of xmltype xmltype store as securefile binary xml; 

create or replace procedure proc_upd_email_records (loc_xml in clob) is 
begin 
    insert into tmp_xml 
    values (xmlparse(document loc_xml)) ; 

    merge into emp3 e 
    using (
    select id 
     , response 
    from tmp_xml t 
     , xmltable(
      '/FAX/EMAILOG' 
      passing t.object_value 
      columns id  number  path 'ID' 
       , response varchar2(250) path 'RESPONSE' 
     ) 
) v 
    on (e.empno = v.id) 
    when matched then update 
    set e.fax_response = v.response; 
end; 
/

由通過PL/SQL開發人員執行 「測試」 過程方法,我得到以下錯誤

ora 22805 : can not insert null object into object tables or nested tables

+0

您可以分享您正在執行的任務嗎?你的代碼基本上是正確的。如何調用這個過程是個問題。 –

+0

嗨,我使用Oracle PL SQL開發人員,我傳遞XML模式參數的文件。簡單地從計算機硬盤加載xml文件。我使用的版本是我正在使用的版本是 ** Oracle數據庫11g企業版版本11.2.0.1.0 ** – ravt

回答

1

這(使用Oracle Database 11g Express Edition Release 11.2.0.2.0)的作品對我蠻好。

declare 
    v_xml clob; 
begin 
    v_xml := 
'<FAX> 
    <EMAILOG> 
     <ID>7839</ID> 
     <RESPONSE>FAX SENT</RESPONSE> 
    </EMAILOG> 
    <EMAILOG> 
     <ID>7566</ID> 
     <RESPONSE>FAX NOT SENT</RESPONSE> 
    </EMAILOG> 
</FAX>'; 

    proc_upd_email_records(v_xml); 
end; 
+0

謝謝......它解決了我的問題。 – ravt

+0

@ravt這很棒,但你需要用你如何調用存儲過程的代碼來更新問題。如果沒有這樣做,你就不會爲別人留下任何有價值的東西。如果沒有你的問題變得有意義,這個答案實際上不會回答問題。 –

+0

您好聰明,對不起,延遲迴復。以前我在pl/sql developer grid的幫助下執行過程。右鍵點擊程序 測試 - >從硬盤加載xml文件 - >執行。 通過使用上面的方法我得到錯誤 - > ora 22805:不能將空對象插入到對象表或嵌套表 之後,我已經實現了你的想法,然後立即我得到了答案。 如果需要添加任何東西,請像附加屏幕截圖一樣執行該過程。 – ravt