本文来说下mysql存储过程基本语法
文章目录
- 基本语法
- 使用实例
- 变量的使用
- 变量定义
- declare语句
- 变量赋值
- 用户变量
- 存储过程的参数
- in 输入参数
- out 输出参数
- inout输入输出参数
- 本文小结
基本语法
存储过程就是具有名字的一段代码,用来完成一个特定的功能。创建的存储过程保存在数据库的数据字典中
// 声明存储过程
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
参数模式有三种
- IN:该参数可以作为输入,也就是该参数需要调用方传入值
- OUT:该参数可以作为输出,也就是该参数可以作为返回值
- 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存储过程的基本语法知识与内容。