Oracle测试试题(时间:120分钟 总分:100分)
一、选择题(2分*20=题40分)
1、下面哪一个不是数据库屋物理存储结构中的对象( )。
A. 数据文件 B. 联机重做日志文件 C. 控制文件 D. 表空间
2、在Oracle服务器启动时,下面哪种文件不是必须的( )。
(A)数据文件 (B)控制文件 (C)日志文件 (D)归档日志文件
3、你要在Oracle中定义SQL查询。下列哪个数据库对象不能直接从select语句中引用?
A.表 B.序列 C.索引 D.视图
4、已知TEST表包含两个列
TESTCOL定义为数据类型NUMBER(10),
TESTCOL_2定义为数据类型VARCHAR2(10)。
在Oracle中发出下列语句:insert into test(testcol, testcol_2) values (null, ‘FRANCIS’),
然后对表进行下列查询:select nvl(testcol, ‘EMPTY’) as testcol from test where testcol_2 = ‘FRANCIS’。
下列选项哪个是得到的结果?
A.Oracle返回结果0 B.Oracle返回结果EMPTY
C.Oracle返回结果NULL D.Oracle返回错误结果
5、SQL语言中用来创建、删除及修改数据库对象的部分被称为:( )
(A). 数据库控制语言(DCL) (B) 数据库定义语言(DDL)
(C) 数据库操纵语言(DML) (D) 数据库事务处理语言
6、以下语句的哪条当comm为为空时显示0,不为空时显示comm的值:( )
(A). select ename,nvl(comm,0) from emp (B) select ename,null(comm,0) from emp
(C) select ename,nullif(comm,0) from emp (D)select ename ,decode(comm,null,0) from emp
7、已知ORDERS表有CUSTOMER(客户姓名)、ORDER_DATE(订单日期)与ORDER_AMT(订单金额)三个字段。以下哪个where子句可以查询客户LESLIE订单金额超过2700的订单?
A.where customer = ‘LESLIE’;
B.where customer = ‘LESLIE’ and order_amt < 2700;
C.where customer = ‘LESLIE’ or order_amt > 2700;
D.where customer = ‘LESLIE’ and order_amt > 2700;
8、不属于游标的属性是:( )
(A) %notfound (B) %found (C) %rowtype (D) %rowcount
9、有如下SQL语句select ceil(256.342), floor(256.342), round(256.342), trunc(256.342) from dual;
下列哪个函数返回结果不是256?
A.ceil() B.floor() C.round() D.trunc()
10、以下关于SQL的说法正确的是_ ___
A、SQL是一种过程化的语言,可实现各种流程控制
B、SQL是Oracle所独有数据库操作语言
C、SQL是一种数据库的驱动程序
D、SQL是一种非过程化的语言,也是数据库的工业标准
11、Create、Drop、Alter等命令属于下列哪类命令_ ___
A、DCL B、DDL C、DML D、DQL
12、下列关于表和视图的说法正确的是___ ___
A、每个视图对应一个表
B、视图是表的一个镜像备份
C、对所有视图也可像表一样执行Update操作
D、视图的数据全部在表中
13、有如下SQL语句:
select ename from emp where empno in
( select empno from expense where vouch_amt > 10000 );
下列exists语句中哪个SQL语句产生结果与上述SQL结果一样?
A.select e.ename from emp e where exists(select x.empno from expense x where x.vouch_amt>10000) and x.empno = e.empno;
B.select e.ename from emp e where exists(select x.empno from expense x where x.vouch_amt>10000 and x.empno = e.empno);
C.select e.ename from emp e where x.empno = e.empno and exists(select x.empno from expense x where x.vouch_amt>10000)
D.select e.ename from emp e, expense x where x.empno = e.empno and x.vouch_amt>10000 and exists(select x.empno from expense x where)
14、在Oracle数据库的逻辑结构中有以下组件:
A 表空间 , B 数据块, C 区, D 段;这些在oracle中从大到小依次是___
A、A -> B -> C -> D
B、A -> D -> C -> B
C、A -> C -> B -> D
D、D -> A -> C -> B
15、下面关于Oracle游标使用的语法,错误的是_____ _____
A、fetch 游标名 on 变量名1 , 变量名2 B、cursor 游标名 is select 语句
C、open 游标名 D、close 游标名
16、在Oracle中,如果想在控制台进行输出,可以通过以下哪个程序包中提供的函数实现()
A、DBMS_OUTPUT
B、DBMS_SYTEMOUT
C、DBMS_SQL
D、DBMS_TYPES
17、有一段PL/SQL程序如下示、
Var1 :=10;
LOOP
EXIT WHEN var1>12;
Var1:=var+1;
DBMS_OUTPUT.PUT_LINE(‘A’);
END LOOP;
输出为().选择一项
A、A B、AA C、A AA D、AAAA
18、Oracle数据库中,通过()访问能够以最快的方式访问表中的一行。(选择一项)
A、主键 B、Rowid C、唯一索引 D、整表扫描
19、在Oracle中,有一个名为seq的序列对象,以下语句能返回序列值但不会引起序列值增加的是( )。
A. select seq.ROWNUM form dual; B. select seq.ROWID form dual;
C. select seq.CURRVAL form dual; D. select seq.NEXTVAL form dual;
20、以下对外链接语句描述正确的是?
A.由于外连接操作允许一个表中有NULL值,因此连接这些表时不必指定相等性比较。
B.在表A与B的外连接语句中,如果不管B表有无相应记录,都要显示表A的所有行,则可以使用右外连接。
C.在表A与B的外连接语句中,如果不管A表有无相应记录,都要显示表B的所有行,则可以使用左外连接。
D.尽管外连接操作允许一个表中有NULL值,但连接这些表时仍要指定相等性比较。
二、多选题(3分*5题=15分)
1、在Oracle中,PL/SQL块中定义了一个带参数的游标
CURSOR emp_cursor(dnum NUMBER) IS
SELECT sal, comm FROM emp WHERE deptno = dnum;
那么正确打开此游标的语句是( )
A、OPEN emp_cursor(20);
B、OPEN emp_cursor FOR 20;
C、OPEN emp_cursor USING 20;
D、FOR emp_rec IN emp_cursor(20) LOOP … END LOOP;
2、ORACLE数据库在启动的时候,必须启动以下哪两个服务( )
A.OracleOraDb11g_home1TNSListener
B.OracleMTSRecoveryService
C.OracleServiceORCL
D.OracleJobSchedulerORCL
3、在Oracle中,不属于游标属性的是()。
A、%NOTFOUND B、%FOUND C、%ISCLOSE D、ROWTYPE
4、 一个VIEW被以下语句创建,请问在该视图上可以执行哪些操作?
CREATE VIEW USA_STATES
AS SELECT e.ename ,d.dname FROM emp e,dept d WHERE e.dno= d.dno;
A. SELECT B. UPDATE C. DROP VIEW D. INSERT
5、在Oracle中,下面关于函数描述正确的是( )。
A、SYSDATE函数返回Oracle服务器的日期和时间
B、ROUND数字函数按四舍五入原则返回指定十进制数最靠近的整数
C、ADD_MONTHS日期函数返回指定两个月份天数的和
D、SUBSTR函数从字符串指定的位置返回指定长度的子串
三、编程题(请按要求写出正确的SQL语句45分)
已知有数据库表结构及相关数据如下:
销售订单表:orders
| 字段名 | 类型 | 名称 |
| FOrderID | Varchar(8) | 订单号 |
| ForderDate | date | 订单日期 |
| FNumber | Varchar(80) | 订单编号 |
| FState | Varchar(2) | 申请状态 |
销售订单分录表:
OrderEntry| 字段名 | 类型 | 名称 |
| FID | Varchar(8) | 订单分录ID |
| FOrderID | Varchar(8) | 订单号 |
| FMaterialID | Varchar(8) | 物料ID |
| FQty | Int | 订单数量 |
| FPrice | Int | 物料单价 |
物料表:
Material| 字段名 | 类型 | 名称 |
| FMaterialID | Varchar(8) | 物料ID |
| FMaterialName | Varchar(200) | 物料名称 |
1、统计销售订单日期为2009年8月份各物料的销售金额,金额=数量*单价(10
)输出字段: 物料名称 , 销售金额
2、查询售出订单日期为2009年8月份的各订单的销售明细,并按订单日期降序排列(8分)
输出字段:订单编号,订单日期,物料名称,数量,单价,金额
3、为了让问题1性能达到优化,请在OrderEntry表的FOrderID、FMaterialID创建一个索引以优化查询速度。(7分)
4、使用exists语句,查询出没有销售记录的物料信息。(8分)
输出字段:物料ID 物料名称
5、创建一个带参数的存储过程,通过输入物料id,查询出该物料的销售记录并显示到控制台 12分