暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

Java学习网 2021-11-08
431

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


文章转载自Java学习网,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论