我想从我的函数中的某个网页获取HTML内容。我读过我可以用PLSQL中的UTL_HTML包来做。所以我在项目中制作了以下代码:
v_webcontent := utl_http.request(v_weblink);
这里先前声明了v_webconent和v_weblink。在de函数中运行它会产生一个PLSQL异常:PLS-00201: identifier 'UTL_HTTP' must be declared
我想这个问题是因为包不可用(来自这个链接:same error message)。
我遵循了建议。所以我在sql developer中创建了一个新的数据库连接作为SYSTEM角色(SYS不起作用,它说我只能使用SYSDBA或SYSOPER登录,但两者都不会使用我用数据库创建的标准密码)。然后我在上面的链接中输入了代码。
GRANT EXECUTE ON SYS.UTL_HTTP TO [database];
我创建的用户名为“数据库”。它首先给了我一个没有[]方括号的错误。表或视图不存在,因此我将括号括起来。现在它给出了错误:
Error starting at line : 1 in command -
GRANT EXECUTE ON SYS.UTL_HTTP TO [database]
Error report -
SQL Error: ORA-00987: missing or invalid username(s)
00987. 00000 - "missing or invalid username(s)"
*Cause:
*Action:
所以我不知道如何解决这个问题。在OP上面的链接中说他得到了另一个错误,所以我也检查了我是否有同样的问题。我进入了:
SELECT * FROM dba_objects WHERE object_name='UTL_HTTP'
它返回了4个条目。拥有者:SYS,SYS,PUBLIC和APEX_040000。
有人能帮助我吗?我是否需要以SYS和密码登录?
答案 0 :(得分:5)
从11g开始,您还必须创建一个访问控制列表('ACL'),指定哪些用户可以访问特定域,仅授予用户对utl_http的执行权限已经不够了!
这样的东西应该在11g中工作(在向你的数据库用户授予对UTL_HTTP的执行权限之后,由接受的答案指定):
SQL> BEGIN
2 DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl=>'mikesacl.xml',
3 description=>'access control list example',
4 principal=>'HR',
5 is_grant=>TRUE,
6 privilege=>'connect');
7 commit;
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> begin
2 DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
3 acl=>'mikesacl.xml',host=>'*');
4 commit;
5 end;
6 /
PL/SQL procedure successfully completed.
这是一个非常有用的链接,它解释了上述两个函数的参数:
http://www.oracleflash.com/36/Oracle-11g-Access-Control-List-for-External-Network-Services.html
祝你好运!答案 1 :(得分:2)
SYS AS SYSDBA
。grant execute on sys.utl_http to "Database";
不要使用任何方括号!这应该有效。
建议:不要为数据库用户命名数据库'。
重设SYS密码
cmd.exe
。cd
到您的${ORACLE_HOME}/database
。PWDsomething.ora
文件(其中something
将是您的实例名称),将其名称复制到剪贴板中。orapwd file=PWDsomething.ora password=SomePasswordOfMine force=y
,其中PWDsomething.ora
将替换为步骤3中的文件名,SomePasswordOfMine
必须替换为您希望拥有的密码。这可能有效。