在create or replace package
和drop
上使用create
更改Oracle PL / SQL中的包有什么好处?
答案 0 :(得分:2)
用户"A"
有一个包pkg_tst
。他们已经将权限授予其他用户," B"。他们还有一个程序p1
,这取决于包。
SQL> select * from user_tab_privs made where table_name = 'PKG_TST';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILE GRA HIE
------- ------- ---------- ------- ------- --- ---
B A PKG_TST A EXECUTE NO NO
SQL> select status from user_objects where object_name = 'P1';
STATUS
-------
VALID
SQL>
现在,如果用户"A"
重新创建包,则任何授权仍然存在且依赖关系仍然有效(感谢Fine-grained dependency management!)
SQL> create or replace package pkg_tst as
2 procedure p1;
3 end pkg_tst;
4 /
Package created.
SQL> select * from user_tab_privs made where table_name = 'PKG_TST';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILE GRA HIE
------- ------- ---------- ------- ------- --- ---
B A PKG_TST A EXECUTE NO NO
SQL> select status from user_objects where object_name = 'P1';
STATUS
-------
VALID
SQL>
将它与丢弃包并重新创建时发生的情况进行比较。
SQL> drop package pkg_tst;
Package dropped.
SQL> create or replace package pkg_tst as
2 procedure p1;
3 end pkg_tst;
4 /
Package created.
SQL>create or replace package body pkg_tst as
2 procedure p1
3 is
4 begin
5 dbms_output.put_line($$plsql_unit||' works!');
6 end p1;
7 end;
8 /
Package body created.
SQL> select * from user_tab_privs made where table_name = 'PKG_TST';
no rows selected
SQL> select status from user_objects where object_name = 'P1';
STATUS
-------
INVALID
SQL>
因此,使用create or replace package
优于drop package
和create package
的好处是显而易见的。它最大限度地减少了将代码更改部署到应用程序的其他部分的影响:
答案 1 :(得分:1)
让我们说: 1)你创建了包; 2)你修改了它。现在,你做什么?包已经创建,所以为了保存您的更改,您必须删除它,然后再次创建。你手动完成这个。但是"创建或替换"你不必这样做。您只需修改并点击编译 - 将始终保存更改。它就像一个具有刷新功能的保存。结论 - oracle节省了您宝贵的时间,您不必再花费额外的时间。
答案 2 :(得分:0)
通过REPLACING而不是DROPPING&创建您依赖于包的其他包/ funcs / procs的问题较少。如果你放弃这些将变得无效。