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

SQL中的游标、异常处理、存储函数及总结

目录

一.游标

格式

操作

 演示

二.异常处理—handler句柄

格式

 演示

 三.存储函数

格式

 参数说明

演示

四.存储过程总结


 

一.游标

游标(cursor)是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、OPEN、FETCH和 CLOSE.

格式

 

操作

 演示

use test_procedure ;
-- 需求:输入一个部门名,查询该部门员工的编号、名字、薪资,将查询的结果集添加游标
delimiter $$
create procedure proc21(in in_name varchar(50))
begin-- 定义局部变量declare var_empno int;declare var_ename varchar(50);declare var_sal decimal(7,2);-- 声明游标declare my_cursor cursor forselect empno ,ename ,sal  from emp e,dept d where d.dname =in_name ;-- 打开游标open my_cursor;-- 通过游标获得值fetch my_cursor into var_empno,var_ename,var_sal;select var_empno,var_ename,var_sal;-- 关闭游标close my_cursor;
end $$
delimiter ;call proc21('销售部');

运行输出的结果是

但是

 我们发现符合要求的有多个值,这是因为游标是一条条往下执行的所以我们可以用一个循环

use test_procedure ;
-- 需求:输入一个部门名,查询该部门员工的编号、名字、薪资,将查询的结果集添加游标
delimiter $$
create procedure proc21(in in_name varchar(50))
begin-- 定义局部变量declare var_empno int;declare var_ename varchar(50);declare var_sal decimal(7,2);-- 声明游标declare my_cursor cursor forselect empno ,ename ,sal  from emp e,dept d where d.dname =in_name ;-- 打开游标open my_cursor;-- 通过游标获得值label:loopfetch my_cursor into var_empno,var_ename,var_sal;select var_empno,var_ename,var_sal;end loop label;-- 关闭游标close my_cursor;
end $$
delimiter ;call proc21('销售部');

 结果会报错

No data - zero rows fetched, selected, or processed 这句话意思是没有数据 零行 读取 选择或处理,就是说循环到最后没值了,所以我们需要找到一个条件并及时退出循环,这就需要异常处理—handler句柄。

二.异常处理—handler句柄

格式

 注意

在语法中,变量声明、游标声明、handler声明是必须按照先后顺序书写的,否则创建存储过程出错。

--定义句柄:定义异常的处理方式

1:异常处理完之后程序该怎么执行
        continue :继续执行剩余代码

        exit :直接终止程序
        undo:不支持
2:触发条件

条件码:1329

条件名:
        SQLWARNING

        NOT FOUND

        SQLEXCEPTION

 演示

-- 用条件名
use test_procedure ;
-- 需求:输入一个部门名,查询该部门员工的编号、名字、薪资,将查询的结果集添加游标
delimiter $$
create procedure proc22(in in_name varchar(50))
begin-- 定义局部变量declare var_empno int;declare var_ename varchar(50);declare var_sal decimal(7,2);-- 定义标记值declare flag int default 1;-- 声明游标declare my_cursor cursor forselect empno ,ename ,sal  from emp e,dept d where d.dname =in_name ;-- 定义句柄,当数据未发现时将标记位设置为0declare continue handler for  not found set flag=0;-- 打开游标open my_cursor;-- 通过游标获得值label:loopfetch my_cursor into var_empno,var_ename,var_sal;if flag=1 thenselect var_empno,var_ename,var_sal;elseleave label;end if;end loop label;-- 关闭游标close my_cursor;
end $$
delimiter ;call proc22('销售部');-- 用条件码
use test_procedure ;
-- 需求:输入一个部门名,查询该部门员工的编号、名字、薪资,将查询的结果集添加游标
delimiter $$
create procedure proc23(in in_name varchar(50))
begin-- 定义局部变量declare var_empno int;declare var_ename varchar(50);declare var_sal decimal(7,2);-- 定义标记值declare flag int default 1;-- 声明游标declare my_cursor cursor forselect empno ,ename ,sal  from emp e,dept d where d.dname =in_name ;-- 定义句柄,当数据未发现时将标记位设置为0declare continue handler for  1329 set flag=0;-- 打开游标open my_cursor;-- 通过游标获得值label:loopfetch my_cursor into var_empno,var_ename,var_sal;if flag=1 thenselect var_empno,var_ename,var_sal;elseleave label;end if;end loop label;-- 关闭游标close my_cursor;
end $$
delimiter ;call proc23('销售部');

两个的运行结果是一样的

 三.存储函数

格式

在MySQL中,创建存储函数使用create function关键字,其基本形式如下:

 参数说明

(1) func_name :存储函数的名称。
(2) param_name type:可选项,指定存储函数的参数。type参数用于指定存储函数的参数类型,该类型可以是MySQL数据库中所有支持的类型。
(3)returns type:指定返回值的类型。
(4)characteristic:可选项,指定存储函数的特性。
(5)routine_body: SQL代码内容。

演示

drop function if exists myfunc1_emp;
delimiter $$
create function myfunc1_emp() returns int
begindeclare cnt int default 0;select count(*) into cnt from emp;return cnt;
end $$
delimiter ;

运行结果可以会报错,像这样

 意思是说“此函数在其声明中没有确定性、无 SQL 或读取 SQL 数据,并且启用了二进制日志记录(您*可能*希望使用不太安全的 log_bin_trust_function_creators 变量)”

所以我们设置允许创建函数权限信任即可

-- 允许创建函数权限信任
set global log_bin_trust_function_creators=true ;

-- 允许创建函数权限信任
set global log_bin_trust_function_creators=true ;drop function if exists myfunc1_emp;
delimiter $$
create function myfunc1_emp() returns int
begindeclare cnt int default 0;select count(*) into cnt from emp;return cnt;
end $$
delimiter ;-- 调用存储函数
select myfunc1_emp();

 这样就可以了

四.存储过程总结

 

 

 

 

 

 

 

 

相关文章:

SQL中的游标、异常处理、存储函数及总结

目录 一.游标 格式 操作 演示 二.异常处理—handler句柄 格式 演示 三.存储函数 格式 参数说明 演示 四.存储过程总结 一.游标 游标(cursor)是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、OPEN、…...

Splashtop:支持M1/M2芯片 Mac 电脑的远程控制软件

M1和M1芯片的Mac电脑现在越来越多了。M1和M2的强大性能,让使用者们办公、娱乐如虎添翼。 M1 芯片于2020年11月11日推出,是Apple 首款专为Mac打造的芯片,拥有格外出色的性能、众多的功能,以及令人惊叹的能效表现。M1 也是Apple 首款…...

实验十三、阻容耦合共射放大电路的频率响应

一、题目 利用 Multism 从以下几个方面研究图1所示的阻容耦合共射放大电路的频率响应。图1阻容耦合共射放大电路图1\,\,阻容耦合共射放大电路图1阻容耦合共射放大电路(1)设 C1C210μFC_1C_210\,\textrm{μF}C1​C2​10μF,分别测试它们所确定…...

【每天进步一点点】函数表达式和函数声明

函数声明 function 函数名(){} 函数声明会被率先读取。 函数声明后不会立即执行,会在我们需要的时候调用到。 由于函数声明不是一个可执行语句,所以不以分号结束。 函数表达式 表达式赋值给了一个变量 const 变量名 functi…...

JavaScript void

文章目录JavaScript voidjavascript:void(0) 含义href"#"与href"javascript:void(0)"的区别JavaScript void javascript:void(0) 含义 我们经常会使用到 javascript:void(0) 这样的代码,那么在 JavaScript 中 javascript:void(0) 代表的是什么…...

笔记本电脑怎么连接无线网wifi?不同电脑系统的使用教程(2023最新)

现在越多人使用笔记本电脑,在我们的日常生活和工作中是很难离开它的。想要更快速地上网,我们都会选择连接无线网的wifi。有时笔记本电脑无法连接网络,你知道这是什么原因吗?笔记本电脑怎么连接无线网wifi?方法很简单&a…...

从lettcue插件看skywalking

lettcue 的写操作是异步的。io.lettuce.core.RedisChannelWriter.write进行写入,io.lettuce.core.protocol.RedisCommand进行异步读取数据 skywalking 插件大体逻辑 在方法执行前,通过ContextManager创建span创建span的同时,判断trace上下文…...

explain 每个列的含义

官网传送门:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html 实例表 DROP TABLE IF EXISTS actor;CREATE TABLE actor (id int(11) NOT NULL,name varchar(45) DEFAULT NULL,update_time datetime DEFAULT NULL,PRIMARY KEY (id)) ENGINEInnoDB DEFA…...

网络通信编程基础

1.IP地址 概念 IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。 就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。 格式 IP地址…...

Linux网络编程

一、网络结构模式 1、C/S 结构 1)、简介 服务器 - 客户机,即 Client - Server(C/S)结构。C/S 结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。客户机是因特网上访问别人信息的机器&a…...

***httpGet,httpPost,postman_http,httpClientSocket,httpSocketServer***

1:状态码_http 2:java访问(http):国家气象局 免费接口 3:httpClientSocket ~~~ httpSocketServer 4:httpGet ~ httpPost 1:状态码_http http请求的响应码一般分为五类 1xx 2xx 3xx 4xx 5xx 1xx 临时性的消息 101:当客户端问服务端支不支持http2.0的时候,如果支持服…...

Downie4.6.7

Downie是Mac下一个简单的下载管理器,可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们,文章末尾附下载地址。主要特点支持许多网站目前支持超过1,000个不同的网站(包括YouTube,Vim…...

重构是什么

重构 重构的主要目的是解决技术债务问题。它将混乱的代码转化为清晰的代码和简单的设计。 不错!但是“清晰的代码”具体是什么呢?以下是它的一些特征: 清晰的代码对其他程序员来说应该是一目了然的。 我不是在谈论超级复杂的算法。糟糕的…...

(考研湖科大教书匠计算机网络)第四章网络层-第六节1:路由选择协议概述

获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:路由选择概述二:因特网采用的路由选择协议(1)特点(2)常见的路由选择协议三:…...

vue2源码之生命周期篇

vue2源码之生命周期篇vue2源码之生命周期篇生命周期流程图初始化阶段(new Vue)vue2源码之生命周期篇 生命周期流程图 从图中可以看到,Vue实例的生命周期大致可分为4个阶段: 初始化阶段:为Vue实例上初始化一些属性&am…...

从零实现WebRTC(三):WebRTC中重要的API

文章目录一、createOffer二、createAnswer三、SetLocalDescription四、SetRemoteDescription五、addTrack六、addCandidate七、RTCPeerConnection重要事件一、createOffer aPromise myPeerConnection.createOffer(option) opeion { Audio True, Video True, iceReStart:f…...

shell脚本的编写以及shell中语句(嵌入式学习)

shell学习shell脚本编写步骤shell变量功能性语句1.read2.expr3.let4.test逻辑运算符的书写格式结构性语句1.if…then…fi2、case...esac3、for..do..done4、while..do..doneshell脚本 将shell命令按照一定的逻辑顺序实现指定功能,放到一个文件中。文件叫脚本文件&a…...

2023年高新技术企业怎么申报认定

成为高新技术企业可以获得国家和本地区的众多优惠政策,相信很多企业都想申请高企认定,国家高新技术企业又称国家高新技术企业,根据《高新技术企业认定管理办法》规定,国家高新技术企业是指在《国家重点支持的高新技术领域》内&…...

GIS状态检测新技术——振动分析法

提示:唐老师好,我之前因为“阳”了,所以就没有参与汇报,给老师带来不便,请老师见谅。以此篇文章代替课堂汇报。 文章目录前言一、不同故障对应的振动频谱和故障特征量二、GIS设备振动特征估计1.GIS设备状态空间2.粒子滤…...

Python进阶篇(一)-- Django快速上手

1 Django概述 Web框架,就是用于开发Web服务器端应用的基础设施,说得通俗一点就是一系列封装好的模块和工具。事实上,即便没有Web框架,我们仍然可以通过socket或CGI来开发Web服务器端应用,但是这样做的成本和代价在商业…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...