Oracle数据库:存储过程与触发器基础操作指南

版权申诉
0 下载量 114 浏览量 更新于2024-07-07 收藏 1MB DOCX 举报
该文档是南华大学计算机科学与技术学院的一份实验报告,主题聚焦于Oracle数据库中的存储过程和触发器的基本操作。实验中涉及了创建数据表、插入数据等基本步骤,以S_RZ0122(学生表)、C_RZ0122(课程表)和SC_RZ0122(选课关系表)三张表为例,展示了数据库设计和数据填充的过程。 在Oracle数据库中,存储过程是一种预编译的SQL语句集合,可以封装复杂的业务逻辑,提高代码的复用性和执行效率。它们可以有输入参数、输出参数甚至两者兼有,执行时可以像普通SQL语句一样调用。创建存储过程的基本语法如下: ```sql CREATE OR REPLACE PROCEDURE procedure_name (param1 datatype, param2 datatype, ...) AS BEGIN -- SQL statements END; ``` 触发器则是在特定的数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的存储过程。它们常用于实现数据的完整性约束或业务规则。创建触发器的示例: ```sql CREATE TRIGGER trigger_name AFTER INSERT ON table_name FOR EACH ROW BEGIN -- Trigger logic END; ``` 在这个实验中,可能涉及的存储过程操作可能包括添加新的学生、课程或选课记录,或者更新学生信息等。触发器可能用于检查选课时的分数是否有效,或者当学生退课时自动调整课程的总学分等。 例如,如果要创建一个存储过程来添加新的学生,可以这样编写: ```sql CREATE OR REPLACE PROCEDURE add_student(p_sno IN S_RZ0122.SNO%TYPE, p_sname IN S_RZ0122.SNAME%TYPE, p_ssex IN S_RZ0122.SSEX%TYPE, p_sage IN S_RZ0122.SAGE%TYPE, p_sdept IN S_RZ0122.SDEPT%TYPE) AS BEGIN INSERT INTO S_RZ0122(SNO, SNAME, SSEX, SAGE, SDEPT) VALUES(p_sno, p_sname, p_ssex, p_sage, p_sdept); END; ``` 同样,如果要创建一个触发器,确保学生的年龄大于18岁,可以这样设计: ```sql CREATE TRIGGER check_student_age BEFORE INSERT ON S_RZ0122 FOR EACH ROW BEGIN IF :NEW.SAGE < 18 THEN RAISE_APPLICATION_ERROR(-20001, '学生年龄必须大于18岁'); END IF; END; ``` 这个实验旨在帮助学生理解和掌握Oracle数据库中的存储过程和触发器的创建与应用,从而更好地进行数据库的管理和维护。通过实际操作,学生可以更深入地学习到如何利用这些工具来实施数据库的复杂操作和业务规则。