【作业】
1、 定义一个 PL/SQL 块,向屏幕输出 hello world!。
2、 定义一个 PL/SQL 块,用来转换字符串的大小写格式。
3、 创建一个用户表(编号,名字,年龄,身高,体重,爱好,专业,毕业学校),以该表
为基表创建一个新的数据类型,该数据类型要包含该基表的(编号,姓名,爱好)三列。
4、 创建一个基于上面的基表的数据类型。并将数据从表中取出赋予给新的变量,并将其输
出到屏幕。
5、 使用 table 复合数据类型,提取员工表 emp 中的员工姓名 ename 和员工职位 job
6、 使用 record 类型封装部门表 dept 中的部门编号 deptno 和部门名称 dname,将部门编号
设置为 55,部门名称设置为 finance 并打印出来
7、 在 PL/SQL 中写入参数员工编号和员工姓名,部门编号到员工信息表 emp 中,并提交
8、 验证插入的数据
9、 在 PL/SQL 中根据员工编号参数删除员工表 emp 中的记录。
10、定义一个函数,根据部门编号参数,查询出该部门的员工总数,并作为参数输出(暂时不
做)
11、定义一个存储过程,使用游标方式,根据员工编号参数,查询并打印该员工的下属的姓名,
职位,工资等信息. (暂时不做)
12、
阅读下列说明,回答问题 1 至问题 5。
【说明】
某工厂的信息管理数据库的部分关系模式如下所示:
职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)
部门(部门号,部门名,负责人代码,任职时间)
关系模式的主要属性、含义及约束如表 2-1 所示,“职工”和“部门”的关系示例分别如表
2-2 和表 2-3 所示。
表 2-1 主要属性、含义及约束
表 2-2 “职工”关系
表 2-3“部门”关系
【问题 1】
根据上述说明,由 SQL 定义的“职工”和“部门”的关系模式,以及统计各部门的人数 C、
工资总数 Totals、平均工资 Averages 的 D_S 视图如下所示,请在空缺处填入正确的内容。
Create Table 部门(部门号 CHAR(1)(a),
部门名 CHAR(16),
负责人代码 CHAR(4),
任职时间 DATE,
(b) (职工号));
Create Table 职工(职工号 CHAR(4),
姓名 CHAR(8),
年龄 NUMDER(3),
月工资 NUMDER(4),
部门号 CHAR(1),
电话 CHAR(8),
办公室 CHAR(8),
(a) (职工号),
(c) (部门号),
CHECK( (d) ));
Create View D_S(D,C,Totals,Averages) As
(Select 部门号, (e)
from 职工
(f) ;
【问题2】
对于表 2-2、表 2-3 所示的“职工”和“部门”关系,请指出下列各行是否可以插入,为什
么?
(1) 1001 王新军 28 1000 1 8001234 主楼 201
(2) 2003 李力 28 1000
(3) 5802 赵晓啸 36 1500 6 8001568 3 号楼 503
【问题 3】
在问题 1 定义的视图 D_S 上,下面哪个查询或更新是允许执行的,为什么?
(1) Update D_S set D=3 where D=4;
(2) Delete from D_S where C>4;
(3) Select D,Averages from D_S
where C>(Select C from D_S where D=:dept);
(4) Select D,C from D_S
where Totals>10000;
(5) Select * from D_S;
【问题4】
查询每个部门中月工资最高的“职工号”的 SQL 查询语句如下:
Select 职工号 from 职工 E
Where 月工资=(Select Max(月工资)
from 职工 as M
where M.部门号=E.部门号)
(1)请用 30 字以内文字简要说明该查询语句对查询效率的影响。
(2)对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率。
【问题 5】
假定分别在“职工”关系中的“年龄”和“月工资”字段上创建了索引,如下的 Select 查询语
句可能不会促使查询优化器使用索引,从而降低查询效率,请写出既可以完成相同功能又可
以提高查询效率的 SQL 语句。
Select 姓名,年龄,月工资 from 职工
where 年龄>45 or 月工资<1000;
练习:
1、使用异常和流程控制,写一个 ATM 机的完整版。