Я пытаюсь написать небольшой фрагмент PL / SQL, в котором есть спящий режим, не связанный с процессором.
Следующее работает в sqldeveloper
begin
dbms_lock.sleep(5);
end;
НО (как тот же пользователь) я не могу делать следующее:
create or replace
procedure sleep(seconds in number)
is
begin
dbms_lock.sleep(seconds);
end;
без ошибки должен быть объявлен "идентификатор" DBMS_LOCK "... Забавно, как я мог запустить его без процедуры.
Как ни странно, когда я вхожу в систему как администратор базы данных, я могу запустить команду
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 - 64-битная производственная среда"
В соответствии с http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9013.htm
GRANT EXECUTE ON "object" TO PUBLIC;
Чтобы создать автономную процедуру или функцию, спецификацию или тело пакета, вы должны выполнить следующие предварительные требования:
Внимание: Для создания без ошибок, то есть для успешной компиляции процедуры или пакета, требуются следующие дополнительные привилегии: Владельцу процедуры или пакета должны быть явно предоставлены необходимые объектные привилегии для всех объектов, на которые есть ссылки в теле кода; владелец не может получить требуемые привилегии через роли.
[richard@f1 ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.2.0 Production on Fri Sep 14 13:33:18 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
SQL> connect sys@xe as sysdba
Enter password: ******
Connected.
SQL> grant execute on sys.dbms_lock to richard;
Grant succeeded.