Oracle 为什么我得到的ORA-24247在函数中有代码,但在匿名块中没有?

Oracle 为什么我得到的ORA-24247在函数中有代码,但在匿名块中没有?,oracle,plsql,Oracle,Plsql,我试图编写一个简单的函数来验证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_OUTP

我试图编写一个简单的函数来验证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;

这总是返回“错误:错误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。

ACL/privs是直接授予函数所有者还是通过角色授予的?必须是具有特权的。正如我提到的,我对ACL的了解很少。我怎么知道呢?我试着以sys的形式运行select语句(函数),结果是一样的。ACL在Oracle 11g和12c之间的工作方式不同,您应该添加数据库版本。ACL/priv是直接授予函数所有者还是通过角色授予的?必须是具有特权的。正如我提到的,我对ACL的了解很少。我怎么知道呢?我试着用sys运行select语句(函数),结果是一样的。ACL在Oracle 11g和12c之间的工作方式不同,您应该添加数据库版本。
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.