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

存储过程

时间:2023-07-01 15:24:12浏览次数:38  
标签:存储 set -- stu score procedure 过程 select

创建

create procedure 存储过程名称([参数列表])
begin
    -- sql语句
end;

调用

call 名称([参数]);

查看

-- 查询指定数据库的存储过程及状态信息
select * from information_schema.ROUTINES where ROUTINE_SCHEMA='数据库名';

show create procedure 存储过程名称; -- 查询某个存储过程的定义

删除

drop procedure [if exists] 存储过程名称;

通过命令行定义存储过程时,通过delimiter设置sql语句的结束符

delimiter $$ -- 设置了$$后,分号就不能当作结束符了,需要使用$$
-- 然后接下来再写存储过程
-- 写完后可以再改回分号

示例

create table student (
    name varchar(10) comment '姓名',
    id int comment '学号' primary key auto_increment,
    class int comment '班级'
) comment '学生表', default charset 'utf8';

insert into student (name, class)values ('张三' , 1), ('李四', 2), ('王五', 3), ('赵六', 1);

show variables like 'character%';
create procedure p1()
begin
    select count(*) from student;


end;

call p1();

drop procedure p1;

变量

  • 系统变量

show global variables;;
select @@global.autocommit;
set @@global.autocommit = 0;
set global autocommit = 1;
  • 用户变量

set @myname = 'itcast';
set @mygender := '男', @myhobby := 'java'; -- 相比于=,推荐使用:=

select @myname, @mygender, @myhobby;

select @mycolor := 'red';

select count(*) into @mycnt from student; -- 将count值赋给mycnt变量

   用户自定义的变量无需对其进行声明或初始化,只不过获取到的值为NULL

  • 局部变量

只在存储过程中生效,需要declare声明

    • 声明
declare 变量名 变量类型[default···]; -- 如果有默认值,可以通过default赋值
-- 变量类型就是数据库字段类型
    • 赋值
set 变量名 = 值;
set 变量名 := 值;
select 字段名 into 变量名 from 表名;
    • 查看
select 变量名;
    • 示例
create procedure p2()
begin
    declare stu_count int;
    declare stu_count2 int default 0;

    set stu_count := 1;
    select count(*) into stu_count2 from student;
    select stu_count, stu_count2;
end;

call p2();

 

分支语法

if 条件 then

elseif 条件 then

else

endif;
  • 示例
create procedure p3()
begin
    declare stu_score int default 0;
    select score into stu_score from student where name = '张三';
    if stu_score >= 85 then
        update student set degree = '优秀' where name = '张三';
    elseif stu_score >= 60 then
        update student set degree = '及格' where name = '张三';
    else
        update student set degree = '不及格' where name = '张三';
    end if;
end;

call p3();

 

带参数的procedure

  •  示例
create procedure p4(in stu_score int, out stu_degree varchar(10))
begin

    if stu_score >= 85 then
        set stu_degree := 'perfect';
    elseif stu_score >= 60 then
        set stu_degree := 'ok';
    else
        set stu_degree := 'not ok';
    end if;
end;

drop procedure p4;


select score into @stu_score from student where name = '李四';
call p4(@stu_score, @stu_degree);
select @stu_degree;

选择分支

 

循环

 

 

  • while循环  
while 条件 do

end while;
  • repeat
repeat
    -- sql逻辑
    
    until 条件
end repeat;

其实就是c++中的do while

  • loop

  

-- leave 退出循环,相当于c++中的break
-- iterate 跳过当前循环,进行下一次循环,相当于c++中的continue


[label:] loop
    -- sql逻辑
  -- leave label
  -- iterate label
  -- 都配合label使用,lebel相当于loop的名称
end loop [label];

 

存储查询结果集

  • 游标

  •  条件处理程序

satement:表示处理结束时,可以顺便进行的操作,如退出fetch游标的循环时,可以 close 游标

  • 示例
create procedure p5(IN uscore int)
begin
    -- fetch into 的变量应该在游标声明之前
    declare uname varchar(10) ;
    declare uclass int;

    declare result cursor for select name, class from student where score >= uscore;
    -- 定义一个handler,用于跳出fetch cursor的死循环
    declare exit handler for not found close result;

    drop table if exists course;
    create table if not exists course (
        name varchar(10) comment '姓名' primary key ,
        class int comment '选课'
    ) comment '选课表', default CHARSET = utf8;

    open result;
    while TRUE do
        fetch result into uname, uclass;
        insert into course values(uname, uclass);
        end while;

end;

drop procedure p5;
call p5(60);

 

存储函数

有返回值的存储过程

 其中type为返回值类型,characteristic为返回值说明

 

标签:存储,set,--,stu,score,procedure,过程,select
From: https://www.cnblogs.com/WTSRUVF/p/17517660.html

相关文章

  • 图论:图的概念、存储和遍历 学习笔记
    图论图的概念从数据结构的角度看,图可以看作一个多对多的数据存储结构。而结合图论算法,图就可以成为很多问题的载体。图论是数据结构与算法结合的产物。OIWiki上给出的图相关概念比较全面,但是因为OI是民科各个地方的一些定义都不太一样,所以作大概了解即可。图的存储图的存......
  • python脚本实现将md文件中的图片替换为本地存储
    实现将md文件中的网络图片下载下来,保存到本地./typora-img/{filename}目录,并且会将md文件中的图片地址替换为本地地址#代码参考:https://blog.csdn.net/weixin_34090643/article/details/91435765importrequestsimportreimportosfromitertoolsimportchainimportfn......
  • 靳宇灵 | CHATGPT真的很强大,很快帮我解决了tp5对接腾讯cos存储的SDK,NB!!
    php请求腾讯云cos存储SDK报错ThrowableErrorinClient.phpline229致命错误:CalltoundefinedfunctionCos\region_map()这个错误的原因是您在使用腾讯云cos存储SDK时,调用了一个未定义的函数 Cos\region_map()。首先,您需要确保安装了腾讯云cos存储SDK。可以通过Composer进......
  • 拓端tecdat|R语言贝叶斯Metropolis-Hastings Gibbs 吉布斯采样器估计变点指数分布分析
    原文链接:http://tecdat.cn/?p=26578 原文出处:拓端数据部落公众号最近我们被客户要求撰写关于吉布斯采样器的研究报告,包括一些图形和统计输出。指数分布是泊松过程中事件之间时间的概率分布,因此它用于预测到下一个事件的等待时间,例如,您需要在公共汽车站等待的时间,直到下一班车......
  • 面向对象编程与面向过程编程的区别
    一、面向对象编程(OOP,ObjectOrientedProgramming):不必关心对象的具体实现,只需要能够满足用户的需求即可。主要以类或者对象为组织代码的基本单元。对象的三个主要的特性:1、对象的行为:可以对对象施加哪些操作,或者是对对象施加哪些方法。2、......
  • Linux编译过程以及生成中间文件--链接
    1、编译系统C源文件到可执行文件共经历了4个过程。在使用GCC编译程序时,编译过程可以被细分为四个阶段,包括预处理、编译、汇编、链接 1、预处理在预处理阶段,编译器主要作加载头文件、宏替换、条件编译的作用。一般处理带“#”的语句。 我们可以通过gcc的-E选项进行查看......
  • kubernetes学习笔记06(存储)
    Kubernetes存储管理容器中的磁盘生命周期是短暂的,也带来了一系列的问题:当一个容器损坏后,Kubernetes会重启容器,但是文件会丢失很多容器在同一Pod中运行的时候,数据文件需要共享KubernetesVolume的到来解决了上述问题,Kubernetes集群中的存储跟Docker的存储卷有些类似,只不过Docker的存......
  • 【九】MySQL数据库之视图,触发器与存储过程
    【九】MySQL数据库之视图,触发器与存储过程视图,触发器与存储过程【一】视图视图是一个虚拟表(非真实存在)其本质是【根据SQL语句获取动态的数据集,并为其命名】用户使用时只需使用【名称】即可获取结果集可以将该结果集当做表来使用。使用视图我们可以把查询过程中的临......
  • 【源码分析】Mybatis 的配置解析过程
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌Java知识图谱点击链接:体系化学习Java(Java面试专题)......
  • UE5 源码下载编译过程记录
    前言没有科学上网,就不要折腾了1注册Epic2注册github3关联账号在UE官网登入账号并且关联github账号4下载源码5执行Setup.bat5.1执行出错提示FailedtodownloadFailedtodownload'http://cdn.unrealengine.com/dependencies/UnrealEngine-24819931/19acf26186763763ae43ec3e4bd1......