利用CTAS建立表格注意事项Oracle认证考试

文章作者 100test 发表时间 2009:07:31 17:41:40
来源 100Test.Com百考试题网


"mkhgigh">   CTAS是通过查询,然后根据查询的结果来建立表格的一种方式。显然通过这种方式可以省去定义表结构的方法,而且在创建表的同时导入数据。不过在使用这个方法的时候,仍然有些内容需要引起数据库管理员的注意。就是笔者利用CTAS建立表格的过程。其中AD_USER是原表,而AD_USER_CTAS是利用CTAS方法建立的表。利用DESC查看两个表的结构,大家可以发现起不是简单的表复制而已。
  一、可以修改列名和字段的数据类型。
  大部分时候,在创建表时数据库管理员可能不希望照搬照抄原由的表格,而总希望能够更改某些内容。如列的名字或者数据类型等等。在使用CTAS方法来创建表的时候,是可以做到在一定范围之内对原有的内容进行更改。不过需要注意的是,笔者这里说的是在一定范围之内可以对原有的内容进行更改,而不是全部内容。即其可以更改的内容是有限的。
  一般来说,在利用CTAS方法创建表格时,可以更改目标列的列名。如上图所示,可以直接在Select查询语句中使用别名,来重定义目标列的名字。然后再利用CTAS来创建表格的时候,就会以目标列的别名来命名新的字段名称。另外需要注意的是,虽然可以修改数据类型,但是其修改需要受到严格的限制。如上图所示,在SELECT查询语句中,可以利用数据类型转换函数对目标数据类型进行转换,然后在新建立的表格中,就会以目标列的数据类型来定义新列的数据类型。也就是说,如果需要更改某个列的数据类型的话,则必须在SELECT查询语句中通过数据类型的转换函数来实现。而不能够通过其他方法来调整数据类型。除非是表格建立好之后,再在建立好的表格中进行更改。
  二、约束条件不一定会继承。
  利用CTAS建立表格时,原有的约束条件是否会被继承下来呢?再有些参考书上说,约束条件是不会被保存的。不过根据笔者对ORACLE数据库的了解,觉得这个说法太过于绝对。其实并不是所有的约束条件都不会被继承。恰恰相反,一般情况下都会被新表所继承,而只有在一些特殊的情况下才不会被保留。
  如上图所示,在原表中有一个字段叫做VALUE。在创建这个表的时候笔者给其加了一个“非空”的约束条件。利用CTAS创建新表之后,大家可以看到新表中也有一个字段VALUE,而且这个字段的约束条件也是非空的。可见,利用CTAS创建新表的时候,原表中的非空约束还是保存下来了。不过这个继承是有条件的,只有在不对原表中的数据类型进行更改的情况下,才能够保留这个约束条件。再如上图所示,笔者在SELECT语句中对NUM数据类型进行了转换,从数值型数据转换为字符型数据。在这个过程中,新表的数据类型确实转换过来了,但是从结果中可以看到,这个字段的约束条件没有继承过来。原表中这个字段有一个非空的约束条件,而在目的表中则没有。
  根据笔者的了解,只有在更改数据类型的情况下,这个非空等约束条件才不会被保留下来。如果只是更改了目标列的名字(通过查询列的别名来实现),如上图所示的name列,这个约束条件仍然会保留下来。在某些参考书上,对这个约束条件的描述有错误。笔者以前在学习的时候,也受其误导过。各位数据库管理员在这方面需要引起重视。为了加深理解,各位数据库管理员可以回去进行测试,以判断笔者所说的是否准确。
  三、索引与默认值不一定会被继承。
  虽然是否为空等约束条件可以保留下来,但是并不是说目标列中的所有内容都可以被继承下来。在定义表的时候,除了指定某个列是否为非空之外,还可以设置其他的一些内容。如可以设置某个列的默认值,或者对某个列设置唯一索引等等。那么这些字段的定义在使用CTAS来创建表格的时候是否会被保存下来呢?
  时数据库管理员可能不希望照搬照抄原由的表格,而总希望能够更改某些内容。如列的名字或者数据类型等等。在使用CTAS方法来创建表的时候,是可以做到在一定范围之内对原有的内容进行更改。不过需要注意的是,笔者这里说的是在一定范围之内可以对原有的内容进行更改,而不是全部内容。即其可以更改的内容是有限的。

相关文章


oracle安装与卸载修改盘符Oracle认证考试
oracle辅导:彻底删除oracle的步骤Oracle认证考试
Oracle数据库表连接方式及常见用法Oracle认证考试
Oracle使用序列创建自增字段Oracle认证考试
利用CTAS建立表格注意事项Oracle认证考试
用Java和oracle实现BLOB字段的字符串读取Oracle认证考试
oracle中将字典管理表空间转换为本地管理表空间Oracle认证考试
Oracle数据库归档Oracle认证考试
Oracle查询表空间使用情况(经典篇)Oracle认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛