Возможность обмена сообщениями в формате XML подразумевает для СУБД Oracle возможность приема таких сообщений с узлов web и возможность их публикации на узлах. Сначала рассмотрим первую возможность. Для этого составим файл mydoc.xml и поместим его в каталог htdocs:
<cover>
<title>Oracle SQL*Loader</title>
<author>Jonathan Gennick</author>
<author>Sanjay Mishra</author>
<pages>269</pages>
</cover>
Наберем в браузере адрес http://localhost:7778/mydoc.xml (здесь и далее - для версии 9; в версии 8.1 http://localhost/mydoc.xml). В окошке должен появиться текст "опубликованного в web" документа.
Для прочтения СУБД XML сообщений в Oracle есть разные способы. Рассмотрим способ совсем простой: с использованием встроенного пакета UTL_HTTP. В составе этого пакета есть процедуры, позволяющие читать заголовок HTTP ответа с web узла и текст сообщения. Вот пример их использования в SQL*Plus:
SET SERVEROUTPUT ON SIZE 40000
DECLARE req utl_http.req; resp utl_http.resp; name VARCHAR2(256); value VARCHAR2(1024);
BEGIN req := utl_http.begin_request
('http://localhost:7778/mydoc.xml'); resp := utl_http.get_response(req);
dbms_output.put_line('HTTP response status code:
' resp.status_code); dbms_output.put_line('HTTP response reason: '
resp.reason_phrase);
dbms_output.put_line('-----');
FOR i IN 1 .. utl_http.get_header_count(resp) LOOP utl_http.get_header(resp, i, name, value); dbms_output.put_line(name ': ' value); END LOOP;
dbms_output.put_line('-----');
LOOP utl_http.read_line(resp, value, TRUE); dbms_output.put_line(value); END LOOP;
EXCEPTION WHEN utl_http.end_of_body THEN
utl_http.end_response(resp); END; /
Результат будет примерно такой:
HTTP response status code: 200 HTTP response reason: OK -- Date: Fri, 28 May 2004 13:01:49 GMT Server: Oracle HTTP Server Powered by Apache/1.3.22
(Win32) mod_plsql/3.0.9.8.3b PHP/4.3.0 mod_ssl/2.8.5
OpenSSL/0.9.6b mod_fastcgi/2.2.12 mod_oprocmgr/1.0 mod_perl/1.25 Last-Modified: Thu, 13 May 2004 15:15:47 GMT ETag: "0-98-40a39123" Accept-Ranges: bytes Content-Length: 152 Connection: close Content-Type: text/xml -- <cover>