DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Получение HTML и двоичных файлов в таблицы по HTTP

Эта статья дает два кратких примера того, как страницы HTML и двоичные файлы, такие как изображения или документы, могут быть загружены по HTTP и помещены непосредственно в таблицы. Код в этой статье использует два подхода. Первое использование UTL_HTTP и пакеты DBMS_LOB, в то время как второе использует HTTPURITYPE, чтобы достигнуть этого.

HTML в CLOB

Сначала мы создадим таблицу для заполнения данными.
CREATE TABLE http_clob_test (
id NUMBER(10),
url VARCHAR2(255),
data CLOB,
CONSTRAINT http_clob_test_pk PRIMARY KEY (id)
);
CREATE SEQUENCE http_clob_test_seq;
Затем мы создаем процедуру, чтобы получить и хранить данные HTML.
CREATE OR REPLACE PROCEDURE load_html_from_url (p_url IN VARCHAR2) AS
l_http_request UTL_HTTP.req;
l_http_response UTL_HTTP.resp;
l_clob CLOB;
l_text VARCHAR2(32767);
BEGIN
-- Initialize the CLOB.
DBMS_LOB.createtemporary(l_clob, FALSE);
-- Make a HTTP request and get the response.
l_http_request := UTL_HTTP.begin_request(p_url);
l_http_response := UTL_HTTP.get_response(l_http_request);
-- Copy the response into the CLOB.
BEGIN
LOOP
UTL_HTTP.read_text(l_http_response, l_text, 32766);
DBMS_LOB.writeappend (l_clob, LENGTH(l_text), l_text);
END LOOP;
EXCEPTION
WHEN UTL_HTTP.end_of_body THEN
UTL_HTTP.end_response(l_http_response);
END;
-- Insert the data into the table.
INSERT INTO http_clob_test (id, url, data)
VALUES (http_clob_test_seq.NEXTVAL, p_url, l_clob);
-- Relase the resources associated with the temporary LOB.
DBMS_LOB.freetemporary(l_clob);
EXCEPTION
WHEN OTHERS THEN
UTL_HTTP.end_response(l_http_response);
DBMS_LOB.freetemporary(l_clob);
RAISE;
END load_html_from_url;
/
Наконец мы выполняем процедуру с подходящим URL.
EXEC load_html_from_url('http://localhost/');
PL/SQL procedure successfully completed.
COLUMN url FORMAT A30
SELECT id,
url,
DBMS_LOB.getlength(data) AS length
FROM http_clob_test;
ID URL LENGTH
---------- ------------------------------ ----------
1 http://localhost/ 1494
1 row selected.
SQL>

Двоичные файлы в BLOB

Сначала мы создадим таблицу для заполнения данными.
CREATE TABLE http_blob_test (
id NUMBER(10),
url VARCHAR2(255),
data BLOB,
CONSTRAINT http_blob_test_pk PRIMARY KEY (id)
);
CREATE SEQUENCE http_blob_test_seq;
Затем мы создаем процедуру, чтобы получить и сохранить двоичные данные.
CREATE OR REPLACE PROCEDURE load_binary_from_url (p_url IN VARCHAR2) AS
l_http_request UTL_HTTP.req;
l_http_response UTL_HTTP.resp;
l_blob BLOB;
l_raw RAW(32767);
BEGIN
-- Initialize the BLOB.
DBMS_LOB.createtemporary(l_blob, FALSE);
-- Make a HTTP request and get the response.
l_http_request := UTL_HTTP.begin_request(p_url);
l_http_response := UTL_HTTP.get_response(l_http_request);
-- Copy the response into the BLOB.
BEGIN
LOOP
UTL_HTTP.read_raw(l_http_response, l_raw, 32766);
DBMS_LOB.writeappend (l_blob, UTL_RAW.length(l_raw), l_raw);
END LOOP;
EXCEPTION
WHEN UTL_HTTP.end_of_body THEN
UTL_HTTP.end_response(l_http_response);
END;
-- Insert the data into the table.
INSERT INTO http_blob_test (id, url, data)
VALUES (http_blob_test_seq.NEXTVAL, p_url, l_blob);
-- Relase the resources associated with the temporary LOB.
DBMS_LOB.freetemporary(l_blob);
EXCEPTION
WHEN OTHERS THEN
UTL_HTTP.end_response(l_http_response);
DBMS_LOB.freetemporary(l_blob);
RAISE;
END load_binary_from_url;
/
Наконец мы выполняем процедуру с подходящим URL
EXEC load_binary_from_url('http://localhost/apache_pb.gif');
PL/SQL procedure successfully completed.
COLUMN url FORMAT A30
SELECT id,
url,
DBMS_LOB.getlength(data) AS length
FROM http_blob_test;
ID URL LENGTH
---------- ------------------------------ ----------
1 http://localhost/apache_pb.gif 2326
1 row selected.
SQL>

HTTPURITYPE

HTTPURITYPE делает большую часть тяжелой работы для нас, как показано в этих примерах. Сначала CLOB.
CREATE OR REPLACE PROCEDURE load_html_from_url (p_url IN VARCHAR2) AS
l_clob CLOB;
BEGIN
l_clob := HTTPURITYPE.createuri(p_url).getclob();
-- Insert the data into the table.
INSERT INTO http_clob_test (id, url, data)
VALUES (http_clob_test_seq.NEXTVAL, p_url, l_clob);
END load_html_from_url;
/
EXEC load_html_from_url('http://localhost/');
Затем BLOB
CREATE OR REPLACE PROCEDURE load_binary_from_url (p_url IN VARCHAR2) AS
l_blob BLOB;
BEGIN
l_blob := HTTPURITYPE.createuri(p_url).getblob();
-- Insert the data into the table.
INSERT INTO http_blob_test (id, url, data)
VALUES (http_blob_test_seq.NEXTVAL, p_url, l_blob);
END load_binary_from_url;
/
EXEC load_binary_from_url('http://localhost/apache_pb.gif');







jAntivirus