多选题 以下是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
【答案解析】[解析] 这一题是测试对使用视图的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是正确的。