前言
嗨,各位数据库达人!准备好迎接数据库编程的新挑战了吗?今天我们要探索的是Oracle数据库中的神秘魔法——PL/SQL编程!🔮💻
在这篇博文【Oracle】玩转Oracle数据库(五):PL/SQL编程中,我们将进入编程的奇妙世界,掌握PL/SQL这门神秘的魔法,让数据库发挥出更强大的力量!💡🚀
无论你是想成为数据库开发大师,还是想提升数据库应用的功能,相信我,本文都会是你的灵感摇篮!我们要学会编写存储过程、触发器、函数等PL/SQL程序,掌握异常处理和事务控制的技巧,让我们的数据库编程之路更加畅快!准备好将数据库变成你的魔法王国了吗?跟着我一起探索PL/SQL的奥秘,让我们的数据库应用更上一层楼!📝🌟
☀️一、研究目的
1.熟悉PL/SQL的数据类型和书写规则
2.熟悉控制结构和游标的使用
3.编写和运行函数、过程和触发器
🌼二、研究内容
1. 在SQL*Plus中编写一个PL/SQL块,功能用于打印学生信息。要求写成一个完成的程序,下面是分别提出程序内要实现的具体要求。
在DECLARE部分完成:
(1) 建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型
(2) 定义学生信息记录变量stu_record
(3) 编写本地子过程:学生信息打印过程PrintStuRecord,把(1)中定义的记录类型作为参数,注意这个过程是带参数的。
在BEGIN…END部分完成:
(1) 为stu_record变量的各个元素赋值如下:
学号:‘2020xxxx’
姓名:’xxx’
性别:‘男’
籍贯:‘黑龙江省哈尔滨市’
学习成绩:‘Excellent’
活动成绩:‘Good’
(2) 对该变量的调用打印过程,输出到屏幕
2. 建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中
(1) 如果没有则建立bookinfo表,选择建立在scott用户下,表结构为
(bookno varchar2(36) Primary key,
bookname varchar2(40) not null,
authorname varchar2(10) not null,
publishtime date,
bookprice float)
(2) 建立数据统计表major_stats,包含两个字段:书的总数和作者的总数
(3) 创建触发器UpdateMajorStats,完成在bookinfo表中插入、删除和修改记录之后,对bookinfo表进行统计,结果存储在(2)建立的major_stats表中
(4) 在bookinfo表中插入、删除和更新信息,再查看major_stats表中数据的变化
🌷三、研究结论
准备工作:
按住win+r输入sqlplus,如图1.
图1
输入用户名:sys as sysdba,密码:Csuft123.并输入startup启动实例如图2.
图2
【实验内容开始】
🔥1. 在SQL*Plus中编写一个PL/SQL块,功能用于打印学生信息。要求写成一个完成的程序,下面是分别提出程序内要实现的具体要求。
在DECLARE部分完成:
(1) 建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型
(2) 定义学生信息记录变量stu_record
(3) 编写本地子过程:学生信息打印过程PrintStuRecord,把(1)中定义的记录类型作为参数,注意这个过程是带参数的。
在BEGIN…END部分完成:
(1) 为stu_record变量的各个元素赋值如下:
学号:‘2020xxxx’
姓名:’xxx’
性别:‘男’
籍贯:‘黑龙江省哈尔滨市’
学习成绩:‘Excellent’
活动成绩:‘Good’
(2) 对该变量的调用打印过程,输出到屏幕
答:代码如下
SET SERVEROUTPUT ON; DECLARE TYPE stu_record_type is record ( stu_num VARCHAR(20), stu_name VARCHAR(20), stu_sex VARCHAR(20), stu_origin VARCHAR(50), stu_grades VARCHAR(20), stu_actscores VARCHAR(20) ); stu_record stu_record_type; Procedure PrintStuRecord as begin dbms_output.put_line('学号:' || stu_record.stu_num); dbms_output.put_line('姓名:' || stu_record.stu_name); dbms_output.put_line('性别:' || stu_record.stu_sex); dbms_output.put_line('籍贯:' || stu_record.stu_origin); dbms_output.put_line('学习成绩:' || stu_record.stu_grades); dbms_output.put_line('活动成绩:' || stu_record.stu_actscores); end PrintStuRecord; begin stu_record.stu_num := '2020xxxx'; stu_record.stu_name := 'xxx'; stu_record.stu_sex := '男'; stu_record.stu_origin := '黑龙江省哈尔滨市'; stu_record.stu_grades := 'Excellent'; stu_record.stu_actscores := 'Good'; PrintStuRecord; end;
在plsqldev编辑器显示如图3所示。
图3
输入‘/’后运行结果如图4所示
图4
🔥2. 建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中
☀️(1)如果没有则建立bookinfo表,选择建立在scott用户下,表结构为
(bookno varchar2(36) Primary key, bookname varchar2(40) not null, authorname varchar2(10) not null, publishtime date, bookprice float)
答:连接到scott用户如图5
图5
建立bookinfo表格语句为
create table bookinfo ( bookno varchar2 (36) Primary key, bookname varchar2 (40) not null, authorname varchar2 (10) not null, publishtime date, bookprice float );
运行结果如图6
图6
☀️(2) 建立数据统计表major_stats,包含两个字段:书的总数和作者的总数
答:语句如下:
create table major_stats ( book_number int, author_number int );
运行结果如图7
图7
☀️(3) 创建触发器UpdateMajorStats,完成在bookinfo表中插入、删除和修改记录之后,对bookinfo表进行统计,结果存储在(2)建立的major_stats表中
答:创建语句如下
create or replace TRIGGER UpdateMajorStats after insert or delete or update on bookinfo begin delete from major_stats; insert into major_stats(book_number, author_number) select count(bookno), count(distinct authorname) from bookinfo; end;
运行结果如图8
图8
☀️(4) 在bookinfo表中插入、删除和更新信息,再查看major_stats表中数据的变化
答:最初major_stats表无数据如图9
图9
插入如图10
图10
删除如图11
图11
更新如图12
图12
📝四、研究心得
嘿,数据库编程小达人们!这次的PL/SQL编程实验可是个火爆的技术派对!我不仅熟悉了PL/SQL的各种数据类型和书写规则,还编写并成功运行了函数、过程和触发器,让数据库的功能焕发出新的活力!💥🔥
但哎呀,技术之路总是充满了挑战和惊喜!这次实验中,遇到了那个“PLS-00103”的错误提示,简直就像是在迷宫里碰壁!🔍🚧幸好,上网一查,问题迎刃而解,原来存储过程定义时不需要指定VARCHAR2的长度!技术小问题,小把戏!😉
嗯,这次的实验相对简单,因为和之前学的SQL Server有点类似,所以上手还算顺利!不过,要是有个可视化工具辅助一下,编程起来肯定会更加得心应手!PLSQLDEV就是个不错的选择,操作起来简直流畅得像是在弹钢琴!🎹✨
总的来说,这次实验让我感受到了编程的乐趣和挑战,虽然有小插曲,但成就感满满!🌟💻 继续探索,我们的数据库之旅才刚刚开始!