问题 单项选择题

假如只想显示视图: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命令和它们的结果之后,应该确信我们之前所做的分析了吧!

选择题
翻译题