Oracle11gr2新增CREATE OR REPLACE FORCE TYPE功能

yangtingkun發表於2009-09-16

11.2中,Oracle增強了TYPE型別的依賴處理。

 

 

在以前的版本中,如果表或另一個物件依賴當前的物件,那麼這個物件是無法CREATE OR REPLACE的,在11.2中,這個限制被放寬,當依賴當前物件的物件是物件時,允許使用CREATE OR REPLACE FORCE來重建物件;如果依賴當前物件的物件是表,則新增的CREATE OR REPLACE FORCE功能也是無效的。

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

SQL> create type t_id_tab is table of number(10);
  2  /

型別已建立。

SQL> create type t_id_tab_tab is table of t_id_tab;
  2  /

型別已建立。

SQL> create or replace type t_id_tab is table of number(20);
  2  /
create or replace type t_id_tab is table of number(20);
*
1 行出現錯誤:
ORA-02303:
無法使用型別或表的相關性來刪除或取代一個型別


SQL> create or replace type t_id_tab force is table of number(20);
  2  /

型別已建立。

SQL> drop type t_id_tab;
drop type t_id_tab
*
1 行出現錯誤:
ORA-02303:
無法使用型別或表的相關性來刪除或取代一個型別


SQL> drop type t_id_tab force;

型別已刪除。

SQL> drop type t_id_tab_tab;

型別已刪除。

可以看到使用FORCE功能可以避免當前的TYPE被其他物件所依賴後而無法重建或刪除。不過這種依賴僅限於物件之間,如果依賴物件的是表,則FORCE功能不起作用:

SQL> create type t_type as object
  2  (id number,
  3  name varchar2(30));
  4  /

型別已建立。

SQL> create table t_type_tab of t_type;

表已建立。

SQL> create or replace type t_type as object
  2  (id number(5),
  3  name varchar2(30));
  4  /
create or replace type t_type as object
*
1 行出現錯誤:
ORA-02303:
無法使用型別或表的相關性來刪除或取代一個型別


SQL> create or replace type t_type force as object
  2  (id number(5),
  3  name varchar2(30));
  4  /
create or replace type t_type force as object
*
1 行出現錯誤:
ORA-22866:
無法替換具有表相關性的型別

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-614847/,如需轉載,請註明出處,否則將追究法律責任。

相關文章