database - 从 Oracle 11g 中给定的 url 下载文件并将其保存到 blob 类型列中的过程

标签 database oracle stored-procedures plsql oracle11g

我遇到了一个问题。我需要在 Oracle 11g 中创建一个过程,该过程将从给定行获取 URL 并从该 URL 下载文件并将其保存在 blob 类型列中。你们能告诉我实现这一目标的方法吗?

最佳答案

您需要查看软件包 UTL_HTTP 的文档

这是sample使用

这是上面示例中的代码

begin

  load_binary_from_url('http://www.oracle.com/us/hp07-bgf3fafb-db12c-2421053.jpg');
end;  


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, 32767);
      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;
/

关于database - 从 Oracle 11g 中给定的 url 下载文件并将其保存到 blob 类型列中的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33706770/

相关文章:

mysql - SQL连接和比较

sql-server - tsql:存储过程和行锁

php - PHP 数据库查询中的 Declare 函数等效项是什么?

java - 从 Oracle 存储过程中检索数组列表 - Java

php - 如何从html删除按钮中删除mysql数据?

database - PostgreSQL - 产品的最佳数据库模型和该产品的多种评级类型是什么?

database - 我应该创建两个表来存储对象的具体信息吗?

asp.net - Oracle中Link DB参数问题

sql - 使用 SQL 从日期中减去 n 天

java - 带条件(真或某些原因导致 NPE)的 Hibernate 选择列表不返回任何结果