6

两者有什么区别?在这两种情况下?授予此功能的权限会发生什么情况?在这两种情况下都会自动撤销,并且必须在重新创建时再次提供?请解释。

4

2 回答 2

15

当一个对象被删除时,与它相关的所有东西都会被删除,包括特权。CREATE OR REPLACE 并非如此。

SQL> create procedure p1 is
  2  begin
  3      null;
  4  end;
  5  /

Procedure created.

SQL> grant execute on p1 to xyz;

Grant succeeded.

SQL> select * from user_tab_privs_made
  2  /

GRANTEE                        TABLE_NAME                     GRANTOR                        PRIVILEGE                     GRA HIE
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --- ---
XYZ                            P1                             APC                            EXECUTE                       NO  NO

SQL> create or replace procedure p1 is
  2    n pls_integer;
  3  begin
  4   n := 1;
  5  end;
  6  /

Procedure created.

SQL> select * from user_tab_privs_made
  2  /

GRANTEE                        TABLE_NAME                     GRANTOR                        PRIVILEGE                     GRA HIE
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --- ---
XYZ                            P1                             APC                            EXECUTE                       NO  NO

SQL> drop procedure p1;

Procedure dropped.

SQL> create or replace procedure p1 (p in out pls_integer) is
  2  begin
  3    p := p+1;
  4  end;
  5  /

Procedure created.

SQL> select * from user_tab_privs_made
  2  /

no rows selected

SQL> 
于 2013-07-13T09:55:12.770 回答
4

我相信如果你替换一个函数,特权会保持不变,尽管我通常喜欢创建公共同义词并授予它们特权。

文档说

REPLACE 是在对象定义 (DDL) 中使用的可选关键字,用于用新的对象定义覆盖旧的对象定义。它在定义修改过程中保留对象的访问权限。但是,如果删除并重新创建对象,则其权限将丢失。

于 2013-07-13T09:56:51.540 回答