2014-01-24 2 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 Developer метод процедура "Test" Я получаю ниже ошибки

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

+0

Вы можете поделиться тем, что вы используете? Ваш код в основном правильный. Проблема в том, что вы вызываете процедуру. –

+0

Привет, я использую oracle pl sql developer, и я передаю xml-файл, как в параметре mode. просто загрузка xml-файла с компьютера. hard disk.version я использую версию, которую я использую: ** Oracle Database 11g Enterprise Edition Release 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. правой кнопкой мыши по процедуре Тест -> Загрузка xml-файла из жесткого диска -> выполнить. с помощью вышеописанного метода я получал ошибку -> ora 22805: не могу вставить нулевой объект в таблицы объектов или вложенные таблицы после этого я реализовал вашу идею, а затем сразу получил ответ. Пожалуйста, предложите мне, если нужно добавить какую-либо вещь, например, прикреплять снимок экрана для выполнения процедуры. – ravt

Смежные вопросы