как запускать sql файл с урла в oracle?

достаточно странный вопрос наверное... Попробую сформулировать проще: Предположим у меня есть урл "www.mycite.com/mySqlFile.sql" и там лежит sql скрипт с новыми инсертами, которые мне нужно автоматически заливать к себе в базу каждый день. Есть ли у какого-то варианты как такое можно реализовать? Я понимаю что это нужно делать через job в оракле, но не совсем понимаю как можно вытягивать sql файл с урла... Заранее спасибо!

В добавок: сейчас у меня есть только урл, и ежедневно обновляемый файл с инсертами, пока что приходится запускать инсерты в ручную каждый день


Ответы (1 шт):

Автор решения: Alex R.

За основу взял этот ответ. Необходимо использовать пакет UTL_HTTP. Так как EXECUTE IMMEDIATE работает только со строками придется ограничиться размером файла 32767. Также эта команда не может выполнить несколько SQL-инструкций подряд, поэтому надо использовать PL/SQL блок, он должен быть или в файле или создаваться динамически, как в примере ниже.

Для работы потребуется выдать права ACL для схемы с процедурой.

CREATE OR REPLACE PROCEDURE execute_from_url (p_url  IN  VARCHAR2) AS
  l_http_request   UTL_HTTP.req;
  l_http_response  UTL_HTTP.resp;
  l_file           varchar2(32767);
BEGIN
  -- 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
    UTL_HTTP.read_text(l_http_response, l_file, 32767);
  EXCEPTION
    WHEN UTL_HTTP.end_of_body THEN
      UTL_HTTP.end_response(l_http_response);
  END;

  IF l_file IS NOT NULL THEN
     EXECUTE IMMEDIATE 'BEGIN ' || l_FILE || 'END;'
  END IF;

EXCEPTION
  WHEN OTHERS THEN
    UTL_HTTP.end_response(l_http_response);
    DBMS_LOB.freetemporary(l_file);
    RAISE;
END;
→ Ссылка