2015-03-06 2 views
0

Я использую блок plsql, который имеет код ниже и дает мне ошибку при условии if.Добавление данных в xml дает ошибку

ошибка: - ORA-31020: Операция не допускается, Reason: Invalid PL/SQL DOM обрабатывать

PROCEDURE add_to_xml(
    p_doc   IN OUT dbms_xmldom.domdocument , 
    p_node_parent IN dbms_xmldom.domnode , 
    p_table  IN xml_tabtype) 
IS 
    k_routine CONSTANT VARCHAR2(255) := gk_package||'add_to_xml'; 
    l_stmt VARCHAR2(512); 
    l_node_child dbms_xmldom.domnode; 
    l_txt_node dbms_xmldom.domnode; 
    l_elem dbms_xmldom.domelement; 
BEGIN 
    FOR i IN p_table.first..p_table.last 
    LOOP 
    l_elem    := dbms_xmldom.createelement(doc => p_doc , tagname => p_table(i).tagname); 
    l_node_child  := dbms_XMLDom.appendChild(p_node_parent , dbms_XMLDom.makeNode(l_elem)); 
    IF p_table(i).val IS NOT NULL THEN 
     l_txt_node  := dbms_xmldom.appendchild(l_node_child , dbms_xmldom.makenode(dbms_xmldom.createtextnode(p_doc , p_table(i).val))); 
    END IF; 
    END LOOP; 
EXCEPTION 
WHEN OTHERS THEN 
    dbms_output.put_line('error in add_to_xml'||SQLCODE||sqlerrm); 
END add_to_xml; 

вы можете, пожалуйста, почему эта ошибка всплывающие окна?

меня отлаживать это и раньше, если состояние у меня есть все данные Релевента пришедших через эту версию базы данных procedure.My равен 11.

Вызывающий код является

declare 
t_xml_tab      xxcu_hr_interface.xml_tabtype; 
l_doc       dbms_xmldom.domdocument; 
     l_top_node      dbms_xmldom.domnode; 
     l_node_top_detail    dbms_xmldom.domnode; 
     l_node_assignment_change  dbms_xmldom.domnode; 
     l_node_hdr_assignment_hdr  dbms_xmldom.domnode; 

begin 
t_xml_tab.delete; 
      t_xml_tab(t_xml_tab.count + 1).tagname := 'OperasjonsID'; 
      t_xml_tab(t_xml_tab.count).val := 'U'; --Defect 1047 
      t_xml_tab(t_xml_tab.count + 1).tagname := 'BusinessGroupID'; 
      t_xml_tab(t_xml_tab.count).val := 101; 
      t_xml_tab(t_xml_tab.count + 1).tagname := 'FirmaID'; 
      t_xml_tab(t_xml_tab.count).val := 984661185; 
      t_xml_tab(t_xml_tab.count + 1).tagname := 'AnsattNr'; 
      t_xml_tab(t_xml_tab.count).val := 52022; 
      t_xml_tab(t_xml_tab.count + 1).tagname := 'StartDato'; 
      t_xml_tab(t_xml_tab.count).val := xxcu_hr_common.conv_date('18-AUG-75'); 
      t_xml_tab(t_xml_tab.count + 1).tagname := 'SluttDato'; 
      t_xml_tab(t_xml_tab.count).val := xxcu_hr_common.conv_date('31-DEC-12'); 
      t_xml_tab(t_xml_tab.count + 1).tagname := 'Primaer'; 
      t_xml_tab(t_xml_tab.count).val := 'J'; 
      t_xml_tab(t_xml_tab.count + 1).tagname := 'IntegrationKey1'; 
      t_xml_tab(t_xml_tab.count).val := 11933; 
      t_xml_tab(t_xml_tab.count + 1).tagname := 'IntegrationKey2'; 
      t_xml_tab(t_xml_tab.count).val := 123; 
      t_xml_tab(t_xml_tab.count + 1).tagname := 'PersonKategori'; 
      t_xml_tab(t_xml_tab.count).val := 1; 

      dbms_output.put_line('3.7'); 

      ---dbms_output.put_line('3.7.1 t_xml_tab'||t_xml_tab(t_xml_tab.count + 1).tagname); 

      xxcu_hr_interface.add_to_xml(p_doc   => l_doc, 
             p_node_parent => l_node_hdr_assignment_hdr, 
             p_table  => t_xml_tab); 

--dbms_output.put_line(l_doc); 
exception 
when others then 
dbms_output.put_line('The error is :'||sqlcode||sqlerrm); 
end; 
+0

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

+0

это код вызывает эту процедуру – user2614856

ответ

0

Вам нужно создать документ через функцию createdocument, прежде чем передавать ее в вашу процедуру.

DBMS_XMLDOM Documentation

+0

Я уже назначаю переменную l_doc типа dbms_xmldom.domdocument и передаю ее процедуре. Фактически эта часть кода работает правильно с моей старой логикой, и я пытаюсь добавить новую структуру в свою старую логику где эта часть кода работает нормально. Тогда как это дает ошибку, хотя я использую свою старую логику для построения XML? – user2614856

+0

Ник спасибо, ваше решение сработало :) – user2614856

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