有疑问可以去itpub讨论:http://www.itpub.net/thread-1804872-1-1.html

对于alter table setunused的用法,查官方文档:

alter_table::=

column_clauses::=

drop_column_clause ::=

SET UNUSED Clause

Specify SET UNUSED to mark one or more columns asunused. Specifying this clause does not actually remove the target columns fromeach row in the table. That is, it does not restore the disk space used bythese columns. Therefore, the response time is faster than when you execute theDROP clause.

You can view all tables with columns marked UNUSED in the data dictionary views USER_UNUSED_COL_TABS, DBA_UNUSED_COL_TABS, and ALL_UNUSED_COL_TABS.

Unused columns are treated as if they were dropped, even though theircolumn data remains in the table rows. After a column has been marked UNUSED, you have no access to that column. A SELECT * query will not retrieve data from unusedcolumns. In addition, the names and types of columns marked UNUSED will not be displayed during a DESCRIBE, and you can add to the table a new column with the same name as an unusedcolumn.

对上面的题,先做实验,看测试结果,一一验证:

1、在gyj用户下创建一个表:

gyj@OCM> create table emp as select employee_id,first_name,manager_idfrom hr.employees;

Table created.

2、 创建一个公共的同义词e

gyj@OCM> create public synonym e for emp;

Synonym created.

gyj@OCM> select * from e;

EMPLOYEE_ID FIRST_NAME          MANAGER_ID

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

198 Donald                      124

199 Douglas                     124

省略结果。。。。。

3、创建一个私有的同义词m

gyj@OCM> create  synonym m foremp;

Synonym created.

gyj@OCM> select * from m;

EMPLOYEE_ID FIRST_NAME          MANAGER_ID

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

198 Donald                      124

199 Douglas                     124

省略结果。。。。。

4、在字段manager_id列上建一个条件check约束

gyj@OCM> alter table emp add(constraint c_emp_manageridcheck(manager_id>=100));

Table altered.

gyj@OCM> select CONSTRAINT_NAME from user_constraints wheretable_name='EMP';

CONSTRAINT_NAME

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

C_EMP_MANAGERID

gyj@OCM> insert into emp values(500,'guoyJoe',99);

insert into emp values(500,'guoyJoe',99)

*

ERROR at line 1:

ORA-02290: check constraint (GYJ.C_EMP_MANAGERID) violated

报错是说明不满足约束,说明约束起作用了

5、创建一个视图v_emp

gyj@OCM> create view v_emp as select *  from emp;

View created.

gyj@OCM> select * from v_emp;

EMPLOYEE_ID FIRST_NAME          MANAGER_ID

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

198 Donald                      124

199 Douglas                     124

省略结果。。。

6、在列manager_id上创建一个索引

gyj@OCM> create index idx_id on emp(manager_id);

Index created.

gyj@OCM> select index_name from user_indexes where table_name='EMP';

INDEX_NAME

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

IDX_ID

好,我们按上面的题意,开始做alter table set unused操作:

gyj@OCM> altertable emp set unused ( manager_id);

Table altered.

同义词在数据字典中还能用,无需重建,所以答案A错

gyj@OCM> select OBJECT_NAME  FROM user_objects where object_type='SYNONYM'AND OBJECT_NAME IN('M','E');

OBJECT_NAME

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

M

gyj@OCM> select * from e;

EMPLOYEE_ID FIRST_NAME          MANAGER_ID

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

198 Donald                      124

199 Douglas                     124

省略结果。。。。。

gyj@OCM> select * from m;

EMPLOYEE_ID FIRST_NAME          MANAGER_ID

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

198 Donald                      124

199 Douglas                     124

省略结果。。。。。

数据字典中manager_id列的约束被删除了。所以答案B对

gyj@OCM> select CONSTRAINT_NAME from user_constraints wheretable_name='EMP';

no rows selected

去查视图,报错如下:

gyj@OCM> select * from v_emp;

select * from v_emp

*

ERROR at line 1:

ORA-04063: view "GYJ.V_EMP" has errors

此时视图不能用了。。。答案C的意思必须删除这个视图再重建这个视图才行,一定要这做吗?我不重建视图,在视图所在表中重新添加manager_id这一列,看看视图能不能用:

gyj@OCM> alter table emp add( MANAGER_ID NUMBER(6));

Table altered.

gyj@OCM> select * from v_emp;

EMPLOYEE_ID FIRST_NAME          MANAGER_ID

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

198 Donald

199 Douglas

省略结果。。。

说明视图无须删除和重建,只在表中添加刚刚被unused的这列就可以了,所以答案C错的

数据字典中manager_id列的索引被删除了。所以答案D错

gyj@OCM>  select index_name fromuser_indexes where table_name='EMP';

no rows selected

正确答案是:B

[每日一题] OCP1z0-047 :2013-07-26 alter table set unused之后各种情况处理的更多相关文章

  1. [Buzz.Today]2013.07.26

    # OpenFab 3D printing hardware is rapidly scaling up to output continuous mixtures of multiple mater ...

  2. 老男孩IT教育-每日一题汇总

    老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...

  3. PL/SQL Challenge 每日一题:2014-3-14 11gR2中带RELIES_ON子句的RESULT_CACHE函数

    PL/SQL Challenge 每日一题:2014-3-14 11gR2中带RELIES_ON子句的RESULT_CACHE函数 最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可 ...

  4. 【JavaScript】【dp】Leetcode每日一题-解码方法

    [JavaScript]Leetcode每日一题-解码方法 [题目描述] 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : 'A' -> 1 'B' -> 2 ... 'Z' -& ...

  5. 【python】Leetcode每日一题-前缀树(Trie)

    [python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ...

  6. LeetCode 每日一题「判定字符是否唯一」

    我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. 题目 ...

  7. 【Java每日一题】20170106

    20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  8. 【Java每日一题】20170105

    20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  9. 【Java每日一题】20170104

    20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

随机推荐

  1. Android_开发人员经常使用的颜色

    Android开发中经常要用一些个性化的颜色,然而茫茫的RBG颜色对比表,往往给人眼花缭乱的感觉,更别说从中轻易选出一两种比較惬意的颜色,以下我就总结一下开发中经常使用到的比較绚丽的颜色. 以下是经常 ...

  2. IOS开发中怎样验证邮箱的合法性

    IOS开发中怎样验证邮箱的合法性 文章参考:http://www.codes51.com/article/detail_94157.html 代码: - (void)viewDidLoad { [su ...

  3. 提高mysql千万级数据SQL的查询优化30条总结

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  4. 编译预处理 -- 带参数的宏定义--【sky原创】

    原文:编译预处理 -- 带参数的宏定义--[sky原创] 如有转载请注明出处   编译预处理  --  带参数的宏定义 前面为输出文件,后面为输入文件 gcc -E -o test.i test.c ...

  5. CSS3 选择器读解

    文章资料来自于W3Cfuns CSS3.0 四个基本的结构性伪类选择器:root 此选择器将绑定到页面的根元素中,所谓根元素,是指文档树中最顶层的元素,也就是<html>部 分. < ...

  6. Appium根据xpath获取控件实例随笔

    如文章<Appium基于安卓的各种FindElement的控件定位方法实践>所述,Appium拥有众多获取控件的方法.其中一种就是根据控件所在页面的XPATH来定位控件. 本文就是尝试通过 ...

  7. YUV格式转换RGB(基于opencv)

    在编写代码将需要处理YUV格从每个视频帧中提取,然后将其保存为图片.有两种常见的方法在线,第一种是通过opencv自带cvCvtColor,可是这样的方法有bug.得到的图片会泛白.另外一种方法是公式 ...

  8. 算法如功夫——C++ 用递归函数计算n的阶乘n!

    算法如功夫,套路练久了,才干应用自如! 学功夫不能死练,知其所以然,取长补短! #include <iostream.h> int main(int argc, char* argv[]) ...

  9. Android 4.4堆叠结构的变化

    我们知道,activity 在 AMS 的形式是 ActivityRecord,task 在 AMS 的形式TaskRecord,流程 AMS 该管理形式 ProcessRecord. 我们先看下 4 ...

  10. APUE学习笔记(1):APUE运行环境

    APUE全称<Advanced Programming in the UNIX Environment>(UNIX环境高级编程) 书中例子大都使用作者自己写的头文件,所以需要解决一下,还好 ...