创建或替换v / s删除函数并重新创建它

时间:2013-07-13 09:45:24

标签: sql database oracle plsql

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

2 个答案:

答案 0 :(得分:14)

删除对象时,与其关联的所有内容也会被删除,包括权限。创建或替换不是这样。

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> 

答案 1 :(得分:4)

我相信如果你更换一个功能,权限保持不变,虽然我通常喜欢创建公共同义词并授予权限。

The docs say

  

REPLACE是对象定义(DDL)中使用的可选关键字   使用新的objet定义覆盖旧的objet定义。它保留了   在定义修改期间访问对象的权限   处理。但是,如果删除并重新创建对象,则为其   特权丢失了。