MySql存储过程

存储过程和函数

  1. 含义: 事先经过编译并存储在数据库中的一段Sql语句的集合
  2. 使用的好处:
    1.简化应用开发人员的工作
    2.减少数据在数据库和应用服务器之间的传输
    3.提高数据处理的效率
  3. 分类:
    1、无返回无参
    2、仅仅带in类型,无返回有参
    3、仅仅带out类型,有返回无参
    4、既带in又带out,有返回有参
    5、带inout,有返回有参
    注意:in、out、inout都可以在一个存储过程中带多个

创建存储过程

语法:
`create procedure 存储过程名(in|out|inout 参数名 参数类型,…)
begin
存储过程体

end`
类似于方法:

修饰符 返回类型 方法名(参数类型 参数名,...){

	方法体;
}

注意:

1、需要设置新的结束标记
delimiter 新的结束标记
示例:
delimiter $

CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名  参数类型,...)
BEGIN
	sql语句1;
	sql语句2;

END $

2、存储过程体中可以有多条sql语句,如果仅仅一条sql语句,则可以省略begin end

3、参数前面的符号的意思
in:该参数只能作为输入 (该参数不能做返回值)
out:该参数只能作为输出(该参数只能做返回值)
inout:既能做输入又能做输出

调用存储过程
call 存储过程名(实参列表)

创建函数

学过的函数:LENGTH、SUBSTR、CONCAT等
语法:

CREATE FUNCTION 函数名(参数名 参数类型,...) RETURNS 返回类型
BEGIN
	函数体

END

调用函数
SELECT 函数名(实参列表)

函数和存储过程的区别

在这里插入图片描述

循环批量插入数据
-- 创建存储过程
create procedure my_procedure01(in num int(2),out ii int(2))
begin
    declare i int(2) default 0;
    declare str int(2);
    while i < num
    do
        set str = round(rand()*100) + 1;
        insert into p_procedure (name) values (str);
        set i = i + 1;
    end while;
 
    set ii = i;
end;
-- 删除存储过程
drop procedure my_procedure01;
-- 调用存储过程
call my_procedure01(2, @y);
-- 查询存储过程的输出
select @y;
拼接批量插入数
-- 创建存储过程
create procedure my_procedure02(in num int(2),out ii text)
begin
    declare i int(2) default 0;
    declare str int(2);
    declare data text;
         
    while i < num
    do
        set str = round(rand()*100) + 1;
        set data = concat('(', str, ')');
  
        -- 存储 alldata 内容的变量必须是全局变量,使用 @ 符修饰
        if @insertData = '' then
            set @insertData = CONCAT_WS(',', data);
        else
            set @insertData = CONCAT_WS(',', @insertData, data);
        end if;
  
        set i = i + 1;
    end while;
    -- 存储 sql 内容的变量必须是全局变量,使用 @ 符修饰
    set @sql = CONCAT('INSERT INTO p_procedure (name) VALUES ', @insertData);
         
    -- 预处理
    PREPARE ins from @sql;
    EXECUTE ins;
    DEALLOCATE PREPARE ins;
     
    -- 清空全局 @insertData 数据,否则数据会一直追加
    set @insertData = '';
  
    -- 输出 sql
    set ii = @sql;
         
end;
-- 调用存储过程
call my_procedure02(2, @ii);
-- 查询存储过程的输出
select @ii;
-- 外部重置全局变量
set @insertData = '';
-- 删除存储过程
drop procedure my_procedure02;
-- 存储过程-实例02 - end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值