存储过程基本了解
文章目录
- 介绍
- 存储过程示例
- 1. 目的
- 2. 输入参数
- 3. 输出参数
- 4. 执行逻辑
- 5. 返回值
- 6. 示例用法
- 7. 注意事项
- 存储过程的关键字有哪些
- 简单实操
介绍
存储过程是一组预编译的SQL语句,以及流程控制语句,封装在数据库服务器中并可以被重复调用。它们可以接收参数、执行逻辑和返回结果。存储过程通常用于实现复杂的业务逻辑和数据操作,提供了以下几个主要优势:
- 代码重用和模块化: 存储过程可以将复杂的业务逻辑封装成一个可重复调用的单元。这样可以提高代码的重用性和维护性,避免了重复编写相同的代码逻辑。
- 性能优化: 存储过程在数据库服务器上进行预编译,并可被缓存,从而提供更高的性能。通过减少网络开销和减少解析时间,存储过程可以显著提升查询和事务处理的性能。
- 安全性和权限控制: 存储过程可以通过授权机制实现对数据库对象的访问控制。数据库管理员可以授予或撤销用户对存储过程的执行权限,从而保护敏感数据和确保数据的安全性。
- 减少数据传输量: 存储过程可以在数据库服务器上执行大量的数据处理和计算,只将结果返回给客户端,减少了数据传输的量,提高了网络传输效率。
- 事务处理和数据一致性: 存储过程可以包含多个SQL语句,并可以在一个事务中执行。这样可以确保逻辑上相关的操作要么全部成功要么全部失败,从而保持数据的一致性。
- 简化客户端代码: 存储过程可以将复杂的业务逻辑移至数据库服务器端,减少了客户端的代码量,使客户端更加简洁和易于维护。
存储过程示例
1. 目的
获取特定客户的信息,包括客户姓名、电话号码和地址。
2. 输入参数
- @CustomerID (INT):客户ID,用于指定要查询的客户。
3. 输出参数
- @CustomerName (VARCHAR):客户姓名。
- @PhoneNumber (VARCHAR):客户电话号码。
- @Address (VARCHAR):客户地址。
4. 执行逻辑
CREATE PROCEDURE GetCustomerInfo@CustomerID INT
AS
BEGINSELECT CustomerName, PhoneNumber, AddressFROM CustomersWHERE CustomerID = @CustomerID;
END;
5. 返回值
无
6. 示例用法
EXEC GetCustomerInfo @CustomerID = 123;
7. 注意事项
- 调用该存储过程时,需传入有效的客户ID。
- 请注意存储过程中涉及到的表和字段名称,确保与实际数据库结构匹配。
下面是一个示例的复杂存储过程代码,该存储过程用于计算订单总金额并更新订单状态:
CREATE PROCEDURE CalculateOrderTotalAndSetStatus@OrderID INT
AS
BEGINDECLARE @TotalAmount DECIMAL(10, 2);DECLARE @ItemCount INT;DECLARE @OrderStatus VARCHAR(20);-- 计算订单总金额SELECT @TotalAmount = SUM(UnitPrice * Quantity)FROM OrderDetailsWHERE OrderID = @OrderID;-- 获取订单中商品数量SELECT @ItemCount = COUNT(*)FROM OrderDetailsWHERE OrderID = @OrderID;-- 根据订单总金额和商品数量设置订单状态IF @TotalAmount > 1000SET @OrderStatus = 'High Value';ELSESET @OrderStatus = 'Normal';-- 更新订单信息表中的订单状态和总金额UPDATE OrdersSET TotalAmount = @TotalAmount,ItemCount = @ItemCount,Status = @OrderStatusWHERE OrderID = @OrderID;PRINT 'Order total amount calculated and status updated successfully.';
END;
在上面的示例中,存储过程CalculateOrderTotalAndSetStatus接收一个订单ID作为输入参数,然后执行以下操作:
- 计算订单的总金额;
- 获取订单中商品的数量;
- 根据总金额设置订单状态为“High Value”或“Normal”;
- 更新订单信息表中的总金额、商品数量和状态。
存储过程的关键字有哪些
- CREATE PROCEDURE:用于创建存储过程。
- ALTER PROCEDURE:用于修改现有存储过程的定义。
- DROP PROCEDURE:用于删除存储过程。
- EXEC 或 EXECUTE:用于执行存储过程。
- WITH ENCRYPTION:用于加密存储过程的源代码,以保护存储过程的逻辑。
- WITH RECOMPILE:用于指示数据库引擎在每次执行存储过程时重新编译存储过程。
- AS:用于指定存储过程的主体部分。
- BEGIN 和 END:用于定义存储过程的代码块。
- DECLARE:用于声明变量或游标。
- SET:用于给变量赋值。
- SELECT:用于从表中检索数据。
- UPDATE、INSERT、DELETE:用于更新、插入和删除数据。
- IF、ELSEIF、ELSE:用于条件控制。
- WHILE、BEGIN…END WHILE:用于循环控制。
- RETURN:用于从存储过程中返回值。
- OUTPUT:用于输出参数。
- INOUT:用于输入输出参数。
简单实操
在存储过程中可以包含多个select语句,显示姓名中含有”张“字职工信息及其所在的仓库信息,
create procedure pro_sql5
as
beginselect * from 职工 where 姓名 like '%张%'select * from 仓库 where 仓库号 in(select 仓库号 from 职工 where 姓名 like '%张%')
endgo
execute pro_sql5
带有输入参数的存储过程 找出三个数字中的最大数:
create proc proc_sql6
@num1 int,
@num2 int,
@num3 int
as
begindeclare @max intif @num1>@num2set @max = @num1else set @max = @num2if @num3 > @maxset @max = @num3print '3个数中最大的数字是:' + cast(@max as varchar(20))
end
求阶乘之和 如6! + 5! + 4! + 3! + 2! + 1
execute proc_sql7 6
带有输入参数的数据查询功能的存储过程
create proc proc_sql8@mingz int,@maxgz int
as
beginselect * from 职工 where 工资>@mingz and 工资<@maxgz
end
带输入和输出参数的存储过程:显示指定仓库号的职工信息和该仓库号的最大工资和最小工资
create proc proc_sql9@cangkuhao varchar(50),@maxgz int output,@mingz int output
as
beginselect * from 职工 where 仓库号=@cangkuhaoselect @maxgz=MAX(工资) from 职工 where 仓库号=@cangkuhaoselect @mingz=MIN(工资) from 职工 where 仓库号=@cangkuhao
end
带有登录判断功能的存储过程
create proc proc_sql10 @hyuer varchar(50), @hypwd varchar(50)
as
begin if @hyuer = 'hystu1' begin if @hypwd = '1111' print '用户名和密码输入正确' else print '密码输入错误' end else if @hyuer = 'hystu2' begin if @hypwd = '2222' print '用户名和密码输入正确' else print '密码输入错误' end else if @hyuer = 'hystu3' begin if @hypwd = '3333' print '用户名和密码输入正确' else print '密码输入错误' end else print '您输入的用户名不正确,请重新输入'
end
带有判断条件的插入功能的存储过程
reate proc proc_sq111 @zghao varchar(30), @ckhao varchar(30), @sname varchar(50), @sex varchar(10), @gz int
as
begin if Exists(select * from 职工 where 职工号=@zghao) print '该职工已经存在,请重新输入' else begin if Exists(select * from 仓库 where 仓库号=@ckhao) begin insert into 职工(职工号, 仓库号, 姓名, 性别, 工资) values(@zghao, @ckhao, @sname, @sex, @gz) end else print '您输入的仓库号不存在,请重新输入' end
end

各位看官》创作不易,点个赞!!!
诸君共勉:万事开头难,只愿肯放弃。
免责声明:本文章仅用于学习参考
相关文章:
存储过程基本了解
文章目录 介绍存储过程示例1. 目的2. 输入参数3. 输出参数4. 执行逻辑5. 返回值6. 示例用法7. 注意事项 存储过程的关键字有哪些简单实操 介绍 存储过程是一组预编译的SQL语句,以及流程控制语句,封装在数据库服务器中并可以被重复调用。它们可以接收参数…...
『大模型笔记』RAG应用的12种调优策略指南
RAG应用的12种调优策略指南 文章目录 一. 概要二. 数据索引2.1. 数据清洗2.2. 分块2.3. 嵌入模型2.4. 元数据(或未向量化的数据)2.5. 多索引2.6. 索引算法三. 推理阶段(检索和生成)3.1. 检索参数3.2. 高级检索策略3.3. 重新排序模型3.5. 大语言模型(LLM)...
leedcode刷题--day7(字符串)
23 文章讲解 力扣地址 C class Solution { public:void reverseString(vector<char>& s) {int left 0;int right s.size() - 1; // right 应该初始化为 s.size() - 1while (left < right) {swap(s[left], s[right]); // 直接交换 s[left] 和 s[right] 的值lef…...
【蓝桥杯省赛真题31】python连续正整数之和 中小学青少年组蓝桥杯比赛python编程省赛真题解析
目录 python连续正整数之和 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python连续正整数之和 第十二届蓝桥杯青少年组python比赛省赛真题 …...
【116个】网络安全测试相关面试真题
1、Burpsuite常用的功能是什么? 2、reverse_tcp和bind_tcp的区别? 3、拿到一个待检测的站或给你一个网站,你觉得应该先做什么? 4、你在渗透测试过程中是如何敏感信息收集的? 5、你平时去哪些网站进行学习、挖漏洞提…...
微服务day02-Ribbon负载均衡与Nacos安装与入门
一.Ribbon负载均衡 在上一节中,我们通过在RestTemplte实例中加上了注解 LoadBalanced,表示将来由RestTemplate发起的请求会被Ribbon拦截和处理,实现了访问服务时的负载均衡,那么他是如何实现的呢? 1.1 Ribbon负载均衡的原理 Rib…...
深度学习-神经网络原理
文章目录 神经网络原理1.单层神经网络1.1 回归单层神经网络:线性回归1.2 二分类单层神经网络:sigmoid与阶跃函数 1.3 多分类单层神经网络:softmax回归 神经网络原理 人工神经网络(Artificial Neural Network,ANN&…...
Chat GPT:智能对话的下一步
Chat GPT:智能对话的下一步 介绍 Chat GPT(Generative Pre-trained Transformer)是一种基于Transformer架构的强大对话模型,可以产生自然流畅的回答,并实现人机对话的感觉。本文将探讨Chat GPT在智能对话领域的影响和…...
[数据集][目标检测]鸡蛋破蛋数据集VOC+YOLO格式792张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):792 标注数量(xml文件个数):792 标注数量(txt文件个数):792 标注类别…...
RabbitMQ实战学习
RabbitMQ实战学习 文章目录 RabbitMQ实战学习RabbitMQ常用资料1、安装教程2、使用安装包3、常用命令4、验证访问5、代码示例 一、RabbitMQ基本概念1.1. MQ概述1.2 MQ 的优势和劣势1.3 MQ 的优势1. 应用解耦2. 异步提速3. 削峰填谷 1.4 MQ 的劣势1.5 RabbitMQ 基础架构1.6 JMS 二…...
插混、油混、增程式、轻混、强混,啥区别
这里写自定义目录标题 随着我国新能源汽车的大力推进,电车可以说是世界未来的主流,只不过现在是处在一个过渡时代 这是个好时代,因为我们见证并体验着历史过渡的细节 这是个不好的时代,因为我们可能只是未来新新人类的试验品 帮他…...
React 模态框的设计(八)优化补充
在之前的弹窗的设计中,有两处地方现在做一点小小的优化,就是把_Draggable.jsx中的 onPointerEnter 事件 用 useLayoutEffect来规换,效果更佳,同样的,在_ModelContainer.jsx中也是一样。如下所示: _Draggabl…...
知识积累(三):深度学习相关概念(查看检索时看到)
文章目录 1. 知识蒸馏2. 可微搜索索引(DSI)参考资料 在找论文时,发现的相关概念。 1. 知识蒸馏 知识蒸馏(knowledge distillation)是模型压缩的一种常用的方法,不同于模型压缩中的剪枝和量化,知…...
计算机专业必看的几部电影
目录 编辑 1. 《第九区》(District 9,2009) 2. 《谍影重重》(The Bourne Identity,2002) 3. 《源代码》(Source Code,2011) 4. 《她》(Her,…...
工业人工智能需要注意的10件事
我们无法逃避人工智能这个风口,宣传人工智能软件的广告铺天盖地,似乎每个供应商都在推出最新的工具包,每天都有关于 ChatGPT、Bard 等新用例的文章。似乎全世界都在说:你现在需要人工智能! 人工智能确实正在成为自动化…...
软考-系统集成项目管理中级-信息系统建设与设计
本章重点考点 1.信息系统的生命周期 信息系统建设的内容主要包括设备采购、系统集成、软件开发和运维服务等。信息系统的生命周期可以分为四个阶段:立项、开发、运维和消亡。 2.信息系统开发方法 信息系统常用的开发方法有结构化方法、原型法、面向对象方法等 1)结构化方法 …...
C++从零开始的打怪升级之路(day39)
这是关于一个普通双非本科大一学生的C的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天分享的是关于模板的知识点 1.非类型模板参数 模板参数分为…...
Java面试题之并发
并发 1.并发编程的优缺点?2.并发编程三要素?3.什么叫指令重排?4.如何避免指令重排?5.并发?并行?串行?6.线程和进程的概念和区别?7.什么是上下文切换?8.守护线程和用户线程的定义?9.什么是线程死锁?10.形成死锁的四个条件?11.怎么避免死锁?12.创建线程的四种方式?…...
Python GUI自动化定位代码参考
一、pyautogui原始逻辑 import pyautogui # 获取指定图片在屏幕上的位置 image_path path/to/image.png target_position pyautogui.locateCenterOnScreen(image_path) if target_position is not None: # 获取偏移量 offset_x 10 offset_y 10 # 计算实际点…...
11.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏接收网络数据包的操作
内容参考于:易道云信息技术研究院VIP课 上一个内容:接管游戏发送数据的操作 码云地址(master 分支):https://gitee.com/dye_your_fingers/titan 码云版本号:8256eb53e8c16281bc1a29cb8d26d352bb5bbf4c 代…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
