Почему я получаю ORA-24247 с кодом в функции, но не в анонимном блоке? - PullRequest
1 голос
/ 13 мая 2019

Я пытаюсь написать простую функцию, чтобы проверить, действителен ли URL.

Я начал с анонимного блока, который выглядит так:

DECLARE
  httpuri HTTPURIType;
  y CLOB;
  x BLOB;
BEGIN
  httpuri := HTTPURIType('http://google.com');
  BEGIN
    DBMS_OUTPUT.put_line(httpuri.getContentType());
  EXCEPTION
  WHEN OTHERS
  THEN
     DBMS_OUTPUT.put_line('Bad Url');
  END;

END;
/

Это работает нормально, выводит"Плохой URL", когда URL плохой, и тип MIME другой.

Отлично, давайте напишем функцию для инкапсуляции всего;

CREATE OR REPLACE FUNCTION CHECK_URL 
(
  URL_IN IN VARCHAR2 
) RETURN VARCHAR2 AS 
  HTTPURI HTTPURIType;
  OUT_STRING VARCHAR2(32767);
BEGIN
  HTTPURI := HTTPURITYPE(URL_IN);
  BEGIN
    OUT_STRING := HTTPURI.GETCONTENTTYPE();
  EXCEPTION
  WHEN OTHERS
  THEN
     OUT_STRING := 'Error: Bad URL-' || URL_IN;
  END;
  RETURN OUT_STRING;
END CHECK_URL;

Я вызываю ее с помощью

SELECT CHECK_URL('http://google.com') FROM DUAL;

или

DECLARE
BEGIN
  DBMS_OUTPUT.PUT_LINE(CHECK_URL('http://google.com'));
END;
/

Всегда возвращается «Ошибка: неверный URL-», за которым следует введенный URL.Когда я убираю обработчик исключений, он выдает следующую ошибку:

ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1130
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at "SYS.HTTPURITYPE", line 123
ORA-06512: at "LMSADMIN.CHECK_URL", line 10
29273. 00000 -  "HTTP request failed"
*Cause:    The UTL_HTTP package failed to execute the HTTP request.
*Action:   Use get_detailed_sqlerrm to check the detailed error message.
           Fix the error and retry the HTTP request.

Я имею минимальное понимание списков ACL.Я использую оба набора кода от одного и того же пользователя, поэтому не уверен, почему получаю разные результаты.

Редактировать: Версия базы данных - 12c R2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...