存储过程的语法讲解

article/2025/9/16 23:49:10

在上一篇文章:别再说不知道什么是存储过程和存储函数了
中简单的介绍了存储过程和存储函数以及其使用。其实存储过程是可以进行编程的,所以可以和其他的编程语言一样使用变量、表达式以及控制结构进行编程,从而实现一些复杂和有用的功能。这篇文章就来介绍一下存储过程的一些语法,并通过一些实例来讲解如何使用。

一、声明变量

在存储过程中可以通过Declare来定义一个局部变量,但是该变量的作用范围只是在Begin—End块中,比如:

create procedure p1()
begindeclare a int default 5;select concat('a的值=',a);
end$

在这里插入图片描述

二、变量赋值

对于声明的变量可以通过使用set来进行赋值,比如:

create procedure p2()
begindeclare name varchar(20);set name='Jifengjianhao';select name;
end$

在这里插入图片描述
另外除了通过set来进行赋值以外,还可以通过select into 来进行赋值操作,select into就是讲一张表查询的结果赋值给声明的变量。在上篇文章创建了一张Employee表,具体创建可以阅读上篇文章,这里以该Employee来说明如何使用select into 进行赋值操作:

create procedure p4()
begin declare name varchar(20);select lastname into name from employee where email='123@qq.com';select name;
end$

这里因为存储过程中的内容为latin1字符集,而latin1字符集为8bit,这说明它是不能表示中文的,所以会报改错,这里讲对应的中文名称改为了英文:
在这里插入图片描述
在这里插入图片描述

三、参数传递

在声明一个存储过程的时候可以进行传参,传递的参数类型可以有:

in:即传入参数,也是默认类型;

out:该参数为输出参数,即是返回值;

inout:既可以作为传入参数,也可以作为输出参数

比如:


输入一个值,输出结果判断其是否大于10
create procedure p6(in number int,out result varchar(100))
beginif number>10 thenset result='number>10';elseif number=10 thenset result='number=10';elseset result='number<10';end if;
end$

在这里插入图片描述

四、条件判断

条件判断就类似于其他的编程语言里面的if else进行条件判断,根据不同的条件执行不同的分支,其语法结构为:

if condition then statement
elseif condition then statement
......
else statement
end if;

主要这里的elseif 是一个单词,不是else if。其具体的实例可以参考上面的参数传递。

在上述的例子中,result变量前面加上了@。这时候就是result相当于用户会话变量,表示整个会话过程都是有作用的,类似于其他编程语言中的全局变量。另外还可以在变量前面加上@@符号,这时候就是什么变量为系统变量。

除了if elseif 可以进行条件判断,还可以通过case结构进行条件判断,语法结构为:

case 
when whenvalue then statement
.....
else staement
end case;

比如:

通过输入月份,判断属于第几季度
create procedure p7(month int)
begindeclare result varchar(10);case when month>=1 and month<=3 thenset result='第一季度';when month>=4 and month<=6 thenset result='第二季度';when month>=7 and month<=9 thenset result='第三季度';else set result='第四季度';end case;select result;
end$

五、循环结构

1、while循环也是存储过程中的一种循环结构,其语法结构为:

while confition do
statement
end while;

比如:

计算从1加到10的结果:

create procedure p8(n int)
begin
declare result int default 0;
declare start int default 0;while start <= 10 do
set result = result+start;
set start = start+1;
end while;
select n;
end$

2、repeat 是另外一种循环控制语句,它与while不同的是:while是满足条件则执行,repeat则是满足条件则退出执行,其语法结构为;

repeatstatement.......until conditionend repeat;

还是上面的计算1加到10的例子,用repeat循环结构来写就是:

create procedure p9(n int)
begin
declare result int default 0;
repeat 
set result = result+n;
set n=n-1;
until n=0;
end repeat;
select result;
end$

3、loop也是一种简单的循环体,退出的条件需要使其他的语句定义,通常可以通过使用leave语句实现,其具体的语法如下:

loop
statement,......
end loop

还是上面的例子:

create procedure p10(n int)
begin 
declare result int default 0;
s:loopset result = result+n;set n=n-1;退出条件if n<=0 then leave s;end if;
end loop s;select resule;end$

六、游标

游标是用来存储查询结果集的数据类型,在存储过程和存储函数中可以使用光标对结果集进行循环的处理。光标的使用包括光标的声明,open、fetch、close:

声明:
declare cursor_name cursor for select_statement;open:
open cursor_name;fetch:
fetch cursor_name into var_name,....close:
close cursor_name;

实例:

create procedure p11()
begin declare id int(10);declare name varchar(50);declare has_data int default 1;declare result cursor for select id,lastname from employee;declare exit handler for not found set has_data=0;open result;repeatfetch result into id,name;select id,name;until has_data = 0end repeat;close result;
end$

在这里插入图片描述
以上就是存储过程中的基本语法。将以上的语法进行结合可以写出复杂的和不同功能的存储过程,从而实现不同的需求开发。

本文原创首发于微信公众号:1024笔记,关注公众号可免费获取更多学习资源。


http://chatgpt.dhexx.cn/article/PevBEUtm.shtml

相关文章

子网掩码的作用

IP地址由网络和主机两部分标识组成 IP地址由“网络标识&#xff08;网络地址&#xff09;”和“主机标识&#xff08;主机地址&#xff09;”两部分组成。在局域网内相互间通信的网络必须具有相同网络地址&#xff0c;也叫相同的网段&#xff0c;在同一个网段内每个设备的主机…

子网掩码使用详解

一、子网掩码 IP地址是以网络号和主机号来标示网络上的主机的&#xff0c;我们把网络号相同的主机称之为本地网络&#xff0c;网络号不相同的主机称之为远程网络主机&#xff0c;本地网络中的主机可以直接相互通信&#xff1b;远程网络中的主机要相互通信必须通过本地网关&…

什么是子网掩码 子网掩码的作用是什么?

什么是子网掩码 子网掩码的作用是什么&#xff1f; 网络工作人员经常需要与ip和子网掩码等打交道&#xff0c;相信绝大数的朋友都知道IP的意思&#xff0c;但是还不理解子网掩码的意思&#xff0c;下面装机之家小编来为大家介绍下关于子网掩码的相关知识&#xff0c;希望能够对…

ip、子网掩码、网关、默认网关

这里写目录标题 ip网络地址主机地址 子网子网掩码子网掩码的表示方法为什么要使用子网掩码&#xff1f;子网掩码的分类 网关默认网关 ip ip地址 网络地址 主机地址&#xff08;又称&#xff1a;网络号和主机号&#xff09;&#xff0c;我们把网络号相同的主机称之为本地网络…

子网划分和子网掩码

目录 前言 1、IP地址 1.1 IP地址的内容 1.2 IP地址的分类 2、子网掩码的作用 2.1 主机间的通信 2.2 子网掩码 3.子网划分 3.1 子网划分的原因 3.2 子网划分的原理 3.3 IP地址汇总 总结 前言 知道IP地址的分类和基本使用&#xff0c;如果公司拥有300台计算机&#xf…

子网掩码详解

IP地址 IP地址被用来给Internet上的电脑一个编号。大家日常见到的情况是每台联网的PC上都需要有IP地址&#xff0c;才能正常通信。我们可以把“个人电脑”比作“一台电话”&#xff0c;那么“IP地址”就相当于“电话号码”&#xff0c;而Internet中的路由器&#xff0c;就相当于…

子网掩码的两种计算方式

&#xff08;尊重劳动成果&#xff0c;转载请注明出处&#xff1a;http://blog.csdn.net/qq_25827845/article/details/70946041冷血之心的博客&#xff09; 关注微信公众号&#xff08;文强的技术小屋&#xff09;&#xff0c;学习更多技术知识&#xff0c;一起遨游知识海洋~ …

子网掩码的划分和计算详解

一、子网掩码的计算 TCP/IP网间网技术产生于大型主流机环境中&#xff0c;它能发展到今天的规模是当初的设计者们始料未及的。网间网规模的迅速扩展对IP地址模式的威胁并不是它不能保证主机地址的唯一性&#xff0c;而是会带来两方面的负担&#xff1a;第一&#xff0c;巨大的…

一文带你了解什么是子网掩码

什么是子网掩码 子网掩码代表了“网络号子网号”与主机号之间的分割方案。 很晦涩&#xff1f; 说子网掩码&#xff0c;我们还得先说说IP地址。 什么是IP地址 因特网上的每台主机或路由器端口都必须有一个唯一的IP地址。因为IP地址&#xff0c;在网络上我们才能互相识别&a…

制作QQ登录界面(UI版)

工具&#xff1a;Android Studio activity_main.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http:…

html登录界面

今天是2019年11月14日我第一次注册博客&#xff0c;我把我做的一个登陆界面分享给大家看希望各位大佬指教。 首先是html文件。 1.登录界面html 登录界面 用户名: 密 码: 注册 2.注册界面html。 注册界面 用户名: 输入密码: 确认密码: 立刻注册返回登录 **3.效果图**! 欢迎…

Android仿QQ微信开场导航以及登陆界面

相信大家对于微信等社交应用的UI界面已经都很熟悉了&#xff0c;该UI最值得借鉴的莫过于第一次使用的时候一些列产品介绍的图片&#xff0c;可以左右滑动浏览&#xff0c;最后进入应用&#xff0c;这一效果适用于多种项目中&#xff0c;相信今后开发应用一定会用得到。网路上也…

[练习]QQ登陆界面-测试用例的编写

&#xff08;Test Case&#xff09;是为了实施测试而向被测试系统提供的一组集合&#xff0c; 包括&#xff1a;测试环境、操作步骤、测试数据、预期结果等要素。 一条测试用例最终只有一个结果。 一个功能点至少有一个测试用例。 测试用例数/功能点数 测试的覆盖率&#xf…

web之qq邮箱登录界面

我们可以用css来做这个登录的表格 具体的完整代码实现如下&#xff1a; <!DOCTYPE html> <html> <meta charset"utf-8"> <title>登录qq邮箱</title> <style type"text/css">* {padding: 0;margin: 0;}.content {wid…

转载:QQ登录界面

//:登陆界面代码&#xff1a; package Myjava_QQ; import java.awt.*; import javax.swing.*; import Myjava_QQ.truess; import java.awt.event.*; import java.applet.*; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; …

模拟QQ登录页面

设计布局 代码体现 <html><head><title>模拟QQ登陆页面.html</title><meta http-equiv"content-type" content"text/html; charsetUTF-8"><style type"text/css">/*上大边框区域*/#main1{/*边框宽度*/wi…

【HTML+CSS+JS】模仿QQ登录界面

目录 前言简介布局思路相关代码颜色渐变动画头像表单区域JS相关 总结 前言 学了HTML、CSS和JS有了一个月了&#xff0c;JS还未学完&#xff0c;偷懒写一个小项目&#xff0c;用了一个下午&#xff0c;顺便巩固一下所学知识。&#xff08;内容比较简陋&#xff0c;适合新手&…

QQ登录界面(Java)

hi~好久不见吖&#xff0c;我又回来啦&#xff0c;dengdengdeng&#xff08;他来了&#xff0c;他来了&#xff0c;他带着他新学的知识来啦&#xff09; 咳咳&#xff0c;只是一个简单的界面&#xff0c;啥也不能干 这段时间我学习了窗体的创建&#xff0c;听老师讲了一会怎么…

Android 高仿QQ 登陆界面

先上图&#xff1a; 下面是布局&#xff1a; <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:background"drawable/login_…

java实现qq页面登陆界面

先看效果 1.建立包com.QQUI0819 2.在包下建立类 LoginAction package com.QQUI0819;import javax.swing.*; import java.awt.event.*; //首先&#xff0c;编写按钮癿监听器实现类 public class LoginAction implementsActionListener {private int count0;//当前为null,创建后…