11gr2增強CREATE OR REPLACE TYPE功能

yangtingkun發表於2012-07-06

11.2對於CREATE OR REPLACE TYPE語句進行了增加,增加了FORCE選項。

 

 

11.2之前,只要有其他的表或TYPE依賴了當前物件,這個物件就無法進行REPLACE了:

SQL> create type t_num_tab is table of number;
2 /

Type created.

SQL> create type t_record is object (id number, n_tab t_num_tab);
2 /

Type created.

SQL> create or replace type t_num_tab is table of number(5);
2 /
create or replace type t_num_tab is table of number(5);
*
ERROR at line 1:
ORA-02303: cannot drop or replace a type with type or table dependents

這是11.2之前的情況,嘗試執行CREATE OR REPLACE將會導致ORA-2303錯誤,在11.2Oracle增加了FORCE功能,使得一個僅被TYPE所依賴的物件仍然可以執行REPLACE的操作:

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

Type created.

SQL> select * from v$version;

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

有意思的是,FORCE語句的位置不對則不會生效,這時同樣會報ORA-2303的錯誤,而並不會導致語句錯誤:

SQL> create or replace force type t_num_tab is table of number(5);
create or replace force type t_num_tab is table of number(5)
*
ERROR at line 1:
ORA-02303: cannot drop or replace a type with type or table dependents


SQL> create or replace type t_num_tab is table of number(5) force;
2 /
create or replace type t_num_tab is table of number(5) force;
*
ERROR at line 1:
ORA-02303: cannot drop or replace a type with type or table dependents

最後這個功能只對被TYPE所依賴的物件有效,一旦物件被表所依賴,則FORCE功能也不起作用:

SQL> create table t_type_tab (id number, c_tab t_num_tab)
2 nested table c_tab store as c_tab_tab;

Table created.

SQL> create or replace type t_num_tab force is table of number(6);
2 /
create or replace type t_num_tab force is table of number(6);
*
ERROR at line 1:
ORA-22866: cannot replace a type with table dependents

Oracle的錯誤資訊也變成了ORA-22866。其實這時可以預料的,因為一旦建立了表,就相當於進行了實體化的工作,如果依賴的型別發生了變化,將會影響表中已有的資料的讀寫。不過其實Oracle可以做到更進一步,就是如果表段沒有建立或者表中沒有插入資料的情況下,允許對依賴的物件進行修改。

 

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

相關文章