create procedure sp_name ([proc_parameter]) [characteristics] routine_body
CREATE PROCEDURE为用来创建存储函数的关键字;sp_name为存储过程的名称;proc_parameter为指定存储过程的参数列表,列表形式如下:[ IN | OUT | INOUT ] param_name type
其中,IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出;param_name表示参数名称;type表示参数的类型,该类型可以是MySQL数据库中的任意类型。
先来创建一个简单的存储过程:
我的mysql数据库里面有一个名为class_a的表:
![](https://i-blog.csdnimg.cn/blog_migrate/7940bbcc74ab870aeb345580e78c5efe.png)
运用这张表的数据来写一个最简单的存储过程:
use test;
delimiter //
create procedure scan_class_a()
BEGIN
SELECT * FROM CLASS_A;
END//
delimiter ;
这里的delimiter //是在定义存储过程之前将//作为存储过程的结束符,避免跟sql语句中的结束符冲突,因为sql语句中结束符默认为";",存储过程结束之后将结束符重置为";"。
调用存储过程可以带括号也可以不带括号,两种写法都可以跑出结果:
call scan_class_a();
call scan_class_a;
创建存储函数:
create function function_name ([func_parameter])
returns type
routine_body
CREATE FUNCTION为用来创建存储函数的关键字;func_name表示存储函数的名称;func_parameter为存储过程的参数列表,参数列表形式如下:[ IN | OUT | INOUT ] param_name type
指定参数为IN、OUT或INOUT只对PROCEDURE是合法的。(FUNCTION中总是默认为IN参数)。RETURNS子句只能对FUNCTION做指定,对函数而言这是强制的。它用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句。
drop function if exists `func1`;
delimiter //
create function func1(para1 int)
returns varchar(100)
deterministic
return (select name from class_a where id=para1);
//
delimiter ;
定义变量:
DECLARE var_name[,varname]… date_type [DEFAULT value];
var_name为局部变量的名称。DEFAULT value子句给变量提供一个默认值。值除了可以被声明为一个常数之外,还可以被指定为一个表达式。如果没有DEFAULT子句,初始值为NULL。
DECLARE myparam INT DEFAULT 100;
为变量赋值:
SET var_name = expr [, var_name = expr] ...;
DECLARE var1, var2, var3 INT;
SET var1 = 10, var2 = 20;
SET var3 = var1+var2;