Oracle实验五 PL/SQL编程

Oracle实验五 PL/SQL编程

【实验目的】

  1. 熟悉PL/SQL的数据类型和书写规则

  2. 熟悉控制结构和游标的使用

  3. 编写和运行函数、过程和触发器

【实验内容】

编写脚本文件,调试运行脚本文件,并记录结果。

一、在SQL*Plus中编写一个PL/SQL块,功能用于打印学生信息。

  1. 在DECLARE部分完成:
  • 建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型
  • 编写本地子过程:学生信息打印过程PrintStuRecord,把(1)中定义的记录类型作为参数
  • 定义学生信息记录变量stu_record
  1. BEgin……End部分完成
  • stu_record变量的各个元素赋值如下:

    学号:‘2001001’

    姓名:’李新’

    性别:‘m’

    籍贯:‘黑龙江省哈尔滨市’

    学习成绩:‘Excellent’

    活动成绩:‘Good’

  1. 对该变量的调用打印过程,输出到屏幕
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表的数据进行统计,结果存储在数据统计表中

  1. 如果没有则建立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
);

运行如下

在这里插入图片描述

  1. 建立数据统计表major_stats,包含两个字段:书的总数和作者的总数

    使用如下的代码

    create table major_stats
    (
        booknumber int,
        author int
    );
    

    运行结果如下

在这里插入图片描述

  1. 创建触发器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;
    

在这里插入图片描述

  1. 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';

在这里插入图片描述

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值