示例2:带in参数的存储过程
创建存储过程:
/*设置结束符为$*/
DELIMITER $
/*如果存储过程存在则删除*/
DROP PROCEDURE IF EXISTS proc2;
/*创建存储过程proc2*/
CREATE PROCEDURE proc2(id int,age int,in name varchar(16))
BEGIN
INSERT INTO t_user VALUES (id,age,name);
END $
/*将结束符置为;*/
DELIMITER ;
调⽤存储过程:
/*创建了3个⾃定义变量*/
SELECT @id:=3,@age:=56,@name:='张学友';
/*调⽤存储过程*/
CALL proc2(@id,@age,@name);验证效果:
mysql> select * from t_user;
---- ----- ---------------
| id | age | name |
---- ----- ---------------
| 1 | 30 | 路⼈甲Java |
| 2 | 50 | 刘德华 |
| 3 | 56 | 张学友 |
---- ----- ---------------
3 rows in set (0.00 sec)
张学友插⼊成功。
示例3:带out参数的存储过程
创建存储过程:
delete a from t_user a where a.id = 4;
/*如果存储过程存在则删除*/
DROP PROCEDURE IF EXISTS proc3;
/*设置结束符为$*/
DELIMITER $
/*创建存储过程proc3*/
CREATE PROCEDURE proc3(id int,age int,in name varchar(16),out
user_count int,out max_id INT)
BEGIN
INSERT INTO t_user VALUES (id,age,name);
/*查询出t_user表的记录,放⼊user_count中,max_id⽤来存储t_user中最⼩的id*/
SELECT COUNT(*),max(id) into user_count,max_id from t_user;
END $
/*将结束符置为;*/
DELIMITER ;
proc3中前2个参数,没有指定参数模式,默认为in。
调⽤存储过程:/*创建了3个⾃定义变量*/
SELECT @id:=4,@age:=55,@name:='郭富城';
/*调⽤存储过程*/
CALL proc3(@id,@age,@name,@user_count,@max_id);
验证效果:
mysql> select @user_count,@max_id;
------------- ---------
| @user_count | @max_id |
------------- ---------
| 4 | 4 |
------------- ---------
1 row in set (0.00 sec)
示例4:带inout参数的存储过程
创建存储过程:
/*如果存储过程存在则删除*/
DROP PROCEDURE IF EXISTS proc4;
/*设置结束符为$*/
DELIMITER $
/*创建存储过程proc4*/
CREATE PROCEDURE proc4(INOUT a int,INOUT b int)
BEGIN
SET a = a*2;
select b*2 into b;
END $
/*将结束符置为;*/
DELIMITER ;
调⽤存储过程:
/*创建了2个⾃定义变量*/
set @a=10,@b:=20;
/*调⽤存储过程*/
CALL proc4(@a,@b);验证效果:
mysql> SELECT @a,@b;
------ ------
| @a | @b |
------ ------
| 20 | 40 |
------ ------
1 row in set (0.00 sec)
上⾯的两个⾃定义变量@a、@b作为⼊参,然后在存储过程内部进⾏了修改,又
作为了返回值。
示例5:查看存储过程
mysql> show create procedure proc4;
------- ------- ------- ------- ------- -------
| Procedure | sql_mode | Create Procedure | character_set_client |
collation_connection | Database Collation |
------- ------- ------- ------- ------- -------
| proc4 |
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ER
ROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc4`(INOUT a int,INOUT
b int)
BEGIN
SET a = a*2;
select b*2 into b;
END | utf8 | utf8_general_ci | utf8_general_ci
|
------- ------- ------- ------- ------- -------
1 row in set (0.00 sec)