oracle pl/sql DBMS_LOCK错误

use*_*234 14 oracle plsql

在Oracle PL/SQL中,我想测试睡眠功能.我正在使用hr架构.但它给了我错误:

PLS-00201: identifier 'DBMS_LOCK' must be declared
Run Code Online (Sandbox Code Playgroud)

码:

begin
 DBMS_LOCK.Sleep( 60 );
end;
/
Run Code Online (Sandbox Code Playgroud)

arc*_*ede 22

您应该将该包的执行权授予您的模式

grant execute on <object> to <user>;
Run Code Online (Sandbox Code Playgroud)

例如

connect as sys
grant execute on SYS.DBMS_LOCK to someuser;
Run Code Online (Sandbox Code Playgroud)

  • 以SYS用户身份连接.将SYS.DBMS_LOCK上的执行授予USERNAME; (2认同)

小智 5

如果您无权访问 sys 或您的 dba 不愿意这样做

   GRANT EXECUTE on SYS.DBMS_LOCK to you;
Run Code Online (Sandbox Code Playgroud)

您可以在数据库中创建一个 Java 过程:

   CREATE OR REPLACE PROCEDURE SLEEPIMPL (P_MILLI_SECONDS IN NUMBER) 
   AS LANGUAGE JAVA NAME 'java.lang.Thread.sleep(long)';
Run Code Online (Sandbox Code Playgroud)

并创建一个函数,调用java存储过程

 CREATE OR REPLACE FUNCTION sleep (
    seconds IN NUMBER
   ) RETURN NUMBER
   AS
   BEGIN
     SLEEPIMPL( seconds );
     RETURN seconds;
   END;
Run Code Online (Sandbox Code Playgroud)

之后

GRANT EXECUTE ON sleep TO public;
Run Code Online (Sandbox Code Playgroud)

你可以从一个选择中调用

select sleep(6000) from dual
Run Code Online (Sandbox Code Playgroud)