oracle ctas用法,ORACLE CTAS(create table as select)施用注意点

ORACLE CTAS(create table as select)使用注意点

ORACLE CTAS(create table as select)使用注意点

看到这篇文章Beware of default values when using CTAS,关于create table as select

(CTAS)值得注意的地方:使用这条sql创建的表不会带默认值。

操作以下实验证明之:

scott@TICKET> create table p

2 ( id number primary key ,

3 username varchar(25) ,

4 passwd varchar(24),

5 email varchar(30),

6 birth date,

7 tel number ,

8 sex char(1));

表已创建。

scott@TICKET> alter table p add age number ;

表已更改。

创建一个唯一约束

scott@TICKET> alter table p modify tel unique;

表已更改。

创建一个检查约束

scott@TICKET> alter table p add constraint p_ck_age check(age>0 and age<150);

表已更改。

创建一个默认约束

scott@TICKET> alter table p modify sex default '0';

表已更改。

scott@TICKET> desc user_constraints;

名称 是否为空? 类型

----------------------------------------- -------- ----------------------------

OWNER NOT NULL VARCHAR2(30)

CONSTRAINT_NAME NOT NULL VARCHAR2(30)

CONSTRAINT_TYPE VARCHAR2(1)

TABLE_NAME NOT NULL VARCHAR2(30)

SEARCH_CONDITION LONG

R_OWNER VARCHAR2(30)

R_CONSTRAINT_NAME VARCHAR2(30)

DELETE_RULE VARCHAR2(9)

STATUS VARCHAR2(8)

DEFERRABLE VARCHAR2(14)

DEFERRED VARCHAR2(9)

VALIDATED VARCHAR2(13)

GENERATED VARCHAR2(14)

BAD VARCHAR2(3)

RELY VARCHAR2(4)

LAST_CHANGE DATE

INDEX_OWNER VARCHAR2(30)

INDEX_NAME VARCHAR2(30)

INVALID VARCHAR2(7)

VIEW_RELATED VARCHAR2(14)

查看原表中的各种约束信息.

scott@TICKET> select constraint_name,constraint_type,status from user_constraints where table_name='P';

CONSTRAINT_NAME C STATUS

------------------------------ - --------

SYS_C0015996 P ENABLED

SYS_C0015997 U ENABLED

P_CK_AGE C ENABLED

通过查询创建相关的表信息.

scott@TICKET> create table persion as select * from p;

表已创建。

scott@TICKET> select * from persion;

未选定行

scott@TICKET> insert into persion select * from p;

已创建0行。

检查新表中的约束信息

scott@TICKET> select constraint_name,constraint_type,status from user_constraints where table_name='PERSION';

未选定行

再次证明了使用CTAS存在一些问题.

Oracle查询了一下文档(11gr1),关于 AS subquery 里面叙述到

Oracle Database automatically defines on columns in the new table any NOT NULL constraints that were explicitly

created on the corresponding columns of the selected table if the subquery selects the column rather than an expression

containing the column. If any rows violate the constraint, then the database does not create the table and returns

an error.

显示的NOT NULL约束自动会带到新表。

NOT NULL constraints that were implicitly created by Oracle Database on columns of the selected table (for example,

for primary keys) are not carried over to the new table.

隐式的NOT NULL约束不会带到新表,如主键。

In addition, primary keys, unique keys, foreign keys, check constraints, partitioning criteria, indexes, and column

default values are not carried over to the new table.

另外,主键,唯一,外键,check约束,分区,索引以及列的默认值不会带到新表。

If the selected table is partitioned, then you can choose whether the new table will be partitioned the same way,

partitioned differently, or not partitioned. Partitioning is not carried over to the new table. Specify any desired

partitioning as part of the CREATE TABLE statement before the AS subquery clause.

在新表上可以选择是否像像旧表那样分区,或者不同的分区形式,或者创建非分区表。在AS subquery句之前指定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值