【问题标题】:Stored procedure error PLS-00201: identifier 'UTL_HTTP' must be declared存储过程错误 PLS-00201:必须声明标识符“UTL_HTTP”
【发布时间】:2014-12-09 18:42:41
【问题描述】:

我正在尝试创建一个从服务请求一些 XML 数据的存储过程。我在网上找到了几个例子,它们都指向使用这个 UTL_HTTP 包。但是,每次我尝试用它编译我的存储过程时,我都会收到错误:

PLS-00201: identifier 'UTL_HTTP' must be declared

这是我要使用的代码的基本框架。

PROCEDURE GET_XML_DATA2 AS

BEGIN
   DECLARE
   v_soap_request    VARCHAR2(32767);
   v_soap_response   VARCHAR2(32767);

   v_http_request    UTL_HTTP.req; --Fails here
   v_http_response   UTL_HTTP.resp; -- Fails here too
   v_action          VARCHAR2(4000) := '';

BEGIN

    null;

END;

END GET_XML_DATA2;

它在指示的行中失败并且无法编译。我正在使用 Oracle Express Edition,并且我已经尝试授予我的用户对该包的执行权限。它不起作用。 我还能看什么?还有什么可能导致这种情况? 谢谢!

【问题讨论】:

    标签: oracle stored-procedures


    【解决方案1】:

    正如您自己已经弄清楚的那样,这似乎是一个权限问题。您的用户不知何故无法访问 UTL_HTTP 包。确保您的用户对包具有 EXECUTE 权限:

    GRANT EXECUTE ON SYS.UTL_HTTP TO my_user;
    

    请注意,您可能必须以 SYS 身份执行此操作。

    使用 SQL Developer(如果您正在进行 PL/SQL 开发,我可以推荐它),看看您是否可以通过某种方式查看该包。如果这没有帮助,请发布您的用户当前拥有的权限。

    【讨论】:

    • 感谢您的回复!我不能(仍然不能)以 SYS 身份登录。我尝试以 SYSTEM 身份登录并执行您的命令 GRANT EXECUTE ON SYS.UTL_HTTP TO my_user。它没有工作,并给了我这个错误:错误从命令的第 1 行开始:GRANT EXECUTE ON SYS.UTL_HTTP TO spotfire 错误报告:SQL 错误:ORA-00942:表或视图不存在 00942.00000 -“表或视图不存在”
    • SELECT * FROM dba_objects WHERE object_name='UTL_HTTP' 返回什么?虽然我认为 UTL_HTTP 应该存在于你的数据库中......也许它在 XE 中不可用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多