存储过程基本了解

文章目录

  • 介绍
  • 存储过程示例
    • 1. 目的
    • 2. 输入参数
    • 3. 输出参数
    • 4. 执行逻辑
    • 5. 返回值
    • 6. 示例用法
    • 7. 注意事项
  • 存储过程的关键字有哪些
  • 简单实操

介绍

存储过程是一组预编译的SQL语句,以及流程控制语句,封装在数据库服务器中并可以被重复调用。它们可以接收参数、执行逻辑和返回结果。存储过程通常用于实现复杂的业务逻辑和数据操作,提供了以下几个主要优势:

  1. 代码重用和模块化: 存储过程可以将复杂的业务逻辑封装成一个可重复调用的单元。这样可以提高代码的重用性和维护性,避免了重复编写相同的代码逻辑。
  2. 性能优化: 存储过程在数据库服务器上进行预编译,并可被缓存,从而提供更高的性能。通过减少网络开销和减少解析时间,存储过程可以显著提升查询和事务处理的性能。
  3. 安全性和权限控制: 存储过程可以通过授权机制实现对数据库对象的访问控制。数据库管理员可以授予或撤销用户对存储过程的执行权限,从而保护敏感数据和确保数据的安全性。
  4. 减少数据传输量: 存储过程可以在数据库服务器上执行大量的数据处理和计算,只将结果返回给客户端,减少了数据传输的量,提高了网络传输效率。
  5. 事务处理和数据一致性: 存储过程可以包含多个SQL语句,并可以在一个事务中执行。这样可以确保逻辑上相关的操作要么全部成功要么全部失败,从而保持数据的一致性。
  6. 简化客户端代码: 存储过程可以将复杂的业务逻辑移至数据库服务器端,减少了客户端的代码量,使客户端更加简洁和易于维护。

存储过程示例

1. 目的

获取特定客户的信息,包括客户姓名、电话号码和地址。

2. 输入参数

  • @CustomerID (INT):客户ID,用于指定要查询的客户。

3. 输出参数

  • @CustomerName (VARCHAR):客户姓名。
  • @PhoneNumber (VARCHAR):客户电话号码。
  • @Address (VARCHAR):客户地址。

4. 执行逻辑

CREATE PROCEDURE GetCustomerInfo
    @CustomerID INT
AS
BEGIN
    SELECT 
        CustomerName, 
        PhoneNumber, 
        Address
    FROM Customers
    WHERE CustomerID = @CustomerID;
END;

5. 返回值

6. 示例用法

EXEC GetCustomerInfo @CustomerID = 123;

7. 注意事项

  • 调用该存储过程时,需传入有效的客户ID。
  • 请注意存储过程中涉及到的表和字段名称,确保与实际数据库结构匹配。

下面是一个示例的复杂存储过程代码,该存储过程用于计算订单总金额并更新订单状态:

CREATE PROCEDURE CalculateOrderTotalAndSetStatus
    @OrderID INT
AS
BEGIN
    DECLARE @TotalAmount DECIMAL(10, 2);
    DECLARE @ItemCount INT;
    DECLARE @OrderStatus VARCHAR(20);

    -- 计算订单总金额
    SELECT @TotalAmount = SUM(UnitPrice * Quantity)
    FROM OrderDetails
    WHERE OrderID = @OrderID;

    -- 获取订单中商品数量
    SELECT @ItemCount = COUNT(*)
    FROM OrderDetails
    WHERE OrderID = @OrderID;

    -- 根据订单总金额和商品数量设置订单状态
    IF @TotalAmount > 1000
        SET @OrderStatus = 'High Value';
    ELSE
        SET @OrderStatus = 'Normal';

    -- 更新订单信息表中的订单状态和总金额
    UPDATE Orders
    SET TotalAmount = @TotalAmount,
        ItemCount = @ItemCount,
        Status = @OrderStatus
    WHERE OrderID = @OrderID;

    PRINT 'Order total amount calculated and status updated successfully.';
END;

在上面的示例中,存储过程CalculateOrderTotalAndSetStatus接收一个订单ID作为输入参数,然后执行以下操作:

  1. 计算订单的总金额;
  2. 获取订单中商品的数量;
  3. 根据总金额设置订单状态为“High Value”或“Normal”;
  4. 更新订单信息表中的总金额、商品数量和状态。

存储过程的关键字有哪些

  1. CREATE PROCEDURE:用于创建存储过程。
  2. ALTER PROCEDURE:用于修改现有存储过程的定义。
  3. DROP PROCEDURE:用于删除存储过程。
  4. EXECEXECUTE:用于执行存储过程。
  5. WITH ENCRYPTION:用于加密存储过程的源代码,以保护存储过程的逻辑。
  6. WITH RECOMPILE:用于指示数据库引擎在每次执行存储过程时重新编译存储过程。
  7. AS:用于指定存储过程的主体部分。
  8. BEGINEND:用于定义存储过程的代码块。
  9. DECLARE:用于声明变量或游标。
  10. SET:用于给变量赋值。
  11. SELECT:用于从表中检索数据。
  12. UPDATEINSERTDELETE:用于更新、插入和删除数据。
  13. IFELSEIFELSE:用于条件控制。
  14. WHILEBEGIN…END WHILE:用于循环控制。
  15. RETURN:用于从存储过程中返回值。
  16. OUTPUT:用于输出参数。
  17. INOUT:用于输入输出参数。

简单实操

在存储过程中可以包含多个select语句,显示姓名中含有”张“字职工信息及其所在的仓库信息,

create procedure pro_sql5
as
begin
   select * from 职工 where 姓名 like '%张%'
   select * from 仓库 where 仓库号 in(select 仓库号 from 职工 where 姓名 like '%张%')
end

go
execute pro_sql5

带有输入参数的存储过程 找出三个数字中的最大数:

create proc proc_sql6
@num1 int,
@num2 int,
@num3 int
as
begin
   declare @max int
   if @num1>@num2
      set @max = @num1
   else set @max = @num2

   if @num3 > @max
      set @max = @num3

   print '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
begin
   select * from 职工 where 工资>@mingz and 工资<@maxgz
end

带输入和输出参数的存储过程:显示指定仓库号的职工信息和该仓库号的最大工资和最小工资

create proc proc_sql9
  @cangkuhao varchar(50),
  @maxgz int output,
  @mingz int output
as
begin
  select * from 职工 where 仓库号=@cangkuhao
  select @maxgz=MAX(工资) from 职工 where 仓库号=@cangkuhao
  select @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  

点赞.jpg

各位看官》创作不易,点个赞!!!
诸君共勉:万事开头难,只愿肯放弃。

免责声明:本文章仅用于学习参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/420891.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅析扩散模型与图像生成【应用篇】(四)——Palette

4. Palette: Image-to-Image Diffusion Models 该文提出一种基于扩散模型的通用图像转换&#xff08;Image-to-Image Translation&#xff09;模型——Palette&#xff0c;可用于图像着色&#xff0c;图像修复&#xff0c;图像补全和JPEG图像恢复等多种转换任务。Palette是一种…

Harbor高可用(haproxy和keepalived)

Harbor高可用&#xff08;haproxy和keepalived&#xff09; 文章目录 Harbor高可用&#xff08;haproxy和keepalived&#xff09;1.Harbor高可用集群部署架构1.1 主机初始化1.1.1 设置网卡名和ip地址1.1.2 设置主机名1.1.3 配置镜像源1.1.4 关闭防火墙1.1.5 禁用SELinux1.1.6 设…

Linux Seccomp 简介

文章目录 一、简介二、架构三、Original/Strict Mode四、Seccomp-bpf五、seccomp系统调用六、Linux Capabilities and Seccomp6.1 Linux Capabilities6.2 Linux Seccomp 参考资料 一、简介 Seccomp&#xff08;secure computing&#xff09;是Linux内核中的一项计算机安全功能…

HTTPS是什么,详解它的加密过程

目录 1.前言 2.两种加密解密方式 2.1对称加密 2.2非对称加密 3.HTTPS的加密过程 3.1针对明文的对称加密 3.2针对密钥的非对称加密 3.3证书的作用 1.前言 我们知道HTTP协议是超文本传输协议,它被广泛的应用在客户端服务器上,用来传输文字,图片,视频,js,html等.但是这种传…

DataGrip的MySQL数据导出和导入操作指南

场景描述 将开发环境的数据&#xff0c;复制一份到本地&#xff0c;进行本地连接开发工作&#xff0c;避免组内其他开发人员的干扰。假若你的电脑上只安装了DataGrip和MySQL环境&#xff0c;本篇指南就是你所需要的。 一、导出dump数据 将开发环境的数据和结构导出一份到本地…

嵌入式中回调函数的实现方法

一、什么是回调函数 1.1、回调函数的定义和基本概念 回调函数是一种特殊的函数&#xff0c;它作为参数传递给另一个函数&#xff0c;并在被调用函数执行完毕后被调用。回调函数通常用于事件处理、异步编程和处理各种操作系统和框架的API。 基本概念&#xff1a; 回调&#xf…

WSL2部署RV1126 SDK编译环境

1 下载RV1126 SDK 在 Firefly | 让科技更简单&#xff0c;让生活更智能 下载REPO_SDK 这里将SDK下载到了F:\SDK 2 解压SDK到WSL2 tar -xvf /mnt/f/SDK/rv1126_rv1109_linux_release_20211022.tgz 3 编译依赖安装 gcc、g版本依赖安装 sudo apt-get install lib32gcc-7-dev g-7 l…

Data Leakage and Evaluation Issues inMicro-Expression Analysis 阅读笔记

IEEE Transactions on Affective Computing上的一篇文章&#xff0c;做微表情识别&#xff0c;阅读完做个笔记。本文讨论了Data Leakage对模型准确度评估的影响&#xff0c;及如何融合多个微表情数据集&#xff0c;从而提升模型的准确度。工作量非常饱满&#xff0c;很认真&…

C语言:编译与链接

C语言&#xff1a;编译 & 链接 环境翻译环境 编译预处理编译汇编 链接 环境 对C语言而言&#xff0c;生成程序的过程中存在两种环境&#xff1a;翻译环境与运行环境。 翻译环境 在翻译环境中&#xff0c;源代码会被转化为可执行的机器指令。这个过程会分为编译与链接两大…

java 商机管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 商机管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

二叉搜索树的范围和(Lc938)——DFS

给定二叉搜索树的根结点 root&#xff0c;返回值位于范围 [low, high] 之间的所有结点的值的和。 示例 1&#xff1a; 输入&#xff1a;root [10,5,15,3,7,null,18], low 7, high 15 输出&#xff1a;32示例 2&#xff1a; 输入&#xff1a;root [10,5,15,3,7,13,18,1,nul…

Stable Diffusion中的Clip模型

基础介绍 Stable Diffusion 是一个文本到图像的生成模型&#xff0c;它能够根据用户输入的文本提示&#xff08;prompt&#xff09;生成相应的图像。在这个模型中&#xff0c;CLIP&#xff08;Contrastive Language-Image Pre-training&#xff09;模型扮演了一个关键的角色&a…

C++ //练习 10.6 编写程序,使用fill_n将一个序列中的int值都设置为0。

C Primer&#xff08;第5版&#xff09; 练习 10.6 练习 10.6 编写程序&#xff0c;使用fill_n将一个序列中的int值都设置为0。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /********************************************…

红黑树的实现原理

要了解红黑树首先我们要知道什么是 平衡二叉树 平衡二叉树是一种特殊的二叉搜索树&#xff0c;它具有以下特点&#xff1a; 定义&#xff1a;平衡二叉树是一种二叉搜索树&#xff0c;其中每个节点的左右子树高度差的绝对值不超过 1&#xff0c;即任意节点的左右子树高度差不大于…

【前端素材】推荐优质在线电影院商城电商网页Hyper平台模板(附源码)

一、需求分析 1、系统定义 在线电影商城是指一个通过互联网提供电影服务的平台&#xff0c;用户可以在该平台上浏览电影资源、租借或购买电影&#xff0c;以及观看在线影片。 2、功能需求 在线电影商城是指一个通过互联网提供电影服务的平台&#xff0c;用户可以在该平台上…

不管了,如何创建freestyle、pipeline项目我一定要安利给你!

Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。 jenkins作为一个可扩展的自动化服务器&#xff0c;Jenkins可以用作简单的 CI…

AI大预言模型——ChatGPT在地学、GIS、气象、农业、生态、环境等应用

原文链接&#xff1a;AI大预言模型——ChatGPT在地学、GIS、气象、农业、生态、环境等应用 一开启大模型 1 开启大模型 1)大模型的发展历程与最新功能 2)大模型的强大功能与应用场景 3)国内外经典大模型&#xff08;ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Di…

【.NET Core】深入理解IO - FileSteam流

【.NET Core】深入理解IO - FileSteam流 文章目录 【.NET Core】深入理解IO - FileSteam流一、IO流概述二、文件流FileStream2.1 FileStream概述2.2 FileStream检测流位置更改2.3 FileStream构造函数2.4 FileStream常用属性2.5 FileStream.Read方法2.6 FileStream.Write方法2.7…

[剪藏] - 尊湃通讯公司窃密曝光,发现绕不过华为

在科技领域风起云涌的今天&#xff0c;一场惊心动魄的窃密事件悄然发生&#xff0c;涉及华为WIFI6芯片技术的商业秘密被窃取&#xff0c;案中主谋竟然是一位曾在华为海思拥有重量级地位的技术大佬。本文将深入挖掘这起事件的来龙去脉&#xff0c;探讨窃密者的背叛和华为的技术守…

2023中国PostgreSQL数据库生态大会:洞察前沿趋势,探索无限可能(附核心PPT资料下载)

随着数字化浪潮的推进&#xff0c;数据库技术已成为支撑各行各业数字化转型的核心力量。2023中国PostgreSQL数据库生态大会的召开&#xff0c;无疑为业界提供了一个深入交流、共同探索PostgreSQL数据库技术未来发展趋势的平台。本文将带您走进这场盛会&#xff0c;解析大会的亮…
最新文章