MySQL数据库,详解存储过程使用(二)

2021-11-16 11:02:35 浏览数 (1)

示例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)

0 人点赞