我正在尝试编写一小段 PL/SQL,其中包含非 CPU 燃烧睡眠。
以下在 sqldeveloper 中工作
begin
dbms_lock.sleep(5);
end;
但是(作为同一用户),我不能执行以下操作:
create or replace
procedure sleep(seconds in number)
is
begin
dbms_lock.sleep(seconds);
end;
没有错误“必须声明标识符“DBMS_LOCK”...有趣,因为我可以在没有程序的情况下运行它。
同样奇怪,当我以DBA身份登录时,我可以运行命令
grant exec on dbms_lock to public;
我得到
ERROR at line 1:
ORA-00990: missing or invalid privilege
这是 Oracle 版本“Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production”
根据http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9013.htm
要创建独立过程或函数,或者包规范或主体,您必须满足以下先决条件:
注意:要无错误地创建,即成功编译过程或程序包,需要以下额外权限: 过程或程序包的所有者必须已明确授予代码主体中引用的所有对象所需的对象权限; 所有者无法通过角色获得所需的权限。