Базы данных Oracle - статьи



             

Прием сообщений XML в Oracle - часть 2


<title>Oracle SQL*Loader</title>

<author>Jonathan Gennick</author>

<author>Sanjay Mishra</author>

<pages>269</pages>

</cover>

Процедура PL/SQL успешно завершена.

SQL> ...

Построить процедуру получения XML документа на основе текста выше - дело техники. Разумно включить в процедуру проверку поля Content-Type ответа HTTP. Получится примерно следующее:

DECLARE xmldoc VARCHAR2(4000) := ''; ok BOOLEAN := FALSE;

PROCEDURE readxml(url IN VARCHAR2,
doc OUT VARCHAR2, success OUT BOOLEAN) IS req utl_http.req; resp utl_http.resp; name VARCHAR2(256); value VARCHAR2(1024);

BEGIN doc := ''; req := utl_http.begin_request(url); resp := utl_http.get_response(req);

success := resp.status_code = 200; IF success THEN FOR i IN 1 .. utl_http.get_header_count(resp) LOOP utl_http.get_header(resp, i, name, value); success := name = 'Content-Type' AND
value = 'text/xml'; EXIT WHEN success; END LOOP;

IF success THEN LOOP utl_http.read_line(resp, value, TRUE); doc := doc value; END LOOP; END IF; END IF;

EXCEPTION WHEN utl_http.end_of_body THEN
utl_http.end_response(resp); END;

BEGIN readxml('http://localhost:7778/mydoc.xml',
xmldoc, ok); IF ok THEN dbms_output.put_line(xmldoc); ELSE dbms_output.put_line('Not XML
or bad URL'); END IF; END; /

Более практично использовать для считываемого документа тип CLOB, а не VARCHAR2. Но это бы усложнило пример, а к сути не относится, и поэтому здесь не рассматривается. Так же ради простоты не рассматриваются технические вопросы форматирования текста документа.

Полученный таким образом текст XML документа можно помещать в БД или подвергать обработке.

То же самое можно в Oracle делать не только в PL/SQL, но и на Java.




Содержание  Назад  Вперед