Добрый день.
Приведенный ниже код на 8.1.7.0.0 плохо себя ведет:
запускаю его из sqlplus, сначала он работает нормально, а через какое-то время "повисает" сессия, сессию убиваю, запускаю снова - и он уже не работает совсем. Выяснил, что возможно это происходит из-за SYS.XMLPARSER.PARSE(p parser,url varchar2) если ответ удаленного сервера неадекватный.
Что делать, в чем проблема? если парсер не может распарсить XML - вроде как прилетает EXCEPTION - а тут вообще ничего не прилетает,
LOOP
EXIT WHEN (b_exit = TRUE);
begin
prs := SYS.XMLPARSER.NEWPARSER();
SYS.xmlparser.parse(prs, 'SOME URL?ssi='||vch_sesid||
'&lid='|| Lid ||'&lidbrc='|| LidBrc);
doc := SYS.XMLPARSER.GETDOCUMENT(prs);
elem := SYS.XMLDOM.GETDOCUMENTELEMENT(doc);
Lid := to_number(SYS.XMLDOM.GETATTRIBUTE(elem,'last'));
LidBrc := to_number(SYS.XMLDOM.GETATTRIBUTE(elem,'last_brcast'));
domN := SYS.XMLDOM.makeNode(elem);
domNL := SYS.XSLPROCESSOR.SELECTNODES(domN,'pair');
nCount := SYS.XMLDOM.GetLength(domNL);
FOR p IN 0..nCount - 1
LOOP
--here main work commit тоже есть (, не удалось избавицца
END LOOP;
SYS.XMLDOM.FREEDOCUMENT(doc);
SYS.XMLPARSER.FREEPARSER(prs);
exception when others then b_exit := TRUE;
SYS.XMLPARSER.FREEPARSER(prs);
end;
SYS.dbms_lock.sleep(2);
END LOOP;
|