【Oracle】玩转Oracle数据库(五):PL/SQL编程

 

前言

嗨,各位数据库达人!准备好迎接数据库编程的新挑战了吗?今天我们要探索的是Oracle数据库中的神秘魔法——PL/SQL编程!🔮💻

在这篇博文【Oracle】玩转Oracle数据库(五):PL/SQL编程中,我们将进入编程的奇妙世界,掌握PL/SQL这门神秘的魔法,让数据库发挥出更强大的力量!💡🚀

无论你是想成为数据库开发大师,还是想提升数据库应用的功能,相信我,本文都会是你的灵感摇篮!我们要学会编写存储过程、触发器、函数等PL/SQL程序,掌握异常处理和事务控制的技巧,让我们的数据库编程之路更加畅快!准备好将数据库变成你的魔法王国了吗?跟着我一起探索PL/SQL的奥秘,让我们的数据库应用更上一层楼!📝🌟

目录

前言

☀️一、研究目的

🌼二、研究内容

🌷三、研究结论

🔥1. 在SQL*Plus中编写一个PL/SQL块,功能用于打印学生信息。要求写成一个完成的程序,下面是分别提出程序内要实现的具体要求。

🔥2. 建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中

☀️(1)如果没有则建立bookinfo表,选择建立在scott用户下,表结构为

☀️(2) 建立数据统计表major_stats,包含两个字段:书的总数和作者的总数

☀️(3) 创建触发器UpdateMajorStats,完成在bookinfo表中插入、删除和修改记录之后,对bookinfo表进行统计,结果存储在(2)建立的major_stats表中

☀️(4) 在bookinfo表中插入、删除和更新信息,再查看major_stats表中数据的变化

📝四、研究心得


☀️一、研究目的

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就是个不错的选择,操作起来简直流畅得像是在弹钢琴!🎹✨

总的来说,这次实验让我感受到了编程的乐趣和挑战,虽然有小插曲,但成就感满满!🌟💻 继续探索,我们的数据库之旅才刚刚开始!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/409460.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2.25基础会计学

资本公积是指由股东投入、但不能构成“股本”或“实收资本”的资金部分。 盈余公积是指公司按照规定从净利润中提取的各种积累资金。 所以区别在于盈余公积来自净利润。 借贷其实就是钱从哪来和到哪去的问题,来源是贷,流向是借。比如购入9w原材料&…

【监控】grafana图表使用快速上手

目录 1.前言 2.连接 3.图表 4.job和path 5.总结 1.前言 上一篇文章中,我们使用spring actuatorPrometheusgrafana实现了对一个spring boot应用的可视化监控。 【监控】Spring BootPrometheusGrafana实现可视化监控-CSDN博客 其中对grafana只是打开了一下&am…

YApi-pro docker安装在centos7上

之前安装失败了,只好在docker中装了。 准备环境 1.docker安装 centos7 docker 安装-CSDN博客 2.mongodb数据库docker安装 创建mongo容器目录 mkdir /data/mongo -p docker pull mongo:4.2.21 创建一个yapi网络插件 docker network create yapi …

音频声波的主观感受

一、响度 声压是“客观”的,响度是“主观”的。 响度又称音量。人耳感受到的声音强弱,它是人对声音大小的一个主观感觉量。响度的大小决定于声音接收处的波幅,就同一声源来说,波幅传播的愈远,响度愈小…

python jupyter notebook打开页面方便使用

如果没安装jupyter, 请安装: pip install jupyter notebook 运行jupyter notebook jupyter-notebook

【Redis】搞懂过期删除策略和内存淘汰策略

1、过期删除策略 1.1、介绍 Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将已过期的键值对删除,而做这个工作的就是过期键值删除策略。 每当我们对一个 key 设置了过期时间时,Redis 会把该 key 带上过期时间存储到一个过期字典…

如何做到三天内完成智能直流伺服电机系统开发?

适应EtherCAT/CANopen协议三相伺服电机直流伺服电机直线伺服音圈电机 如何开发高性能直流伺服电机驱动控制器? 需要熟悉高性能单片机(至少是ARM或DSP水平的),需要掌握空间磁场矢量控制FOC,需要掌握运动轨迹算法……此…

Vue监听器(上)之组合式watch

1. 定义监听器 //要监视的属性被改变时触发 watch(要监视的属性, (更改后的心值, 更改前的旧值) > {具体操作}, );//监视对象为getter的时候 //表达式内任意响应式属性被改变时触发 watch(() > return表达式, (表达式的新值, 表达式的旧值) > {具体操作} );//数组中任…

四六级成绩爬取代码原创

在六级成绩刚发布时,只需要通过学生姓名和身份证号便可以查询到成绩 据此,我们可以利用selenium框架对学生的成绩进行爬取 首先我们要建立一个excel表格,里面放三列(多几列也无所谓),第一列列名取为学生姓…

在openEuler中通过KVM可视化安装华为FusionCompute的VRM节点

一、说明 本文是华为FusionCompute云平台配置的延续,是在CNA(ComputingNode Agent,计算节点代理)主机安装配置完成后,详细安装VRM(Virtual Resource Manager,虚拟资源管理器)节点的…

基于Clion+stm32cubemx+rt-thread os进行环境搭建

前言 RT-Thread文档中心Clion开发STM32的环境搭建,请参考之前的文章本次使用的芯片为STM32F407VET6,其他芯片相似.项目创建 使用STM32CubeMx快速生成项目工程,此步骤的话可以参考官方文档 基础配置如下

AtCoder ABC341 A-D题解

比赛链接:ABC341 Problem A: 先签个到。 #include <bits/stdc.h> using namespace std; int main() {int n;cin>>n;for(int i0;i<n;i)cout<<"10"<<endl;cout<<"1"<<endl;return 0; } Problem B: 继续签。 #i…

在 where子句中使用子查询(二)

目录 ANY ANY &#xff1a;功能上与 IN 是没有任何区别的 >ANY &#xff1a;比子查询返回的最小值要大 ALL >AL &#xff1a;比子查询返回的最大值要大 EXISTS() 判断 NOT EXISTS Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209…

【Go的函数】

函数 函数的引入函数细节祥讲包的引入包的细节详讲init函数匿名函数闭包defer关键字系统函数字符串相关函数日期和时间相关函数内置函数 函数的引入 【1】为什么要使用函数&#xff1a; 提高代码的复用&#xff0c;减少代码的冗余&#xff0c;代码的维护性也提高了 【2】函数…

论文解析——Review of chiplet-based design: system architecture and interconnection

作者 Liu Yafei1, Li Xiangyu2, YIN ShouYi1, Review of chiplet-based design: system architecture and interconnection, SCIENCE CHINA Information Sciences, 2024, ISSN 1674-733X, https://doi.org/10.1007/s11432-023-3926-8. 1School of Integrated Circuit, Tsingh…

来看大厂如何设计运营后台系统的?

0 背景 重运营的应用。对于App里的顶导航、我的页面、弹窗等&#xff0c;需要根据模式、版本、平台、语言、渠道等不同的维度进行运营管理。随着业务快速发展&#xff0c;版本快速迭代&#xff0c;如何&#xff1a; 保持运营资源能够被高效、稳定和灵活地配置高效稳定的为新的…

软件游戏显示d3dx9_42.dll丢失的5种解决方法,快速解决dll问题

当计算机系统中d3dx9_42.dll文件丢失时&#xff0c;可能会引发一系列运行问题和功能异常&#xff0c;具体表现形式多样且影响范围较广。首先&#xff0c;对于依赖于DirectX 9.0c版本的各类应用程序&#xff0c;尤其是部分经典的老款游戏&#xff0c;由于d3dx9_42.dll是其中不可…

深度解析:Integer.parseInt() 源码解读

深度解析&#xff1a;Integer.parseInt() 源码解读 关键要点 解析字符&#xff1a;用于将字符转换为对应的数字值 Character.digit(s.charAt(i),radix) 确定limit&#xff1a;根据正负号分别设定 int limit -Integer.MAX_VALUE;【正】 limit Integer.MIN_VALUE;【负】 负数…

【卷积神经网络中用1*1 卷积有什么作用或者好处呢?】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;深度学习 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 1*1 卷积有什么作用或者好处呢 作用降维和增加非线性特征组合和交互网络的宽度和深度调整全连接替代增强…

matlab滤波器设计

1、内容简介 略 51-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 matlab滤波器设计-butter、ellip、cheby1、cheby2_哔哩哔哩_bilibili 4、参考论文 略