🌈个人主页:godspeed_lucip
🔥 系列专栏:Oracle从基础到进阶
本文对应Oracle实验报告源文件下载:公众号程序员刘同学
回复oracle实验
获取下载链接
实验5:Oracle中的PL/SQL编程
一、实验目的
1 熟悉PL/SQL的数据类型和书写规则
2 熟悉控制结构和游标的使用
3 编写和运行函数、过程和触发器
二、实验环境
Oracle 11g
三、实验内容
1 PL/SQL1
在SQL*Plus中编写一个PL/SQL块,功能用于打印学生信息。要求写成一个完成的程序,下面是分别提出程序内要实现的具体要求。
(1)在DECLARE部分完成:
① 建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型
② 定义学生信息记录变量stu_record
③ 编写本地子过程:学生信息打印过程PrintStuRecord,把(1)中定义的记录类型作为参数,注意这个过程是带参数的。
(2)在BEGIN…END部分完成:
①为stu_record变量的各个元素赋值如下:
学号:‘2001001’
姓名:’李新’
性别:‘m’
籍贯:‘黑龙江省哈尔滨市’
学习成绩:‘Excellent’
活动成绩:‘Good’
②对该变量的调用打印过程,输出到屏幕
代码如下:
set serverout on
declare
type stu_record_type is record(
stu_name varchar2(20),
stu_id varchar2(20),
stu_sex varchar2(20),
stu_home varchar2(50),
stu_study_score varchar2(20),
stu_activity_score varchar2(20)
);
stu_record stu_record_type;
procedure PrintStuRecord(test_stu in stu_record_type) as
begin
dbms_output.put_line('这名学生的学号为:' || test_stu.stu_id);
dbms_output.put_line('这名学生的姓名为:' || test_stu.stu_name);
dbms_output.put_line('这名学生的性别为:' || test_stu.stu_sex);
dbms_output.put_line('这名学生的籍贯为:' || test_stu.stu_home);
dbms_output.put_line('这名学生的学习成绩为:' || test_stu.stu_study_score);
dbms_output.put_line('这名学生的活动成绩为:' || test_stu.stu_activity_score);
end PrintStuRecord;
begin
stu_record.stu_id := '2001001';
stu_record.stu_name := '李新';
stu_record.stu_sex := 'm';
stu_record.stu_home := '黑龙江齐齐哈尔市';
stu_record.stu_study_score := 'Excellent';
stu_record.stu_activity_score := 'Good';
PrintStuRecord(stu_record);
end ;
运行效果如图所示。
2 PL/SQL2
建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中
(1)在Scott用户下建立bookinfo表。代码如下所示。
create table bookinfo(
bookno varchar2(36) Primary key,
bookname varchar2(40) not null,
authorname varchar2(10) not null,
publishtime date,
bookprice float
)
(2)建立数据统计表major_stats,包含两个字段:书的总数和作者的总数。代码如下。
create table major_stats(
number_books int,
number_writters int
)
(3)创建触发器UpdateMajorStats,完成在bookinfo表中插入、删除和修改记录之后,对bookinfo表进行统计,结果存储在(2)建立的major_stats表中。代码如下所示。
create or replace trigger UpdateMajorStats
after update or delete or insert
on bookinfo
begin
delete from major_stats;
insert into major_stats(number_books,number_writters)
select count(bookno),count(distinct authorname)
from bookinfo;
end UpdateMajorStats;
创建成功:
(4)在bookinfo表中插入、删除和更新信息,再查看major_stats表中数据的变化
① 当初始时bookinfo中没有数据,效果如图所示。
② 向bookinfo中插入数据,效果如图所示。
③ 从bookinfo中删除一条数据,效果如图所示。
四、实验体会
1 Oracle中存储过程等有许多特点,即使我们之前有SQL的触发器、存储过程编程经验,但是第一次上手PL/SQL编程时难免会感觉有点困难。记得认真查阅资料。
2 对PL/SQL的数据类型和书写规则更为熟悉。
总结
神谕之光照亮时光河, Oracle智慧如流水悠然。
代码之舞奏响天籁歌, 预言者的眼眸闪烁着星辰。
数据的花园,芬芳绽放, 算法的交响,梦幻飘荡。
数据库的宝匣珍藏智慧, 编码的诗篇激荡心房。
奇迹的编织,Oracle的织女, 信息的纱巾,飘扬在时光。
智者的导航, Oracle,诗意的编码航船。
渴望挑战oracle的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多oracle的奇迹吧。我们推出了引领趋势的💻oracle专栏:【Oracle从基础到进阶】 ,旨在深度探索Oracle的实际应用和创新。🌐🔍