【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
begindelete 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.mzph.cn/news/701486.shtml

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

相关文章

SAM轻量化的终点竟然是RepViT + SAM

本文首发:AIWalker,欢迎关注~~ 殊途同归!SAM轻量化的终点竟然是RepViT SAM,移动端速度可达38.7fps。 对于 2023 年的计算机视觉领域来说,「分割一切」(Segment Anything Model)是备受关注的一项…

LeetCode 2476.二叉搜索树最近节点查询:中序遍历 + 二分查找

【LetMeFly】2476.二叉搜索树最近节点查询:中序遍历 二分查找 力扣题目链接:https://leetcode.cn/problems/closest-nodes-queries-in-a-binary-search-tree/ 给你一个 二叉搜索树 的根节点 root ,和一个由正整数组成、长度为 n 的数组 qu…

工具分享:linux命令在线查询工具:让你的系统操作更加便捷

linux命令在线查询工具:让你的系统操作更加便捷 在Linux系统中,命令行是一种非常高效的操作方式,但对于一些不熟悉命令的用户来说,可能会感到有些困惑。不过,现在有了一个非常实用的工具——linux命令在线查询工具&…

计算机体系架构初步入门

🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开发基础教程 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致重复! 目录 1 计算机五大…

onlyoffice api开发

编写代码 按照https://api.onlyoffice.com/editors/basic编写代码 <html> <head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scal…

vue+node.js美食分享推荐管理系统 io551

&#xff0c;本系统采用了 MySQL数据库的架构&#xff0c;在开始这项工作前&#xff0c;首先要设计好要用到的数据库表。该系统的使用者有二类&#xff1a;管理员和用户&#xff0c;主要功能包括个人信息修改&#xff0c;用户、美食类型、美食信息、订单信息、美食分享、课程大…

C#之WPF学习之路(5)

目录 内容控件&#xff08;2&#xff09; TextBlock文字块 TextBox文本框 TextBoxBase基类 TextBox控件 RichTextBox富文本框 ToolTip控件&#xff08;提示工具&#xff09; Popup弹出窗口 Image图像控件 属性成员 事件成员 内容控件&#xff08;2&#xff09; Tex…

基于ILI9341的TFT-LCD屏幕显示要点总结

目录 LCD常用引脚及其功能 LCD驱动流程 RGB565 关键指令 GRAM自增方向 设置开始坐标和结束坐标 写GRAM指令 读GRAM指令 本文主要参考视频如下&#xff1a; 第37讲 LCD-TFTLCD原理与配置介绍-M4_哔哩哔哩_bilibili 说明&#xff1a; 目前&#xff0c;市面上常见的TFT-LC…

程序员可以做什么副业呢?

如果你经常玩知乎、看公众号&#xff08;软件、工具、互联网这几类的&#xff09;你就会发现&#xff0c;好多资源连接都变成了夸克网盘、迅雷网盘的资源链接。 例如&#xff1a;天涯神贴&#xff0c;基本上全是夸克、UC、迅雷网盘的资源链接。 有资源的前提下&#xff0c;迅雷…

Django模型基础(ORM、字段类型、字段参数、增删改查和分页)

模型基础&#xff1a; 字段类型&#xff1a; django根据属性的类型确定以下信息 当前选择的数据库⽀持字段的类型渲染管理表单时使⽤的默认html控件在管理站点最低限度的验证django会为表增加⾃动增⻓的主键列&#xff0c;每个模型只能有⼀个主键列&#xff0c;如果使⽤选项…

【Java程序设计】【C00316】基于Springboot的中小型制造企业质量管理系统(有论文)

基于Springboot的中小型制造企业质量管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的中小型制造企业质量管理设计与实现&#xff0c;本系统有管理员以及工作人员二种角色权限 管理员&#xff1a;首页、个…

如何安装自定义模块?

自定义模块的安装方式如下&#xff1a; 进行了这些操作之后&#xff0c;你就会发现&#xff0c;自己写的代码块&#xff0c;成了可以调用的模块了。

软考41-上午题-【数据库】-关系代数运算3-外连接

一、外连接 连接的拓展&#xff0c;处理由于连接运算而缺失的信息。 1-1、回顾自然连接 1-2、左外连接 示例&#xff1a; 左边的表&#xff0c;数值是全的 1-3、右外连接 示例&#xff1a; 右边的表&#xff0c;数值是全的 1-4、全外连接 示例&#xff1a; 自然连接左外连接…

Java----认识异常

目录 一、异常的概念与体系结构 1.异常的概念 2.异常的体系结构 3.异常的分类 1. 编译时异常 2. 运行时异常 二、异常的处理 1.认识防御式编程 2.异常的抛出 3.异常的捕获 3.1 异常声明throws throws与throw的区别&#xff1a; 3.2 try-catch捕获并处理 3.3 finally …

Java 面向对象进阶 18 JDK8、9开始新增的方法;接口的应用;适配器设计模式;内部类(黑马)

一、JDK8开始新增的方法 默认方法不是抽象方法&#xff0c;所以不强制被重写&#xff1a; 但是如果被重写&#xff0c;就要去掉default关键字&#xff1a; public可以省略&#xff0c;但是default不可以省略&#xff1a; public是灰色的&#xff0c;代表可以省略 但是default是…

使用Makefile对多个shell命令进行编排

一、背景 在日常运维过程中&#xff0c;我们都会需要写大量的shell命令&#xff0c;如果是工程相对复杂的话&#xff0c;shell命令往往会封装为函数&#xff0c;交由主函数按需调用。 本文将引入Makefile来对复杂shell命令进行封装&#xff0c;让其变得易读易懂。 下面以一个…

PyPDF2:Python里的PDF忍者

目录&#x1f4d1; 1. 背景&#x1f4d1;2. PyPDF2简介&#xff1a;你的PDF小帮手&#x1f4d1;3. PyPDF2全能手册&#x1f4d1;3.1 读取PDF文件内容3.2 合并PDF文件3.3 分割PDF文件3.4 加密PDF文件 4. 总结&#x1f4d1; 1. 背景&#x1f4d1; 又是一个实际需求&#xff0c;将…

java spring 01 IOC源码

01.spring 中的基础是IOC

6-pytorch-神经网络搭建

b站小土堆pytorch教程学习笔记 1.神经网络骨架搭建&#xff1a;Containers 官方文档代码&#xff1a; import torch.nn as nn import torch.nn.functional as Fclass Model(nn.Module):def __init__(self):super().__init__()self.conv1 nn.Conv2d(1, 20, 5)self.conv2 nn.…

“TypeError: utils request jS WEBPACK IMPORTED MODULE O .default is undefined‘报错

写项目时报下列错误&#xff0c;找了半天&#xff0c;结果才发现自己在request.js中少写了一行代码 一定不要少些代码 export default requestrequest.js完整代码 import axios from axios;//创建一个新的axios对象 const request axios.create({baseURL:http://localhost:…