5.12 自测题
(1) 如果在没有指定模式的情况下创建表,它会在哪种模式中(选择一个最佳答案)?
A.它会是孤表,没有模式
B.创建会失败
C.会在SYS模式中
D.会在用户创建它的模式中
E.会在PUBLIC模式中
(2) 几个对象类型共享相同的名称空间,因此在相同的模式中不能有相同的名称。下面哪些对象类型不在与其他对象类型相同的名称空间中(选择一个最佳答案)?
A.索引
B. PL/SQL存储过程
C.同义词
D.表
E.视图
(3) 下面哪些语句会因为表名不合法而失败(选择两个正确答案)?
A.create table "SELECT" (col1 date);
B. create table "lowercase"(col1 date);
C.create table number1 (col1 date);
D.create table 1number (col1 date);
E.create table update (col1 date);
(4) 什么是堆表的显著特性(选择两个正确答案)?
A.堆表可以保存可变长度的行
B.多个表可以在单个堆中保存行
C.堆中的行是随机排列的
D.不能给堆表编索引
E.堆中的表没有主键
(5) 下面哪些数据类型是可变长度的(选择所有正确答案)?
A.BLOB
B. CHAR
C.LONG
D.NUMBER
E.RAW
F.VARCHAR2
(6) 分析下列语句:
create table tab1 (c1 number(1), c2 date); alter session set nls_date_format='dd-mm-yy'; insert into tab1 values (1.1, '31-01-07');
插入会成功吗(选择一个最佳答案)?
A.插入会失败,因为1.1太长
B.插入会失败,因为’31-01-07’是字符串不是日期
C.插入会因为A和B所述的原因而失败
D.插入会成功
(7) Oracle不支持下面哪种数据类型作为内部数据类型(选择一个最佳答案)?
A.CHAR
B. FLOAT
C.INTEGER
D.STRING
(8) 分析的语句:
create table t1 as select * from regions where 1=2;
结果是什么(选择一个最佳答案)?
A.会因为不可能的条件而失败
B.不会创建表,因为条件返回FALSE
C.会创建表T1,但不会插入行,因为条件返回FALSE
D.会创建表T1,会插入REGIONS表中的所有行,因为条件返回NULL作为行过滤器
(9) 当使用下面的语句创建表时:
create table newtab as select * from tab;
对新表有约束吗(选择一个最佳答案)?
A.对新表没有约束,因为使用子查询创建表时没有复制约束
B. TAB上的所有约束都会复制到NEWTAB
C.会复制主键和唯一约束,但不会复制检查约束和非空约束
D.会复制检查约束和非空约束,但不会复制唯一约束和主键约束
E.会复制所有约束,外键约束除外
(10) 下列哪些约束要求使用索引(选择所有正确答案)?
A.CHECK
B. NOT NULL
C.PRIMARY KEY
D.UNIQUE
(11) 某个事务由两条语句组成。第一条语句执行成功,但是第二条语句(更新若干行)由于违反约束而失败。此时会出现什么情况(选择一个最佳答案)?
A.整个事务都会回滚
B.第二条语句的执行结果会被完全回滚,第一条语句的执行结果则会被提交
C.第二条语句的执行结果会被完全回滚,第一条语句的执行结果不会被提交
D.只有违反约束的更新操作被回滚,其他执行结果都会被提交
E.只有违反约束的更新操作被回滚,其他结果不会被提交
(12) 下列哪些关于索引的描述是正确的(选择一个最佳答案)?
A.一个索引可以基于某个表的多个列,但是这些列必须具有相同的数据类型
B.一个索引可以基于某个表的多个列,但是这些列必须相邻,并且必须按照它们在表中所定义的顺序进行指定
C.如果某个索引与某个表位于相同的模式中,那么这个索引与这个表不能同名
D.以上叙述都不正确
(13) 下面的哪些选项可以用于B*树索引,而不能用于位图索引(选择所有正确答案)?
A.压缩
B.降序排序
C.基于函数的键表达式
D.反向键索引
E.唯一性
F.使用复合键
(14) 临时表中数据的可见性受到限制。如果一个用户以HR的身份登录,并将行插入到临时表中,这些行对谁可见(选择一个最佳答案)?
A.只有执行插入操作的会话可以访问
B.所有以HR身份登录的会话
C.在执行插入操作的会话终止前,所有会话都可以访问
D.在执行插入操作的会话提交事务前,所有会话都可以访问
(15) 临时表写入磁盘的什么位置(选择一个最佳答案)?
A.从不写入磁盘
B.写入用户的临时表空间
C.表所在模式的用户的临时表空间
D.写入会话的用户进程的本地磁盘
(16) 下面哪些选项定义了复杂视图而不是简单视图的特征(选择所有正确答案)?
A.通过仅选择表的部分列来限制投影
B.用列的别名命名视图的列
C.用WHERE子句限制行的选择
D.执行聚合
E.联接两个表
(17) 分析下面三条语句:
create view v1 as select department_id, department_name, last_name from departments join employees using (department_id); select department_name, last_name from v1 where department_id=20; select d.department_name, e.last_name from departments d, employees e where d.department_id=e.department_id and d.department_id=20;
第一个查询会比第二个查询快,因为(选择一个最佳答案):
A.视图已经完成了联接表的工作
B.视图使用ISO标准联接语法,它比第二个查询中使用的Oracle联接语法快
C.视图是预编译的,因此第一个查询需要的动态编译比第二个查询少
D.没有理由使第一个查询更快
(18) 研究这个视图创建语句:
create view dept30 as select department_id, employee_id, last_name from employees where department_id=30 with check option;
是什么导致如下语句失败(选择一个最佳答案)?
update dept30 set department_id=10 where employee_id=114;
A.除非另外指定,否则视图会被创建为WITH READ ONLY
B.视图太复杂而不允许DML操作
C.WITH CHECK OPTION会拒绝任何修改DEPARTMENT_ID的语句
D.该语句会成功
(19) 表SCOTT.DEPT上有一个简单的视图SCOTT.DEPT_VIEW。这个插入失败了,并出现如下错误:
SQL> insert into dept_view values('SUPPORT', 'OXFORD'); insert into dept_view values('SUPPORT', 'OXFORD') * ERROR at line 1: ORA-01400: cannot insert NULL into ("SCOTT"."DEPT"."DEPTNO")
问题可能出在哪里(选择一个最佳答案)?
A.INSERT违反了明细表上的约束
B. INSERT违反了视图上的约束
C.视图被创建为WITH READ ONLY
D.视图被创建为WITH CHECK OPTION
(20) 公有同义词区别于私有同义词的特征是什么(选择两个正确答案)?
A.公有同义词总是对所有用户可见
B.公有同义词可以根据名称访问,不需要模式名称限定符
C.可以从公有同义词中进行选择,不需要任何权限
D.公有同义词可以与表或视图有相同的名称
(21) 分析下面三条语句:
create synonym s1 for employees; create public synonym s1 for departments; select * from s1;
下面哪条语句是正确的(选择一个最佳答案)?
A.第二个语句会失败,因为对象S1已经存在
B.第三个语句会显示EMPLOYEES的内容
C.第三个语句会显示DEPARTMENTS的内容
D.第三个语句会显示表S1的内容(如果此当前模式中存在这样一个表的话)
(22) 一个视图和一个同义词的创建语句如下:
create view dept_v as select * from dept; create synonym dept_s for dept_v;
然后删除表DEPT。如果查询同义词DEPT_S会发生什么事(选择一个最佳答案)?
A.不会有错误,因为该同义词引用了依然存在的视图,但是不会有行返回
B.如果先用命令ALTER VIEW DEPT_V COMPILE FORCE重新编译视图,就不会有错误
C.会有一个错误,因为该同义词将是无效的
D.会有一个错误,因为视图将是无效的
E.会有一个错误,因为删除表时会隐式删除视图
(23) 一个序列的创建语句如下:
create sequence seq1 maxvalue 50;
如果当前值已经是50,当试图选择SEQ1.NEXTVAL时会发生什么情况(选择一个最佳答案)?
A.序列会循环,并发出0
B.序列会循环,并发出1
C.序列会重新发出50
D.会出现一个错误
(24) 假设创建了一个如下所示的序列:
create sequence seq1 start with 1;
当从中选择了几次后,要将它重新初始化为重新发出已经生成的数值。如何做到这一点(选择一个最佳答案)?
A.必须删除并重新创建序列
B.无法做到。一旦数值被使用过,就不能从序列中重新发出该数值
C.使用命令ALTER SEQUENCE SEQ1 START WITH 1;将下一个值重置成1
D.使用命令ALTER SEQUENCE SEQ1 CYCLE;将序列重置为它的起始值