Oracle数据库操作与触发器实践
需积分: 9 129 浏览量
更新于2024-09-11
收藏 8KB DOCX 举报
"Oracle实验涉及了Oracle数据库的基础操作,包括SQL查询、表的约束定义以及行级触发器的创建。实验内容围绕三个表展开:学生基本信息、课程信息和学生成绩。"
在Oracle数据库管理中,熟悉SQL语言是至关重要的。问题一中,通过以下SQL语句可以查询年龄在20到30之间的学生人数:
```sql
SELECT COUNT(年龄)
FROM 学生基本信息
WHERE 年龄 >= 20 AND 年龄 <= 30;
```
这个查询利用`COUNT()`函数统计满足条件的行数,`WHERE`子句用于筛选年龄在指定范围内的记录。
在数据库设计中,确保数据完整性和一致性是必要的。问题二展示了如何对表进行约束定义。首先,为学生基本信息表的学号字段添加主键约束:
```sql
ALTER TABLE 学生基本信息
ADD CONSTRAINT student_学号_pk PRIMARY KEY (学号);
```
接着,为性别字段添加检查约束,确保性别只能为'男'或'女':
```sql
ALTER TABLE 学生基本信息
ADD CONSTRAINT student_sex_ck
性别 CHECK (sex IN ('男', '女'));
```
最后,为学生成绩表的学号字段添加外键约束,关联到学生基本信息表:
```sql
ALTER TABLE 学生成绩表
ADD CONSTRAINT student_学号_fk
FOREIGN KEY (学号) REFERENCES 学生基本信息(学号);
```
这确保了学生成绩表中的学号必须存在于学生基本信息表中。
问题三涉及到了行级触发器的创建。触发器是一种在特定数据库操作(如INSERT、UPDATE或DELETE)发生后自动执行的存储过程。在这里,我们需要创建一个行级触发器,当学生成绩表有新插入或更新的数据时,检查并记录不及格学生的信息到新的表"不及格学生"中:
```sql
CREATE TABLE scott.不及格学生
(
学号 VARCHAR(20),
姓名 VARCHAR(20),
专业 VARCHAR(20),
课程名称 VARCHAR(20),
分数 NUMBER(20)
);
CREATE OR REPLACE TRIGGER tri_score
AFTER INSERT OR UPDATE ON 学生成绩
FOR EACH ROW
DECLARE
CURSOR cursor_stu(p_stu_no VARCHAR2, p_cour_no VARCHAR2) IS
SELECT student.学号, student.姓名, student.专业, course.课程名称, score.分数
FROM student, score, course
WHERE student.学号 = score.学号 AND course.课程编号 = score.课程编号
AND score.学号 = p_stu_no AND score.课程编号 = p_cour_no;
v_stu cursor_stu%ROWTYPE;
BEGIN
-- 检查并处理不及格学生
IF :NEW.分数 < 60 THEN
OPEN cursor_stu(:NEW.学号, :NEW.课程编号);
FETCH cursor_stu INTO v_stu;
CLOSE cursor_stu;
INSERT INTO scott.不及格学生 VALUES (v_stu.学号, v_stu.姓名, v_stu.专业, v_stu.课程名称, v_stu.分数);
END IF;
END;
/
```
这个触发器定义了一个游标`cursor_stu`,用于获取不及格学生的详细信息,并在触发器主体中检查新插入或更新的分数是否低于60分。如果不及格,则将这些信息插入到"不及格学生"表中。
通过这些实验,我们可以深入理解Oracle数据库的基础操作,包括数据查询、表的约束设定和触发器的使用,这些都是数据库管理和开发中不可或缺的技能。
2013-10-26 上传
2009-06-09 上传
2024-11-04 上传
为的就是这块技术
- 粉丝: 2
- 资源: 1
最新资源
- Aspose资源包:转PDF无水印学习工具
- Go语言控制台输入输出操作教程
- 红外遥控报警器原理及应用详解下载
- 控制卷筒纸侧面位置的先进装置技术解析
- 易语言加解密例程源码详解与实践
- SpringMVC客户管理系统:Hibernate与Bootstrap集成实践
- 深入理解JavaScript Set与WeakSet的使用
- 深入解析接收存储及发送装置的广播技术方法
- zyString模块1.0源码公开-易语言编程利器
- Android记分板UI设计:SimpleScoreboard的简洁与高效
- 量子网格列设置存储组件:开源解决方案
- 全面技术源码合集:CcVita Php Check v1.1
- 中军创易语言抢购软件:付款功能解析
- Python手动实现图像滤波教程
- MATLAB源代码实现基于DFT的量子传输分析
- 开源程序Hukoch.exe:简化食谱管理与导入功能