- 一组预先编译好的SQL语句的集合。
- 存储过程的结尾使用DELIMITER重新设置。 语法:delimiter 结束标记。
- 添加DELIMITER的作用是告诉MYSQL过程以“结束标记”结束,不是以分号结束。
DELIMITER测试
``` mysql> delimiter $ mysql> create procedure pro_test() -> begin -> truncate table t_user; -> insert into t_user(username) values(‘zhangsan’); -> end $ Query OK, 0 rows affected (0.02 sec)
mysql> select * from t_user$ +——+—————+ | id | username | +——+—————+ | 1 | zhangsan | +——+—————+ 1 row in set (0.04 sec)
mysql> delimiter; mysql> select * from t_user; +——+—————+ | id | username | +——+—————+ | 1 | zhangsan | +——+—————+ 1 row in set (0.06 sec)
<a name="Jt5hK"></a>#### 空参
delimiter $ create procedure pro_test2() begin insert into t_user(username) values(‘zhangsan’),(‘lisi’); end $ delimiter ;
call pro_test();
select * from t_user;
<a name="swkC3"></a>
#### 输入参数--in
- **参数中变量直接添加类型长度。**
- **输入参数的“in”放在最前面。**
mysql> delimiter $ mysql> create procedure pro_test_in(in var_name varchar(20)) -> begin -> insert into t_user(username) values(var_name); -> end $ Query OK, 0 rows affected (0.02 sec)
mysql> delimiter ;
mysql> truncate table t_user; Query OK, 0 rows affected (0.08 sec)
mysql> select * from t_user; Empty set
mysql> call pro_test_in(‘zhangsan’); Query OK, 1 row affected (0.02 sec)
mysql> select * from t_user; +——+—————+ | id | username | +——+—————+ | 1 | zhangsan | +——+—————+ 1 row in set (0.03 sec)
mysql> call pro_test_in(‘lisi’); Query OK, 1 row affected (0.02 sec)
mysql> select * from t_user; +——+—————+ | id | username | +——+—————+ | 1 | zhangsan | | 2 | lisi | +——+—————+ 2 rows in set (0.05 sec)
<a name="VaH37"></a>
#### 输出参数--out
mysql> delimiter $ mysql> create procedure pro_test_out(out var_count int) -> begin -> select count(1) into var_count from t_user; -> end $ Query OK, 0 rows affected (0.01 sec) mysql> delimiter ; mysql> set @count := 0; Query OK, 0 rows affected (0.00 sec)
mysql> call pro_test_out(@count); Query OK, 1 row affected (0.01 sec)
mysql> select @count; +————+ | @count | +————+ | 3 | +————+ 1 row in set (0.04 sec)
<a name="NSiQZ"></a>
#### 输入输出参数--inout
**需要定义变量来存放输入输出值。**
mysql> delimiter $ mysql> create procedure pro_test_inout(inout var_a int, inout var_b int) -> begin -> set var_a := var_a 2; -> set var_b := var_b 2; -> end $ Query OK, 0 rows affected (0.02 sec)
mysql> delimiter ; mysql> set @var_a := 10; Query OK, 0 rows affected (0.00 sec)
mysql> set @var_b := 20; Query OK, 0 rows affected (0.00 sec)
mysql> call pro_test_inout(@var_a, @var_b); Query OK, 0 rows affected (0.00 sec)
mysql> select @var_a, @var_b; +————+————+ | @var_a | @var_b | +————+————+ | 20 | 40 | +————+————+ 1 row in set (0.04 sec)
<a name="7Hju1"></a>
#### 查看存储过程
show create procedure [pro name];
<a name="2f8bd5ec"></a>
#### 删除存储过程
drop procedure [pro name]; ```
