Oracle实验五 PL/SQL编程
【实验目的】
-
熟悉PL/SQL的数据类型和书写规则
-
熟悉控制结构和游标的使用
-
编写和运行函数、过程和触发器
【实验内容】
编写脚本文件,调试运行脚本文件,并记录结果。
一、在SQL*Plus中编写一个PL/SQL块,功能用于打印学生信息。
- 在DECLARE部分完成:
- 建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型
- 编写本地子过程:学生信息打印过程
PrintStuRecord
,把(1)中定义的记录类型作为参数 - 定义学生信息记录变量
stu_record
- 在
BEgin……End
部分完成
-
为
stu_record
变量的各个元素赋值如下:学号:‘2001001’
姓名:’李新’
性别:‘m’
籍贯:‘黑龙江省哈尔滨市’
学习成绩:‘Excellent’
活动成绩:‘Good’
- 对该变量的调用打印过程,输出到屏幕
SET SERVEROUTPUT ON;
DECLARE TYPE stu_record_type is record
(
s_no VARCHAR(10),
s_name VARCHAR(10),
s_sex VARCHAR(10),
s_origin VARCHAR(20),
s_grades VARCHAR(10),
s_activities VARCHAR(10)
);
stu_record stu_record_type;
Procedure PrintStuRecord
as
begin
dbms_output.put_line('学号:' || stu_record.s_no);
dbms_output.put_line('姓名:' || stu_record.s_name);
dbms_output.put_line('性别:' || stu_record.s_sex);
dbms_output.put_line('籍贯:' || stu_record.s_origin);
dbms_output.put_line('学习成绩:' || stu_record.s_grades);
dbms_output.put_line('活动成绩:' || stu_record.s_activities);
end PrintStuRecord;
begin
stu_record.s_no := '2001001';
stu_record.s_name := '李新';
stu_record.s_sex := 'm';
stu_record.s_origin := '黑龙江省哈尔滨市';
stu_record.s_grades := 'Excellent';
stu_record.s_activities := 'Good';
PrintStuRecord;
end;
二、建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中
-
如果没有则建立bookinfo表,选择建立在scott用户下
首先需要解锁
scott
用户
然后修改默认密码
登录到用户scott
表结构为
bookno varchar2(36) Primary key,
bookname varchar2(40) not null,
authorname varchar2(10) not null,
publishtime date,
bookprice float
使用如下代码
create table bookinfo
(
bookno varchar2 (36) Primary key,
bookname varchar2 (40) not null,
authorname varchar2 (10) not null,
publishtime date,
bookprice float
);
运行如下
-
建立数据统计表
major_stats
,包含两个字段:书的总数和作者的总数使用如下的代码
create table major_stats ( booknumber int, author int );
运行结果如下
-
创建触发器
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(booknumber, author) select count(bookno), count(distinct author) from bookinfo; end;
-
在
bookinfo
表中插入、删除和更新信息,再查看major_stats
表中数据的变化插入信息(注意日期需要进行格式化)
insert into bookinfo(bookno, bookname, authorname, publishtime, bookprice) values ('001', 'python', 'zm', to_date('11-01-2021', 'dd-mm-yyyy'), '21')
insert into bookinfo(bookno, bookname, authorname, publishtime, bookprice) values ('002', 'rust', 'lf', to_date('11-11-2022', 'dd-mm-yyyy'), '34')
删除信息
delete from bookinfo where bookno='001';
更新信息
update bookinfo set authorname = 'latex' where bookno = '002';
te from bookinfo where bookno=‘001’;
[外链图片转存中...(img-VY9gks4g-1604056146232)]
更新信息
```sql
update bookinfo set authorname = 'latex' where bookno = '002';