问题 单项选择题

以下是EMPLOYEE表结构的详细内容,其中也包括了所使用的约束类型。

EMPLOYEE
Column Name EMPLOYEE_ID NAME JOB MANAGER DATE_HIRED SALARY BONUS DEPIARTMENT_ID
Key-Type PK              
Nulls/Unique NN,U       NN     NN
FK Table                
FK Column                
Datatype HUM VARCHAR2 VARCHAR2 NUM DATE NUM HUM NUM
Length 6 20 9 6   7, 2 7, 2 2
创建了EMPLOYEE_V视图,该视图从EMPLOYEE表中选取属于第10号部门(department_10)并且在1997年12月31日之前雇用的所有员工的全部信息(所有的行和列),为了达到这一目的,在创建视图的语句中使用了CHECK OPTION命令。请问,以下的哪个语句将成功地执行

A.INSERT INTO employee_v (employee_id, name, job, manageger, date_hired, department_id)
VALUES (2009, ’LITTLE’, ’TYPIST’, 788, ’30-MAY-1996’, 10);
B.INSERT INTO employee_v (employee_id, name, job, manager, date_hired, salary, department_id)
VALUES (2009,’LITTLE’, ’TYPIST’, 788, ’30-MAY-1996’, 2000, 40);
C.INSERT INTO employee_v (employee_id, name, job, date_hired, salary, bonus, department_id)
VALUES (2009, ’LITTLE’, ’TYPIST’, ’30-MAY-1998’, 2000, 300, 10);
D.INSERT INTO employee_v (name, job, manager, date_hired, salary, bonus, department_id)
VALUES (’LITTLE’, ’TYPIST’, 788, ’30-MAY-1996’, 2000, 300, 10);
E.INSERT INTO employee_v (employee_id, name, job, manager, date_hired, salary, bonus)
VALUES (2009, ’LITTLE’, ’TYPIST’, 788, ’30-MAY-1996’, 2000, 300);

答案

参考答案:A

解析: 这一题是测试对使用视图的WITH CHECK OPTION子句的理解程度和对INSERT INTO语句以及约束的理解。这样的题在OCP考试中属于复杂的题。
根据有关使用视图的WITH CHECK OPTION子句的解释,可知如果在创建视图时使用了WITH CHECK OPTION CONSTRAINT子句,所有通过该视图进行的DML操作都不能违反在创建视图时用WHERE子句所限定的条件。因为在本题的创建视图的语句中使用了WITH CHECK OPTION CONSTRAINT子句并且其限制条件是属于第10号部门并且雇用日期在1997年12月31日之前的,所以任何违反这一限制条件的记录都不可能通过视图EMPLOYEE_V插入到EMPLOYEE表中。选项B是错误的,因为department_id=40;选项C是错误的,因为date_hired=’30-MAY-1998’ (1998年5月30日);选项E是错误的,因为department_id=300。
现在只剩下了选项A和D可能是正确的。我们仔细阅读一下EMPLOYEE表中的第一列employee_id的定义,该列是EMPLOYEE表的主键,所以任何DML操作都必须保证这一列的值不能为空,所以选项D是错误的,因为在这个插入语句中省略了employee_id这一列,这会造成将空值输入到employee_id列的情况发生。通过以上推断,可得出只有选项A是正确的。

单项选择题
选择题