Почему я не могу предоставить exec для dbms_lock.sleep() ИЛИ создать процедуру, используя ее (но я могу запустить ее самостоятельно)
Я пытаюсь написать небольшой кусочек 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 Database 11g Express Edition, выпуск 11.2.0.2.0 - 64-битная версия"
2 ответа
[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.
Согласно http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9013.htm
GRANT EXECUTE ON "object" TO PUBLIC;
Чтобы создать отдельную процедуру или функцию, либо спецификацию пакета, либо тело, вы должны выполнить следующие предварительные условия:
- У вас должна быть системная привилегия CREATE PROCEDURE, чтобы создать процедуру или пакет в вашей схеме, или системная привилегия CREATE ANY PROCEDURE, чтобы создать процедуру или пакет в схеме другого пользователя.
Внимание: для создания без ошибок, то есть для успешной компиляции процедуры или пакета, требуются следующие дополнительные привилегии: владельцу процедуры или пакета должны быть явно предоставлены необходимые объектные привилегии для всех объектов, на которые есть ссылки в теле кода; владелец не может получить необходимые привилегии через роли.
- Если привилегии владельца процедуры или пакета меняются, процедура должна быть повторно аутентифицирована перед выполнением. Если у владельца процедуры (или пакета) отозвана необходимая привилегия для ссылочного объекта, процедура не может быть выполнена.