姓名: 戴希引
一、选择题(总分50分,每题1分,*为多选)42
1. 下列不属于ORACLE的逻辑结构的是(C)
A 区 B 段 C 数据文件 D表空间 2. 下面哪个用户不是ORACLE缺省安装后就存在的用户( A )
A . SYSDBA B. SYSTEM C. SCOTT D. SYS 3 下面哪个操作会导致用户连接到ORACLE数据库,但不能创建表(A )
A 授予了CONNECT的角色,但没有授予RESOURCE的角色 B没有授予用户系统管理员的角色 C数据库实例没有启动 D数据库监听没有启动 4. 在Oracle中,当FETCH语句从游标获得数据时,下面叙述正确的是( C )
A 游标打开 B游标关闭 C当前记录的数据加载到变量中 D创建变量保存当前记录的数据 5. 在Oracle中,下面关于函数描述正确的是( A D) *
A SYSDATE函数返回Oracle服务器的日期和时间
B ROUND数字函数按四舍五入原则返回指定十进制数最靠近的整数 C ADD_MONTHS日期函数返回指定两个月份天数的和 D SUBSTR函数从字符串指定的位置返回指定长度的子串
6. 阅读下面的PL/SQL程序块:
BEGIN INSERT INTO
employee(salary,last_name,first_name)VALUES(35000,’Wang’,'Fred’); SAVEPOINT save_a; INSERT INTO employee(salary,last_name,first_name) VALUES(40000,’Woo’,'David’);
SAVEPOINT save_b; DELETE FROM employee WHERE dept_no=10; SAVEPOINT save_c; INSERT INTO employee(salary,last_name,first_name)
VALUES(25000,’Lee’,'Bert’);
ROLLBACK TO SAVEPOINT save_c;
INSERT INTO employee(salary,last_name,first_name)
VALUES(32000,’Chung’,'Mike’); ROLLBACK TO SAVEPOINT save_b; COMMIT; END;
运行上面的程序,哪两个更改永久保存到数据库( CD )。 *
A DELETE FROM employee WHERE dept_no=10; B INSERT INTO
employee(salary,last_name,first_name)VALUES(32000,’Chung’,'Mike
’); C INSERT INTO employee(salary,last_name,first_name)
VALUES(35000,’Wang’,'Fred’); D INSERT INTO employee(salary,last_name,first_name) VALUES(40000,’Woo’,'David’);
7. 在Oracle中,表VENDOR包含以下列:
VENDOR_ID NUMBER Primary Key NAME VARCHAR2(30) LOCATION_ID NUMBER ORDER_DT DATE
ORDER_AMOUNT NUMBER(8,2)
下面对表VENDOR运用分组函数的子句合法的是( C)。 A FROM MAX(order_dt) B SELECT SUM(order_dt) C SELECT SUM(order_amount) D WHERE MAX(order_dt) = order_d
8. 在Oracle中,表EMP包含以下列: NAME VARCHAR2(20) ADDR VARCHAR2(60)
要以NAME’s address is ADDR格式返回数据,以下SQL语句正确的是( B )。
A SELECT NAME + ’’’s address is ‘ + ADDR FROM EMP; B SELECT NAME || ’’’s address is ‘ || ADDR FROM EMP; C SELECT NAME + ’\\’s address is ‘ + ADDR FROM EMP; D SELECT NAME || ’\\’s address is ‘ || ADDR FROM EMP; 9. 在Oracle中,以下不属于集合操作符的是( B )。 A UNION B SUM C MINUS D INTERSECT
10. 在Oracle中,关于锁,下列描述不正确的是( D )。
A 锁用于在用户之间控制对数据的并发访问 B 可以将锁归类为行级锁和表级锁 C insert、update、delete语句自动获得行级锁 D 同一时间只能有一个用户锁定一个特定的表
11. 在Oracle中,序列venseq使用下面的语句创建:
CREATE SEQUENCE venseq INCREMENT BY 1 START WITH 10 MAXVALUE 100 MINVALUE 10 CYCLE CACHE 5; 下面对序列venseq修改的语句,错误的是( A )。 A ALTER SEQUENCE venseq START WITH 1; B ALTER SEQUENCE venseq MAXVALUE 90; C ALTER SEQUENCE venseq NOMINVALUE; D ALTER SEQUENCE venseq NOCACHE;
12.在Oracle中,使用以下语句创建视图:
CREATE OR REPLACE VIEW pen_view AS SELECT * FROM order_master WHERE ostatus = ‘p’ WITH CHECK OPTION CONSTRAINT penv; 当用户试图执行以下语句: UPDATE pen_view SET ostatus = ‘d’ WHERE
ostatus=’p’;下列描述正确的是( B )。 A Oracle将ostatus修改为d,不提示任何错误 B Oracle不执行更新操作,并返回错误信息 C Oracle将ostatus修改为d,同时返回错误信息 D Oracle不执行更新操作,也不提示任何错误
13. 在Oracle中,在以下情形建立位图索引可以获得较好的性能( C )。
A 在列值唯一的列上建立 B 在列值相差很小的列上建立 C 在列值频繁重复的列上建立 D 在用于保存位图的列上建立 14. 在Oracle中,通过命令( D )可以释放锁。
A INSERT B DELETE C ROLLBACK D UNLOCK 15. 在Oracle中,关于PL/SQL下列描述正确的是( C )。
A PL/SQL代表Power Language/SQL B PL/SQL不支持面向对象编程 C PL/SQL块包括声明部分、可执行部分和异常处理部分 D PL/SQL提供的四种内置数据类型是character,integer,float,boolean 16. 在Oracle中,阅读下列PL/SQL块:
DECLARE v_lower NUMBER:=2; v_upper NUMBER:=100;
v_count NUMBER:=1; BEGIN I = 2; I <= 2; i++
FOR i IN v_lower..v_lower LOOP INSERT INTO test(results) VALUES (v_count); v_count := v_count +1; ENDLOOP; END;
请问FOR LOOP循环体执行了( A )次。 A 1 B 98 C 100 D 235
17. 在Oracle中,关于子程序的描述不正确的是( C )。子程序就是存储过程
和函数. A 子程序是已命名的PL/SQL块,可带参数并可在需要时随时调用 B 子程序可以具有声明部分、可执行部分和异常处理部分 C 子程序参数的模式只有IN和OUT两种模式 D 子程序可分为过程和函数两种类型
18. 在Oracle中,关于触发器的描述正确的是(D )。 A 触发器可以删除,但不能禁用 B 触发器只能用于表 C 触发器可以分为行级和语句级两种 D 触发器是一个对关联表发出insert、update、delete或select … for update语句时触发的存储过程
19. 在Oracle中,你需要创建索引提高薪水审查的性能,该审查要对员工薪水提高12个百分点后进行分析处理,下面哪个create index命令能解决此问题
( A )。 A CREATE INDEX my_idx_1 ON employee(salary*1.12);
B CREATE UNIQUE INDEX my_idx_1 ON employee(salary); C CREATE BITMAP INDEX my_idx_1 ON employee(salary); D CREATE INDEX my_idx_1 ON employee(salary) REVERSE;
20. 在Oracle中,执行下面的语句:
SELECT ceil(-97.342),floor(-97.342), round(-97.342),trunc(-97.342)
FROM dual; 哪个函数的返回值不等于-97( B )。 A ceil() B floor() C round(0) D trunc()
21. 在Oracle中,用以下SQL命令创建了一个序列:
CREATE SEQUENCE my_seq START WITH 394 INCREMENT BY 12
NOMINVALUE NOMAXVALUE NOCYCLE NOCACHE; 用户执行包含my_seq.NEXTVAL的SQL语句三次,然后执行包含
my_seq.CURRVAL的SQL语句四次,请问序列my_seq的当前值是( B )。 A 406 B 418 C 430 D 442 E 242 22. 在Oracle中,下列哪种标量类型不能保存到数据库表中( B )。
A CHAR B RAW C DATE D BOOLEAN 23. 在Oracle中,不属于游标属性的是( C )。
A %NOTFOUND B %FOUND C %ISCLOSE D %ISOPEN
24. 在Oracle中,在SQL提示符下调用PL/SQL过程的方法是( ABC )。*
A 使用CALL语句 B 使用EXECUTE语句 C 使用RUN语句 D 直接使用过程名
25. 在Oracle中,用下列语句定义了一个过程:
CREATE OR REPLACE PROCEDURE test(a IN VARCHAR2,b IN OUT NUMBER, c OUT VARCHAR2) IS BEGIN
…… END;/ 假定使用的变量都已定义,下面对过程test的调用语法正确的是( C)。
A test(‘String1’,50,v_str2) B test(v_str1,v_num1,’String2’) C test(‘String1’,v_num1,v_str2) D test(v_str1,20,v_str2)
26. 在Oracle中,关于程序包的描述不正确的是(B )。 A 程序包是一种数据库对象,它是对相关PL/SQL类型、子程序、游标、异常、变量和常量的封装 B 程序包中私有对象是通过PRIVATE关键字来标识的 程序包体可以包括没
有在程序包规范中列出的对象,这些是私有对象,程序包的用户不能使用 C PL/SQL允许两个或多个打包的子程序具有同一名称,只要子程序接受的参数数据类型不同 D 程序包具有模块化、信息隐藏、新增功能及性能更佳等优点 27.在Oracle中,用户( A)拥有所有内置的程序包。
A SYS B SYSTEM C PUBLIC D DEFAULT 28.在Oracle中,通过命令( C D)可以释放锁。 * A INSERT B DELETE C ROLLBACK D COMMIT
29.在Oracle中,事务中使用下列SQL语句不会引起锁定( A)。 A SELECT B INSERT C UPDATE D DELETE 30. 在Windows操作系统中,Oracle的( A )服务器监听并接受来自客户端应用程序的连接请求。
A OracleHOME_NAMETNSListener B OracleServiceSID C OracleHOME_NAMEAgent D OracleHOME_NAMEHTTPServer
31 .在Oracle中,有一个名为seq的序列对象,以下语句能返回序列值但不会
引起序列值增加的是(C )。
A select seq.ROWNUM from dual; B select seq.ROWIDfrom dual; C select seq.CURRVALfrom dual; D select seq.NEXTVALfrom dual;
32.ORACLE中,执行语句:SELECT
address1||’,'||address2||’,'||address2 ”Address” FROM employ;将会
返回( B )列。 A 0 B 1 C 2 D 3
33.在Oracle中,INSTEAD OF触发器主要用于( D )。 A 表 B 表和视图 C 基于单个表的视图 D 基于多个表的视图 34. Oracle数据库中,通过( B )访问能够以最快的方式访问表中的一行。
A 主键 B Rowid C 唯一索引 D 整表扫描 35.Oracle数据库中,以下( C )命令可以删除整个表中的数据,并且无法回滚。A drop B delete C truncate D cascade 36. Oralce数据库中,以下( A )函数可以针对任意数据类型进行操作。
A TO_CHAR B LOWER C MAX D CEIL 37.在Oracle中,以下是STUDENTS表的结构:
SID NUMBER NOT NULL,Primary Key SNAME VARCHAR2(30) COURSE_ID VARCHAR2(10) NOT NULL MARKS NUMBER 你需要查询参加了课程ID为C10的考试,并且分数排在前10名的学生,以下( D )语句能够实现此功能。 A. SELECT SID,marks,ROWNUM “Rank”FORM students WHERE ROWNUM<=10 AND course_id=’C10′ORDER BY marks DESC; B.SELECT SID,marks,ROWNUM”Rank”FORM students HERE ROWNUM<=10 AND course_id=’C10′ORDER BY marks; C.SELECT SID,marks,ROWNUM”Rank” FORM (SELECT SID ,marks FORM students WHERE ROWNUM<=10 AND course_id=’C10′ORDER BY marks DESC;
D.SELECT SID,marks,ROWNUM”Rank”FORM (SELECT SID ,marks FORM students WHERE course_id=’C10′ ORDER BY marks DESC) WHERE ROWNUM<=10;
38. 在Oracle中,用于PL/SQL程序输出调试信息的内置程序包是(D ) A DBMS_STANDARD B DBMS_ALERT C DBMS_LOB D DBMS_OUTPUT
39. 在Oracle中,下列( B)语句不能用于控制游标。
A Open B Create C Fetch D Close 40.在Oracle中有表”cd”,它包含属性”cdcode”,”category”和”cdname”,要查询category取值为”CLASSIC”或”ROCK”的行,应采用语
句( AD)。* A SELECT * FROM cd WHERE category IN (‘CLASEIC’,'ROCK’); B SELECT * FROM cd WHERE category BETWEEN ‘CLASSIC’ AND ‘ROCK’;
C SELECT * FROM cd WHERE category=’CLASSIC’ AND category=’ROCK’; D SELECT * FROM cd WHERE category=’CLASSIC’ OR category=’ROCK’; 41. 在Oracle中,在执行SQL语句时,你不小心使用Update命令将所有的ID
值设置成了11111,那么使用( C)命令可以取消这一操作。 A EXIT B COMMIT C ROLLBACK D UNDO
42.在Oracle 中,使用了如下的语句创建用户TOM,则对于该用户而言,以下说
法错误的是( D )。 CREATE USER TOM IDENTIFIED BY TOMSYS; A 该用户的口令为TOMSYS B TOM默认为表空间为SYSTEM C TOM 的临时表空间为TEMP D 使ORANT UPDATE 命令可以修改TOM的口令 43.游标变量的类型是( B ) A 隐式游标 B 显示游标 C REF游标 D 循环游标 44. 使用(B )命令可查看在创建触发器时发生的编译错误
A View errors B Show errors C Display errors D Check errors 45. (A )触发器允许触发操作的语句访问行的列值 A 行级 :old :new B 语句级 C 模式 D 数据库级
46. Oracle内置程序包由( A )用户所有
A sys B system C scott D Pub lic
47、数据完整性实质,存储在数据库中的数据正确无误并且相关数据具有一致性,根据完整性机制所作用的数据库对象和范围不同,可以分为: ( B ),( A ),
( C ),( D ),其中外键可以实现( C ) 。主键可以实现( A )。 A 实体完整性 B 域完整性 C参照完整性 D自定义完整性
48. 在数据库的表中,( A )是指表中的某一列(或某些列),该列的值唯一标
识 一行。 A 主键 B 外键 C 唯一键 D 次键
49. 在T-SQL语言中,若要修改某张表的结构,应该使用的修改关键字是
( D );若要创建一个表,应该使用的语句是( B )。 A alter database B create table C create database D alter table 50. 在以下( B )情况下使用主键约束而不使用唯一约束:
A 列的值允许为空值 B 列有外键引用 C 列的值不允许为空值 D 以上都不对
二、编写SQL语句(总分12分,每题3分)6
1.创建一张学生表,包含以下信息:学号,姓名,年龄,性别,学历,联系电话。
CREATE TABLE STUDENT(
STUNO VARCHAR2(10) PRIMARY KEY, NAME VARCHAR2(20) NOT NULL, AGE NUMBER NOT NULL, SEX CHAR(10) ,
EDU VARCHAR2(20) NOT NULL, IPHONE NUMBER(11) NOT NULL );
2.向学生表添加如下信息:
1 A 22 男 123456 小学 2 B 21 男 119 中学
3 C 23 男 110 高中 4 D 18 女 114 大学 INSERT INTO STUDENT VLAUSE(1,‘A’,22,’男’,123456,’小学’); INSERT INTO STUDENT VLAUSE(2,‘B’,21,’男’,119,’中学’); INSERT INYO STUDENT VLAUSE(3,‘C’,23,’男’,110,’高中’); INSERT INTO STUDENT VLAUSE(4,‘D’,18,’女’,114,’大学’);
3. 修改学生表的数据,将电话号码以11开头的学员的学历改为“大专” Update stu set degree = ‘大专’where phone like ‘11%’ 4. 删除学生表的数据,姓名以C开头,性别为‘男’的记录删除 Delete from stu where name like ‘C%’ and sex = ‘男’
三、编写SQL语句(总分30分,每题5分)20
有一个“学生-课程”数据库,数据库中包括三个表:
(1) “学生”表Student由学号(Sno)、姓名(Sname)、性别(Ssex)、年
龄(Sage)、 所在系(Sdept)五个属性组成。 可记为: Student(Sno,Sname,Ssex,Sage,Sdept) Sno 为关键字。 (2) “课程”表Course由课程号(Cno)、课程名(Cname)、选修课号(Cpno)、学分 (Ccredit)四个属性组成。 可记为: Course(Cno,Cname,Cpno,Ccredit) Cno 为关键字。 (3)“学生选课”表SC由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成。 可记为: SC(Sno,Cno,Grade) (SNO, CNO) 为关键字。 完成下列操作: 1. 在以上三个表中查询Ccredit为5并且Grade大于60的学生的学号、姓名和性别
select student.Sno,Sname,Ssex from student, course, sc where (student.Sno=sc.Sno) and (course.Cno=sc.Cno) and (course.Ccredit=5) and (sc.Grade>60)
答案:select s.sno,s.sname,s.ssex from student s,course c,sc sc
where s.sno=sc.sno and c.cno=sc.cno and c.ccredit=5 and sc.grade>60
2 查询出“C语言”课程成绩前5名的学生的学号、姓名和所在系(含并列情况)。 Select top5 Sno,Sname,Ssex,Grade from student join SC C语言 on Cno =Sno order by Grade desc
答案select a.sno,a.sname,a.sdept,a.grade,rownum as 排名
from (select s.sno as sno,s.sname as sname,s.sdept as
dept,sc.grade as grade from student s,course c,sc sc where s.sno=sc.sno and c.cno=sc.cno and c.cname='C语言' order by sc. grade desc) a where a.rownum < 6
3 查询出各系学生人数。
Select Grade,count(*) as 人数 from student
答案select sdept as 系别,count(*) as 人数from student group by sdept
4 查询出“计算机应用基础”课程成绩高于张三同学此门课程成绩的学生的学号和姓名。
Select (select grade from sc where sname=’张三’and cname=’计算机应用基础’ jsj) student.Sno,Sname from SC where sc.grade>jsj;
答案select sc.grade from student s,course c,sc sc where s.sno=sc.sno
and c.cno=sc.cno and c.cname='计算机应用基础' and
sc.grade > (select sc.grade as a from student s,course c,sc sc where s.sno=sc.sno and c.cno=sc.cno and c.cname='计算机应用基础' and s.sname='张三')
5、查询学过编号为\"01\"但是没有学过编号为\"02\"的课程的同学的信息 Sleclt student from where found cno=1 and cno<>2;
答案select distinct sno from sc where cno='01' and sno not in
(select distinct sno from sc where cno='02')
6、按每位学生的总分划分成绩类别,90以上为A,80-90为B,70-80为C,60-70为D,其它为E。
答案
select s.sno,s.sname,sum(sc.grade) as 总分,
case when sum(sc.grade)>90 then 'A' when sum(sc.grade) between 80 and 89 then 'B' when sum(sc.grade) between 70 and 79 then 'C' when sum(sc.grade) between 60 and 69 then 'D' else 'E' end from student s,course c,sc sc
where s.sno=sc.sno and c.cno=sc.cno group by s.sno,s.sname
四、 建立存储过程(8分)
输入参数为课程号SN,返回本门课程的学号,姓名,课程号,分数结果集。
输入参数为课程号SN,返回本门课程的学号,姓名,课程号,分数
结果集。 答案参考课件
一、 建包
Create package 包名 as Type 游标名 is ref cursor; End; 二、 建存储过程
Create 过程名(游标参数名 out包名. 游标名) as
Begin Open游标参数名 for select * from xxxx; end;
三、通过块调用存储过程
Declare 四个变量声明
游标参数名 out包名. 游标名; Begin
过程名; Loop Fetch游标参数名 into 四个变量; Exit when游标参数名%notfound; 输出记录; End loop; end
因篇幅问题不能全部显示,请点此查看更多更全内容