当前位置: 首页 > news >正文

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

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

相关文章:

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

前言 嗨,各位数据库达人!准备好迎接数据库编程的新挑战了吗?今天我们要探索的是Oracle数据库中的神秘魔法——PL/SQL编程!🔮💻 在这篇博文【Oracle】玩转Oracle数据库(五)&#xff1…...

JavaScript流程控制

文章目录 1. 顺序结构2. 分支结构2.1 if 语句2.2 if else 双分支语句2.3 if else if 多分支语句三元表达式 2.4 switch 语句switch 语句和 if else if语句区别 3. 循环结构3.1 for 循环断点调试 3.2 双重 for 循环3.3 while 循环3.4 do while 循环3.5 contiue break 关键字 4. …...

五个使用Delphi语言进行开发的案例

案例一:学生信息管理系统 某学校需要开发一个学生信息管理系统,用于记录学生的基本信息、成绩和考勤情况等。开发者使用Delphi语言进行开发,设计了一个包含多个窗体的应用程序。主窗体用于展示学生的列表和基本信息,其他窗体则用…...

蓝桥杯第1374题——锻造兵器

题目描述 小明一共有n块锻造石,第块锻造石的属性值为ai. 现在小明决定从这n块锻造石中任取两块来锻造兵器 通过周密计算,小明得出,只有当两块锻造石的属性值的差值等于C,兵器才能锻造成功 请你帮小明算算,他有多少种选…...

坚鹏:政府数字化转型数字机关、数据共享及电子政务类案例研究

政府数字化转型数字机关、数据共享及电子政务类案例研究 课程背景: 很多地方政府存在以下问题: 不清楚政府数字化转型的数字机关类成功案例 不清楚政府数字化转型的数据共享类成功案例 不清楚政府数字化转型的电子政务类成功案例 课程特色&…...

【架构】面向人工智能 (AI) 的硬件的可靠性(2021)

由于激进的技术扩展,现代系统越来越容易受到可靠性威胁的影响,例如软错误、老化和工艺变化。这些威胁在硬件级别表现为位翻转,并且根据位置,可能会损坏输出,从而导致不准确或潜在的灾难性结果。 传统的缓解技术基于冗…...

Unity3D MVC开发模式与开发流程详解

前言 MVC(Model-View-Controller)是一种常用的软件架构模式。将MVC应用于Unity3D开发可以提高项目的可维护性和可扩展性,使代码更加清晰和易于理解。本文将详细介绍Unity3D中MVC开发模式的应用以及开发流程,并给出技术详解和代码…...

简单介绍一下Android里面的IntentFirewall

源码链接 https://android.googlesource.com/platform/frameworks/base//633dc9b/services/java/com/android/server/firewall/IntentFirewall.java 源码如下: package com.android.server.firewall; import android.content.Intent; import android.content.Inte…...

Stable Diffusion 3 发布及其重大改进

1. 引言 就在 OpenAI 发布可以生成令人瞠目的视频的 Sora 和谷歌披露支持多达 150 万个Token上下文的 Gemini 1.5 的几天后,Stability AI 最近展示了 Stable Diffusion 3 的预览版。 闲话少说,我们快来看看吧! 2. 什么是Stable Diffusion…...

【后端】springboot项目

文章目录 1. 2.3.7.RELEASE版本搭建1.1 pom文件1.1.1 方式一1.1.2 方式二 1.2 启动类1.3 测试类 2. 引入Value乱码问题解决 【后端目录贴】 1. 2.3.7.RELEASE版本搭建 1.1 pom文件 1.1.1 方式一 <parent><groupId>org.springframework.boot</groupId><…...

React Native调用摄像头画面及拍照和保存图片到相册全流程

今天主要做了一个demo,功能很简单,就是调用手机摄像头画面,并且可以通过按钮控制拍照以及将图片保存到手机相册的功能,接下来我将从创建项目开始一步一步完成这个demo,各位只需要复制粘贴即可 创建React Native项目 npx react-native init yx_rnDemo --version 0.70.6 // 这里…...

Kubernetes基本部署概念

文章目录 命名空间&#xff08;Namespaecs&#xff09;查看命名空间查看带有命名空间对象下资源 文件存储持久卷&#xff08;pv&#xff0c;Persistent Volumes&#xff09;卷容量卷模式&#xff08;volumeMode&#xff09;访问模式&#xff08;accessModes&#xff09;回收策略…...

QT c++ 海康红外热像仪

//本文描述2通道海康通道红外热像仪预览和抓图 #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); userID-1; …...

OpenAI 的 GPTs 提示词泄露攻击与防护实战:防御卷(一)

前面的OpenAI DevDay活动上&#xff0c;GPTs技术的亮相引起了广泛关注。随着GPTs的创建权限开放给Plus用户&#xff0c;社区里迅速涌现了各种有趣的GPT应用&#xff0c;这些都是利用了Prompt提示词的灵活性。这不仅展示了技术的创新潜力&#xff0c;也让人们开始思考如何获取他…...

中科大计网学习记录笔记(十五):可靠数据传输的原理

前前言&#xff1a;看过本节的朋友应该都知道本节长度长的吓人&#xff0c;但其实内容含量和之前的差不多&#xff0c;老师在本节课举的例子和解释比较多&#xff0c;所以大家坚持看完是一定可以理解透彻的。本节课大部分是在提出问题和解决问题&#xff0c;先明确出现的问题是…...

五种多目标优化算法(MOGWO、MOJS、NSWOA、MOPSO、MOAHA)性能对比(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOGWO 1.2MOJS 1.3NSWOA 1.4MOPSO 1.5MOAHA 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数&#xff08;zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3&#xff09;&#xff0…...

力扣:93. 复原 IP 地址

回溯&#xff1a; 1.先定义一个接收的集合&#xff0c;之后再定义一个记录小数点的变量。之后编写回溯函数&#xff0c;终止条件为小数点的个数为3时&#xff0c;同时要判断最后一段的组合的值是否属于ip地址的范围。之后再用for循环来遍历ip地址的组合&#xff0c;先判断组合…...

利用序列化和反序列化实现深拷贝

利用序列化和反序列化可以实现对象的深拷贝,具体步骤如下: 将要深拷贝的对象序列化为字节流。从字节流中反序列化出一个新的对象,即完成了深拷贝。下面是一个示例代码: import java.io.*;class MyClass implements Serializable {private static final long serialVersion…...

【AHK】68键键盘键位布局优化/esc改退格键/回车键

本人习惯使用~作为退格键&#xff0c;但是由于keychron 68键的布局只能用esc平替~来修改&#xff0c;然后也将回车键通过alt和大小写锁定键一起触发 esc::bs ;次步骤与下面步骤相对应&#xff0c;如果是用send bs方式则下面的不生效^esc:: ;通过建立 保留esc功能 send {esc} re…...

计算机体系架构初步入门

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 目录 1 计算机五大…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...