多选题
假如只想显示视图:EMPLOYEE_HIST的名字、视图的定义和视图定义的长度,请问应该使用以下SQL语句中的哪一个? A.SELECT * FROM user_views WHERE view_name='EMPLOYEE_HIST'; B.SELECT view_name, text, text_length FROM user_views WHERE view_name='EMPLOYEE_HIST'; C.SELECT view_name, text, text_length FROM VIEW user_obiects WHERE view_name='EMPLOYEE_HIST'; D.SELECT VIEW view_name, text, text_length FROM all_objects WHERE view_name='EMPLOYEE_HIST';
【正确答案】
B
【答案解析】[解析] 这一题是测试对通过查询数据字典user_views获取视图信息的熟悉程度。根据有关通过查询数据字典user_views获取视图信息的介绍,可知能够满足本题要求的查询语句只有选项B。 虽然选项A的查询语句也可以获得题目所要求的信息,但是这个查询语句同时还将显示有关视图的其他信息(即user_view所存放的全部信息),所以与选项B相比选项A更准确。在这一题中,如果没有选项B,选项A就应该是正确的答案了。 因为选项C语句中的FROM子句有错误,而且数据字典user_objects中并没有所需视图的信息,所以选项C肯定是错误的。 因为选项D语句中的SELECT子句有错误,而且数据字典all_objects中并没有所需视图的信息,所以选项D肯定是错误的。 如果对以上的结论有疑虑,可以利用SQL*PIus登录Oracle数据库,之后使用DESC命令分别列出数据字典user_views、user_objects和all_objects的结构,其命令和显示结果如下所示: SQL>desc user_views 名称 是否为空? 类型 ------------------------- ----------- --------------- VIEW_NAME NOT NULL VARCHAR2(30) TEXT_LENGTH NUMBER TEXT LONG TYPE_TEXT_LENGTH NUMBER TYPE_TEXT VARCHAR2(4000) OID_TEXT_LENGTH NUMBER OID_TEXT VARCHAR2(4000) VIEW_TYPE_OWNER VARCHAR2(30) VIEW_TYPE VARCHAR2(30) SUPERVIEW_NAME VARCHAR2(30) SQL>desc user_objects 名称 是否为空? 类型 ------------------------ ------------- ----------------- OBJECT_NAME VARCHAR2(128) SUBOBJECT_NAME VARCHAR2(30) OBJECT_ID NUMBER DATA_OBJECT_ID NUMBER OBJECT_TYPE VARCHAR2(19) CREATED DATE LAST_DDL_TIME DATE TIMESTAMP VARCHAR2(19) STATUS VARCHAR2(7) TEMPORARY VARCHAR2(1) GENERATED VARCHAR2(1) SECONDARY VARCHAR2(1) SQL>desc all_objects 名称 是否为空? 类型 ----------------------- ---------- ---------- OWNER NOT NULL VARCHAR2(30) OBJECT_NAME NOT NULL VARCHAR2(30) SUBOBJECT_NAME VARCHAR2(30) OBJECT_ID NOT NULL NUMBER DATA_OBJECT_ID NUMBER OBJECT_TYPE VARCHAR2(19) CREATED NOT NULL DATE LAST_DDL_TIME NOT NULL DATE TIMESTAMP VARCHAR2(19) STATUS VARCHAR2(7) TEMPORARY VARCHAR2(1) GENERATED VARCHAR2(1) SECONDARY VARCHAR2(1) 看到以上这三个SQL*Plus命令和它们的结果之后,应该确信我们之前所做的分析了吧!