ITPub博客

首页 > 数据库 > Oracle > Oracle入门之Create type简单用法

Oracle入门之Create type简单用法

原创 Oracle 作者:ITtomilk 时间:2015-10-31 14:22:14 0 删除 编辑
本文转载处:http://itlab.idcquan.com/Oracle/induction/897648.html

在11.2之前,只要有其他的表或TYPE依赖了当前对象,这个对象就无法进行REPLACE了

点击(此处)折叠或打开

  1. SQL> create type t_num_tab is table of number;
  2.     
  3.     2 /
  4.     
  5.     Type created.
  6.     
  7.     SQL> create type t_record is object (id number, n_tab t_num_tab);
  8.     
  9.     2 /
  10.     
  11.     Type created.
  12.     
  13.     SQL> create or replace type t_num_tab is table of number(5);
  14.     
  15.     2 /
  16.     
  17.     create or replace type t_num_tab is table of number(5);
  18.     
  19.     *
  20.     
  21.     ERROR at line 1:
  22.     
  23.     ORA-02303: cannot drop or replace a type with type or table dependents
这是11.2之前的情况,尝试执行CREATE OR REPLACE将会导致ORA-2303错误,在11.2中Oracle增加了FORCE功能,使得一个仅被TYPE所依赖的对象仍然可以执行REPLACE的操作:

点击(此处)折叠或打开

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

  3. Type created.

  4. SQL> select * from v$version;

  5. BANNER

  6. --------------------------------------------------------------------------------

  7. Oracle Database11gEnterprise Edition Release 11.2.0.3.0 - 64bit Production

  8. PL/SQL Release 11.2.0.3.0 - Production

  9. CORE 11.2.0.3.0 Production

  10. TNS for Solaris: Version 11.2.0.3.0 - Production

  11. NLSRTL Version 11.2.0.3.0 - Production
有意思的是,FORCE语句的位置不对则不会生效,这时同样会报ORA-2303的错误,而并不会导致语句错误:

点击(此处)折叠或打开

  1. SQL> create or replace force type t_num_tab is table of number(5);
  2.     
  3.     create or replace force type t_num_tab is table of number(5)
  4.     
  5.     *
  6.     
  7.     ERROR at line 1:
  8.     
  9.     ORA-02303: cannot drop or replace a type with type or table dependents
  10.     
  11.     SQL> create or replace type t_num_tab is table of number(5) force;
  12.     
  13.     2 /
  14.     
  15.     create or replace type t_num_tab is table of number(5) force;
  16.     
  17.     *
  18.     
  19.     ERROR at line 1:
  20.     
  21.     ORA-02303: cannot drop or replace a type with type or table dependents
最后这个功能只对被TYPE所依赖的对象有效,一旦对象被表所依赖,则FORCE功能也不起作用:

点击(此处)折叠或打开

  1. SQL> create table t_type_tab (id number, c_tab t_num_tab)
  2.     
  3.     2 nested table c_tab storetbas c_tab_tab;
  4.     
  5.     Table created.
  6.     
  7.     SQL> create or replace type t_num_tab force is table of number(6);
  8.     
  9.     2 /
  10.     
  11.     create or replace type t_num_tab force is table of number(6);
  12.     
  13.     *
  14.     
  15.     ERROR at line 1:
  16.     
  17.     ORA-22866: cannot replace a type with table dependents

Oracle的错误信息也变成了ORA-22866.其实这时可以预料的,因为一旦创建了表,就相当于进行了实体化的工作,如果依赖的类型发生了变化,将会影响表中已有的数据的读写。不过其实Oracle可以做到更进一步,就是如果表段没有创建或者表中没有插入数据的情况下,允许对依赖的对象进行修改。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30260000/viewspace-1819690/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-05-25

  • 博文量
    42
  • 访问量
    78520