Всем Привет!
Вообщем проблема достаточно простая надо сформировать XML (11Kb) преобразовать его в CLOB и сохранить в БД. данное действие надо выполнить много раз (30 000).
Делаю сейчас следующим образом (код представлен в обрезаном ввиде, но суть я думаю будет понятна):
| Код | procedure ImportDoc(....) is
m_XmlDocTeamplate CLOB; m_XmlDocCLOB CLOB; m_domDoc dbms_xmldom.DOMDocument;
lCounterCommit Number := 0; begin
--Получаем шаблон XML представления документа select c.xmldata into m_XmlDocTeamplate from configparam c where c.parentkey='TemplateOrder' and c.childkey is null; --Заполняем в шаблоне информацию одинаковую для всех XML документов m_domDoc := dbms_xmldom.newDOMDocument(m_XmlDocTeamplate);
dbms_lob.createtemporary(m_XmlDocTeamplate, true, dbms_lob.session); -- В этом методе изменяются некоторые узлы PreFillDocData(...);
--Записываем в CLOB dbms_xmldom.writeToClob(m_domDoc, m_XmlDocTeamplate);
for rec in (select ... from ...) loop -- Загружаем шаблон в DOM m_domDoc := dbms_xmldom.newDOMDocument(m_XmlDocTeamplate);
-- Создаем CLOB для нового документа dbms_lob.createtemporary(m_XmlDocCLOB, true, dbms_lob.session); -- Формируем XMLDom CreateDocument(....);
--Записываем в CLOB dbms_xmldom.writeToClob(m_domDoc, m_XmlDocCLOB);
--Добавляем в таблицу .... --Освобождаем CLOB dbms_lob.freetemporary(m_XmlDocCLOB); lCounterCommit := lCounterCommit + 1; if (lCounterCommit > 999) then lCounterCommit := 0; commit; end if; end loop; --Освобождаем CLOB шаблона dbms_lob.freetemporary(m_XmlDocTeamplate); end ImportDoc;
|
Данный код валиться с ошибкой (см. прикрепленный файл) примерно после 2500 итераций.
Вопрос: Что я делаю не так? (Oracle9i)
Заранее Все БОЛЬШОЕ СПАСИБО! |