首页 > 其他分享 >15 存储过程

15 存储过程

时间:2024-07-18 17:51:22浏览次数:14  
标签:存储 set 15 变量 -- int 过程

概念

存储过程:是在大型数据库系统中,一组为了完成特定功能的sql语句集,存储在数据库中,经过第一次编译后再次调用不需要重复编译,用户通过指定存储过程的名字并给出参数(如果存储过程有参数)来执行。

存储过程基本上可以完成大部分的函数可以处理的功能

与函数的异同

相同点

存储过程和函数都是为了重复地执行操作数据库sql语句的集合
存储过程和函数都是一次编译,后续执行

不同点

  • 标识符不同:函数标识符是function,存储过程是procedure

  • 函数中有返回值,而且必须返回,存储过程没有返回值

  • 存储过程没返回值,不能将结果直接赋值给变量;函数是有返回值的,调用时,除了在select中,必须将返回值赋值给变量

  • 函数可以在select语句中直接使用,存储过程不可以

创建过程

-- 创建存储过程
delimiter $$
create procedure 过程名称(参数列表)
begin
   过程体
end
$$
delimiter ;

-- 如果过程体中,只有一条指令,可以省略begin和end
create procedure 过程名称(形参)
过程体

查看过程

方式一:通过查看过程状态,查看素所有存储过程

show procedure status [like '匹配模式']

方式二:通过 过程创建语句

show create procedure 过程名;

调用过程-call

call 存储过程的名(实参列表);

删除过程

drop procedure 存储过程名;

存储过程的形参类型

存储过程的形参类型主要分为3类:

in-值传递

表示参数从外面传入到过程内部使用,可以是直接的结果数据,也可以是保存数据的变量

out-引用传递

表示参数从过程里面把数据保存到变量中,供给外部使用
如果传入的out变量本身在外部有数据,那么在进入过程后就会被清空,设置为null
out变量必须是外部定义的变量

inout-引用传递

数据可以从外部传入到过程内部使用,同时内部操作后,也可以将数据返还给外部

过程类型 变量名 数据类型

-- -------------------------- 存储过程形参
set @n1=1;
set @n2=1;
set @n3=1;

CREATE PROCEDURE my_pro(in int_1 int,out int_2 int,INOUT int_3 int)
BEGIN
  -- 查看传入的变量的值
  SELECT int_1,int_2,int_3;  -- 输出 1 null 1
  -- 当out或inout类型的变量传入后,此时并没有改变外部变量的值,而是把值传递给了形参变量
  -- 但是形参会将out类型的值清空为null

  -- 修改三个变量的值
  set int_1=10;   
  set int_2=100;   
  set int_3=1000;   
  
  -- 查看会话变量的值
  SELECT int_1,int_2,int_3;  -- 输出 10 100 100

  -- 修改会话变量的值
  set @n1='a1';
  set @n2='a2';
  set @n3='a3';

   -- 查看会话变量的值
  SELECT @n1,@n2,@n3;  -- 输出 a1 a2 a3
  -- 走到end表示过程结束:
  -- 开始工作,判断传递过来的变量是否是out类型或inout类型
  -- 如果是,将内部代替out和inout变量的对应形参的值重新赋值给外部变量(就是会覆盖外部变量本身的值)
END

-- 重置
set @n1=1;
set @n2=1;
set @n3=1;
SELECT @n1,@n2,@n3; -- 输出 1 1 1

CALL my_pro(@n1,@n2,@n3);
SELECT @n1,@n2,@n3; -- 输出a1 100 1000

标签:存储,set,15,变量,--,int,过程
From: https://www.cnblogs.com/songxia/p/18309417

相关文章

  • 代码随想录算法训练营第 15 天 |LeetCode110平衡二叉树 LeetCode257二叉树的所有路径
    代码随想录算法训练营Day15代码随想录算法训练营第15天|LeetCode110平衡二叉树LeetCode257二叉树的所有路径LeetCode404左叶子之和LeetCode222完全二叉树节点之和目录代码随想录算法训练营前言LeetCode110平衡二叉树LeetCode257二叉树的所有路径LeetCode404左......
  • 全球1-15级(12,5米)高程terrain和pak切片数据
       Terrain切片是一种分级存储的地形数据,用于地理信息系统(GIS)、虚拟地球、灾害模拟与管理以及环境保护与规划。PAK切片则是一种特定格式的瓦片数据,广泛应用于游戏开发、虚拟现实(VR)和增强现实(AR),以及工程和建筑领域。   本数据集基于全球12.5米DEM数据(http://www.gis......
  • FlowUs的愿景远不止于简单的信息存储和阅读,而是致力于构建一个平台,让用户可以自由创作
    FlowUs在2024年以全新的姿态和强大的功能,为个人和团队带来了更高效、便捷和创新的工作体验。作为一款综合性的工作平台,FlowUs融合了笔记、项目管理、文档协作等多种功能,旨在满足用户在不同场景下的需求,成为提升工作效率和创造力的得力助手。......
  • buuctf-web 解题过程
    [SUCTF2019]UploadLabs2源码//admin.php<?phpinclude'config.php';classAd{public$cmd;public$clazz;public$func1;public$func2;public$func3;public$instance;public$arg1;public$arg2;publ......
  • ctfshow web入门 xss web327--web333 存储型和七七八八的
    存储型漏洞web327这道题貌似和反射型的xss差不多,直接打就行web328body和svg的好像不行<script>window.open('http://ceye地址/'+document.cookie)</script><script>window.open('http://hrcgnc.ceye.io/'+document.cookie)</script>先注册,密码多于6位很明显在这......
  • 【Qt】探索Qt框架:开发经典贪吃蛇游戏的全过程与实践
    文章目录引言项目链接:1.Qt框架的使用简介2.贪吃蛇游戏设计2.1游戏规则和玩法介绍2.2游戏界面设计概述3.核心代码解析3.1主界面(GameHall)3.1.1布局和功能介绍3.1.2代码实现分析3.2游戏选择界面(GameSelect)3.2.1功能介绍3.2.2代码实现分析3.3游戏房间(GameRoom......
  • 内存、存储中(计算机、MCU)的引导流程、存储器
    内存、存储中(计算机、MCU)的引导流程、存储器一、内存栈区(stack):存放非静态局部变量堆区(heap):存放malloc()、calloc()、realloc()、free()等函数动态分配的数据 ——malloc()-C语言标准库中的函数全局静态区:存放静态局部变量、全局变量代码区:存放程序代码栈......
  • Java中如何将一个 List 类型的参数传入存储过程(Oracle数据库)
    Java中如何将一个List类型的参数传入存储过程(Oracle数据库)步骤简述存储过程TYPE模型映射对象JAVA代码链接转换可能出现的错误步骤简述定义好存储过程,Java中的数组对象建立数据库映射对象来映射List类型的数据Java中调用存储过程传入List类型的参数存储过......
  • 在Linux中,tcp三次握⼿的过程及原理?
    在Linux中,TCP(传输控制协议)的三次握手是建立可靠连接的重要过程。这一机制确保了客户端和服务器之间能够安全、有序地交换数据。下面将详细阐述TCP三次握手的过程及原理:一、TCP三次握手的过程TCP三次握手过程涉及客户端(通常称为“主动打开方”)和服务器(通常称为“被动打开方”)之间......
  • 如何备份服务器上的重要数据到外部存储设备呢
    备份服务器上的重要数据到外部存储设备是确保数据安全的重要步骤。以下是详细的备份步骤和注意事项:一、选择合适的外部存储设备类型选择:U盘:适用于小量数据的备份,因其便携性和价格优势。但需注意其容量限制,可能不适用于大规模数据备份。移动硬盘:适用于中等至大规模数据的备份。......