在 SQL 中使用以下命令时出现错误;
EXEC SYS.DBMS_SESSION.SLEEP(1);
但是如果我使用 DBMS_LOCK 那么它就可以工作。
EXEC SYS.DBMS_LOCK.SLEEP(1);
参考:https : //oracle-base.com/articles/18c/dbms_session-sleep-18c
使用此命令时我缺少什么吗?
DBMS_LOCK 是一个特权例程,即它有很多权力,因此它通常受到保护,不能被一般使用。问题是,当时非常有用的 SLEEP 例程也不可用。
在18C,我们意识到这个问题,因此复制的睡眠习惯到DBMS_SESSION这是公开的。因此,每个人都可以使用 SLEEP。
在 18c 之前,您需要将 DBMS_LOCK 上的执行授予那些想要它的人(这是有风险的),或者创建一个包装函数并只授予它,例如
create or replace
procedure SYS.SLEEP(n number) is
begin
dbms_lock.sleep(n);
end;
grant execute on sys.sleep to public;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
743 次 |
| 最近记录: |