Oracle数据库操作与触发器实践
需积分: 9 166 浏览量
更新于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数据库的基础操作,包括数据查询、表的约束设定和触发器的使用,这些都是数据库管理和开发中不可或缺的技能。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2017-08-05 上传
2021-03-09 上传
2021-03-09 上传
2009-06-09 上传
2009-06-09 上传
2013-02-24 上传
为的就是这块技术
- 粉丝: 2
- 资源: 1
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析