Mysql 存储过程。
文章源自陈学虎-https://chenxuehu.com/article/2016/05/5119.html
- #存储过程
- /*
- 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合。
- 存储过程可以使用IN、OUT、INOUT类型
- 创建格式:
- delimiter $$
- CREATE PROCEDURE 存储过程名(参数列表)
- BEGIN
- SQL语句代码块
- END
- $$
- 注意:
- 括号保卫的参数必须总是存在,如果没有参数,也该使用一个孔参数数列()
- 删除格式
- DROP PROCEDURE IF EXISTS 存数过程名;
- */
- #创建存储过程,以A、B为例进行练习
- DROP PROCEDURE IF EXISTS select_all;
- delimiter $$
- CREATE PROCEDURE select_all(in a_id smallint)
- BEGIN
- SELECT *
- FROM A
- WHERE id = a_id;
- END
- $$
- CALL select_all(1);
- #存储过程参数类型讲解
- #IN类型
- #传进去的参数能够生效
- #内部运算的值不能返出去
- DROP PROCEDURE IF EXISTS pr_param_in;
- delimiter $$
- CREATE PROCEDURE pr_param_in(in id int)
- BEGIN
- if(id is not null) then
- set id = id + 1;
- end if;
- select id as in_inner;
- END
- $$
- set @id = 10;
- CALL pr_param_in(@id);
- SELECT @id as id_out;
- #OUT类型
- #传递进来的参数初始值都为 NULL
- #能把值返出去
- DROP PROCEDURE IF EXISTS pr_param_out;
- delimiter $$
- CREATE PROCEDURE pr_param_out(out id int)
- BEGIN
- select id as in_inner_1; #初始为 null
- if(id is not null) then
- set id = id + 1;
- select id as id_inner_2;
- else
- select 1 into id;
- end if;
- select id as id_inner_3;
- END
- $$
- set @id = 10;
- CALL pr_param_out(@id);
- SELECT @id as id_out;
- #INOUT类型
- #传进去的参数可以使用
- #能把值返出去
- DROP PROCEDURE IF EXISTS pr_param_inout;
- delimiter $$
- CREATE PROCEDURE pr_param_inout(inout id int)
- BEGIN
- select id as in_inner_1;
- if(id is not null) then
- set id = id + 1;
- select id as id_inner_2;
- else
- select 1 into id;
- end if;
- select id as id_inner_3;
- END
- $$
- set @id = 10;
- CALL pr_param_inout(@id);
- SELECT @id as id_out;
评论