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

news2025/1/19 8:11:47

 

前言

嗨,各位数据库达人!准备好迎接数据库编程的新挑战了吗?今天我们要探索的是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.coloradmin.cn/o/1470018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构和算法初阶(c语言)】数据结构前言,初识数据结构(给你一个选择学习数据结构和算法的理由)

1.何为数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的 数据元素的集合。本质来讲就是在内存中去管理数据方式比如我们的增删查改。在内存中管理数据的方式有很多种(比如数组结构、链式结构、树型结…

导图解文 从梦想到财富(43)只要会请客吃饭,你就能设计出好产品

系列文章说明: 本系列文章 主要是 使用 ​​​​​​​思维导图 对知乎 上一个知乎上的专题系列文章《从梦想到财富》的 一个解读。 1 文章链接 本章节 对应 《从梦想到财富》专栏的 文章链接为:只要会请客吃饭,你就能设计出好产品 2 导图…

CSS 的块级元素和行内元素

CSS 的块级元素和行内元素 常见的块级元素:h1 - h6,p,div, ul, ol, li等 常见的行内元素:a,strong,b,em,i,span等 块级元素的特点 独…

深入理解计算机系统——进程,虚拟内存,文件

文章目录 操作系统之进程线程虚拟内存文件 操作系统之进程 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。进程具有以下特征: 独立性。进程是独立运行的单位,具有自…

Camunda7.18流程引擎启动出现Table ‘camunda_platform_docker.ACT_GE_PROPERTY‘的解决方案

文章目录 1、问题描述2、原因分析3、解决方案3.1、方案一:降低mysql版本3.2、方案二:增加nullCatalogMeansCurrent参数(推荐) 4、总结 1、问题描述 需要在docker中,部署Camunda流程引擎。通过启动脚本camunda-platfor…

Linux系统添加新的网卡,并启用

在Rocky Linux系统中添加新的网卡并启用,一般涉及到以下步骤: 物理连接网卡: 首先确保你的虚拟机已经正确连接了新的网络适配器。 查看新添加的网卡: 在终端中输入以下命令来列出所有已识别的网络接口: ip link show …

1110. 删点成林

1110. 删点成林 关键要点 通过O(1)时间复杂度确认节点是否需要删除 Set to_deleteSet new HashSet<>(); Arrays.stream(to_delete).forEach(to_deleteSet::add); 使用深度优先搜索&#xff08;DFS&#xff09;遍历树 node.left dfs(node.left, s, ans); node.right …

C语言《数据结构与算法》安排教学计划课设

背景&#xff1a; 10、安排教学计划 (1) 问题描述。 学校每学期开设的课程是有先后顺序的&#xff0c;如计算机专业&#xff1a;开设《数据结构》课程之前&#xff0c;必须先开设《C语言程序设计》和《离散数学》课程&#xff0c;这种课程开设的先后顺序称为先行、后继课程关…

RabbitMQ服务启动失败

报错信息&#xff1a; 在服务中启动RabbitMQ服务显示&#xff1a; RabbitMQ 服务正在启动 . RabbitMQ 服务无法启动。 系统出错。 发生系统错误 1067。 进程意外终止 报错原因&#xff1a; 1.Erlang与RabbitMQ是否匹配 2.Erlang与RabbitMQ安装路径是否存在中文或空格 3.电…

定时任务处理-Spring Task

目录 1 前言 2 cron表达式 2.1 相关概念的介绍 2.2 举个例子(白雪警告) 2.3 使用网站自动生成 3 Spring Task的使用 3.1 导入依赖坐标 3.2 开启任务调度 3.3 自定义定时任务类 1 前言 当我们需要处理一些定时任务的时候就需要用到我们的Spring Task&#xff0c;接下来…

在vue3中使用及封装echarts

在vue3中使用及封装echarts 1.获取ECharts 从npm获取 npm install echarts2.在项目中引入ECharts&#xff08;父子组件无通信&#xff09; 导入echarts import * as echarts from echarts创建DOM结构 <template><div ref"myChart" style"width: …

数据库应用:Windows 部署 MySQL 8.0.36

目录 一、实验 1.环境 2.Windows 部署 MySQL 8.0.36 3.Windows配置环境变量 4.Navicat链接MySQL 二、问题 1.安装MySQL 报错 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机软件版本IP备注WindowsMySQL8.0.36localhost 2.Windows 部署 MySQL 8.0.…

m估计及其c++简单实现

文章目录 什么是m估计怎么求解m估计呢&#xff1f;Huber函数时的线性m估计 什么是m估计 自20世纪60年代稳健统计建立以来&#xff0c;在国内外众多学者的研究之下&#xff0c;诞生了一系列稳健统计重要理论和成果。其中最主要且广泛使用的稳健统计有以下三类&#xff1a; L-e…

深度学习系列60: 大模型文本理解和生成概述

参考网络课程&#xff1a;https://www.bilibili.com/video/BV1UG411p7zv/?p98&spm_id_frompageDriver&vd_source3eeaf9c562508b013fa950114d4b0990 1. 概述 包含理解和分类两大类问题&#xff0c;对应的就是BERT和GPT两大类模型&#xff1b;而交叉领域则对应T5 2.…

【深度学习:视频注释】如何为机器学习自动执行视频注释

【深度学习&#xff1a;视频注释】如何为机器学习自动执行视频注释 #1&#xff1a;多目标跟踪 &#xff08;MOT&#xff09; 以确保帧与帧之间的连续性#2&#xff1a;使用插值来填补空白#3: 使用微模型加速人工智能辅助视频注释#4: 自动目标分割提高目标分割质量 自动视频标记通…

Sora将创造多少算力需求?

1.1 Sora 训练与推理算力需求初步测算 Sora发布表现亮眼&#xff0c;TransformerDiffusion架构或成为文生视频大模型新范式。据Sora技术报告&#xff0c;类似于LLM将不同文本数据统一为token&#xff0c;Sora可将不同类型的视频和图像等视觉数据统一为patches&#xff0c;具体…

<script> 标签中的type

typetext/javascript typeapplication/javascript 前者是比较早的版本&#xff0c;已经废弃&#xff0c;但是浏览器大都还支持 后者是最新的规范&#xff0c;但是会有兼容性问题&#xff0c;不兼容ie6-10 typeapplication/json 比较特殊&#xff0c;不常用 简单示例 <!DOCTY…

设计模式学习笔记 - 面向对象 - 7.为什么要多用组合少用继承?如何决定该用组合还是继承?

前言 在面向对象编程中&#xff0c;有一条非常经典的设计原则&#xff1a;组合优于继承&#xff0c;多用组合少用继承。 为什么不推荐使用继承&#xff1f; 组合比继承有哪些优势&#xff1f; 如何判断该用组合还是继承&#xff1f; 为什么不推荐使用继承&#xff1f; 继承…

如何在本地电脑部署HadSky论坛并发布至公网可远程访问【内网穿透】

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3 Cpolar稳定隧道&#xff08;本地设置&#xff09;2.4 公网访问测试 总结 前言 经过多年的基础…

uvloop,一个强大的 Python 异步IO编程库!

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 目录 ​编辑 前言 什么是uvloop库&#xff1f; 安装uvloop库 使用uvloop库 uvloop库的功能特性 1. 更…