Oracle PL/SQL练习题总目录
2010-11-17 13:41

第一章:Oracle概述(安装及常见对象)

书面作业

1、Oracle实例和数据库的概念和关系是什么?
2、SGA的各个组成部分的名称和作用,PGA与它有什么区别?
3、数据库的逻辑结构是什么?
4、视图是什么,有什么作用?
5、为什么要用同义词,与视图有什么区别?
6、为什么要用,序列在Oracle中通常有什么用?
7、dual是什么表,有什么作用?

8、scott是什么,有什么用?

9、谈谈对Oracle的认识(体系架构)?
10、SGA三个部分为什么能够提高性能?


代码作业

1、使用scott用户登录以后,创建班级表和学生表,并用insert插入一些数据,学号要求用序列seqStu产生。

2、创建查询各班男女人数的视图,并用select查询这个视图。

3、为学生表创建私有同义词,使用以后再删除这个同义词。

4、使用dual查询根据指定格式(年月日时分秒)今天的日期,以及当前的日期。(查询:sysdate,to_date,to_char)

参考答案:第一章

第二章:定义变量

1、Oracle表有几种数据类型?其中CLOB,BLOB有什么用?
2、Oracle脚本中变量有几种数据类型,哪些变量是表不能使用的类型?

3、定义各种标量数据类型,并分别举例。

4、替代变量是什么,它能保存数据吗?

5‍、‍table类型有什么用,为什么它的索引可以负?
6、根据员工编号打印:ename(员工姓名)、dname(部门名称)

要求分别使用三种方法
1、type
2、rowtype (提示:视图%rowtype)
3、record

第二章参考答案

第三章:流程控制及异常:

1、分别写一个示例
·if..elsif..else..end if
·case when..end case
·case 变量 when..case

2、打印99乘法表
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
....
9*1=9 …… …… …… ……9*9=81

参考答案:流程控制
异常

1、什么是异常,为什么要用异常?异常有什么特点?
2、异常是如何分类的,为什么要用分类?
3、捕获异常、抛出异常和传播异常三者有什么区别,谈谈你的理解。

4、根据工资查询员工姓名。如果此员工不存在,则打印相应的提示信息。

已知:执行select..into时,如果查询没有返回数据,会抛出名为“no_data_found”的异常。

5、输入“1250”,也会抛出一个异常。假设不知道这个异常的名字。如何捕获呢?

参考答案:异常

第4章作业:增删改和事务
书面作业:
·在Oracle中,什么叫做DML操作?
·SQL对象是什么,有什么用?
·returning语法是什么,有什么用?

代码作业:
·示例一:给指定员工增加工资500块。然后打印该员工的姓名和最新工资。
·示例二:添
加员工,工号使用序列seq_emp。然后打印该员工的最新工号。
·示例三:根据工号删除员工。然后提示“**员工已经被删除”,**表示员工姓名。
·示例四、增加指定部门员工的工资10%。然后打印所有的最新工资,以及所有工资之和。

思考作业:

在java中完成,并思考:下面开发的代码有什么“大问题”?
1、添加员工,工号要求在最大工号的基础上加1。
select max(empno) from emp;
insert into emp values(?,?,?,?);
2、根据工号给指定员工增加工资。
update emp set sal=? where empno=?

第五章作业:在块中查询数据
练习1:根据工号查询员工姓名,工作和工资。如果员工不存在,则提示之。
练习2:查询指定部门名称的员工姓名和工作。要求部门名称不区别大小写。
练习3:根据部门名称,按以下格式打印各部门人员姓名:
部门名称:RESEARCH
部门人员:SMITH,JONES,FORD
要求:
·用字符串拼接出所要所有员工姓名以后再打印。
·使用游标for循环完成,其中sql语句要求用下面四种方法,并对比各自的优缺点
1、多条最简单的sql语句   (优点: 缺点:)
2、子查询 (优点: 缺点:)
3、表连接 (优点: 缺点:)
4、视图 (优点: 缺点:)
·再使用显式游标完成,sql语句不做限制。

练习4:针对所有部门,按以下格式打印各部门人员姓名:
部门名称:RESEARCH
部门人员:SMITH,JONES,FORD

部门名称:ACCOUNTING
部门人员:CLARK,KING,MILLER
……
提示
·只要求用FOR,可能会用到双重循环。
·用cursor比较复杂,有能力的同学可以选做。

第六章作业:动态sql

书面作业:
·什么情况下必须要使用动态sql?
·什么情况下可以用静态sql而不需要用动态sql?
·请总结:execute immediate的各种语法
提示:DDL、增删改、查单行、查多行、绑定变量
·为什么要用绑定变量?
·在使用动态sql时,如何提升程序的执行效率?
·请对比动态sql和静态sql之间的区别
·查资料:早期绑定和晚期绑定、软解析和硬解析、软编码和硬编码

·(回顾)sql语句的执行过程是什么?
·‍(回顾)在执行DML操作(增删改)时,数据库后台可能会同时做几件事?
·(回顾)索引比较多,有什么优缺点?


代码作业:
·添加100000员工以下信息:empno,ename,sal,job,hiredate
要求:使用三种方法,并对比三种方法的执行效率。
·静态sql
·先拼接字符串
·绑定变量

说明:原emp表的empno长度为4,所以需要使用“alter table 表名 modify 字段 数据类型”来扩大字段。

答案参考:动态sql

第七章:子程序(过程、函数、包)

代码作业:

练习:添加学生信息(学号,姓名,班级编号),如果班级不存在,则添加班级信息,新班名称暂时与班级编号相同。

开发三个存储过程,分别完成下面三个需求。

 需求一(注册,reg): 创建用户表,判断email是否重复,用户帐号由程序生成,要求连续增长,注册成功,提示:您的帐号是666888! 如果注册失败,请给出适当的提示。

需求二:(登录,login):判断帐号是否存在,密码是否正确,帐户是否锁定。

需求三:(修改密码,update_pwd):要求在检查原用户名和密码以后再更新。 

要求:

1、准备一定的测试数据在PL/SQL块中完成4种测试(用户不存在,密码不对,帐户锁定,登录成功)

2、编写web项目,在java中完成对上面三个过程的调用。

附用户表结构及测试数据: 

 Create table T_USERS
(
U_ID    NUMBER(10) not null,--帐号
U_NAME VARCHAR2(10),--用户名
U_PWD   CHAR(6), --密码
U_EMAIL VARCHAR2(30), --注册邮箱
STATUS NUMBER(1) --锁定状态
);

insert into t_usersvalues (8, 8, 8, 8,0);
insert into t_usersvalues (9, 9, 9, 9, 1);
commit;
  

开发函数:

求1:打印某个部门下一个员工号,业务规则为:部门号+3位流水号。如20部门的员工工号分别是20001,20010,20100……
需求2:添加员工的姓名、部门号。工号使用自动编号。工号的业务规则是:部门号+3位流水号。如20部门的员工工号分别是20001,20010,20100……

函数要求:返回指定部门员工的人员姓名列表,姓名之间用;隔开。
SELECT get_dept_info(10)  FROM dual;
返回:
ACCOUNTING;CLARK;KING。
 

 

参考答案:第七章(子程序)

 

第八章触发器

 1、编写触发器,要求员工编号能够连续增加  

2、编写触发器,要求删除部门时,该部门员工的部门编号设置为空;更新某个部门的编号时,对应部门的部门同时更新。

3、编写触发器,检查添加员工时,如果部门编号不存在,则给出友好提示:编号为**的部门不存在,请先到部门表中先添加。

4、编写触发器,在每个员工增加、修改和删除时,记录工号、操作时间、以是哪一种操作。

posted on 2011-08-07 15:40  hl3292  阅读(4539)  评论(0编辑  收藏  举报