mysql存储过程基本语法

本文来说下mysql存储过程基本语法


基本语法

存储过程就是具有名字的一段代码,用来完成一个特定的功能。创建的存储过程保存在数据库的数据字典中

// 声明存储过程
CREATE
    [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

// 存储过程的参数
proc_parameter:
    [ IN | OUT | INOUT ] param_name type

// 指定存储过程的特性
characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
 
// SQL代码的内容,可以用BEGIN...END来表示SQL代码的开始与结束
routine_body:
  Valid SQL routine statement
 
[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]

delimiter问题

在Mysql中,因为存储过程中的SQL语句必须以分号结尾,而mysql的cmd窗口在遇到sql语句加分号时,会直接执行语句,而发送冲突导致存储过程创建失败。

因此我们要修改存储过程的结束符,让mysql可以识别。


使用实例

存在一张员工表,有如下的三条数据

在这里插入图片描述

创建一个存储过程,查询员工的基本信息

delimiter//
create procedure get_employee_info()
begin
select * from employee_info;
end//
delimiter;

创建成功

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

如何调用存储过程

call sp_name[(传参)];

调用成功

在这里插入图片描述

删除存储过程

DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

这个语句被用来移除一个存储程序或函数。即,从服务器移除一个指定的子程序。

在这里插入图片描述


变量的使用

变量定义

局部变量声明一定要放在存储过程体的开始:

DECLAREvariable_name [,variable_name...] datatype [DEFAULT value];

使用实例

在这里插入图片描述

结果

在这里插入图片描述


declare语句

DECLARE仅被用在BEGIN … END复合语句里,并且必须在复合语句的开头,在任何其它语句之前。

在这里插入图片描述


变量赋值

SET 变量名 = 表达式值 [,variable_name = expression …]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


用户变量

用户变量名一般以@开头

在这里插入图片描述


存储过程的参数

常用格式

CREATE PROCEDURE 存储过程名称(参数模式 参数名 参数类型)
BEGIN
	存储过程体
END

参数模式有三种

  1. IN:该参数可以作为输入,也就是该参数需要调用方传入值
  2. OUT:该参数可以作为输出,也就是该参数可以作为返回值
  3. INOUT:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

in 输入参数

使用实例:根据员工工号查询出员工信息

CREATE DEFINER=`tmis`@`%` PROCEDURE `get_employee_info`
(IN p_employeeCode INTEGER)
begin
   select * from employee_info
   WHERE employee_code = p_employeeCode;
end

在这里插入图片描述在这里插入图片描述


out 输出参数

out 表示从存储过程内部传值给调用者,封装有参数的存储过程,传入员工编号,返回员工名字

CREATE DEFINER=`tmis`@`%` PROCEDURE `get_employee_info`
(IN p_employeeCode INTEGER,out out_employeeName varchar(50))
begin
   select employee_name into out_employeeName from employee_info
	 WHERE employee_code = p_employeeCode;
end

调用与查询

在这里插入图片描述在这里插入图片描述


inout输入输出参数

inout 表示从外部传入的参数经过修改后可以返回的变量,既可以使用传入变量的值也可以修改变量的值(即使函数执行完)

CREATE DEFINER=`tmis`@`%` PROCEDURE `get_employee_info`
(INOUT p varchar(50))
begin
   select employee_name into p from employee_info
	 WHERE employee_code = p;
end

在这里插入图片描述
在这里插入图片描述


本文小结

本文介绍了一些mysql存储过程的基本语法知识与内容。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值