自定义局部变量
局部变量就是一个存储过程内部定义的一些变量。
如下方式就可以自定义局部变量了。
需要注意的是:局部变量声明一定要放在存储过程体的开始
create PROCEDURE demo06(in p_in int)
BEGIN
DECLARE l_int int UNSIGNED DEFAULT 400;
DECLARE l_numeric FLOAT(8,2) DEFAULT 9.95;
DECLARE l_date date DEFAULT '1999-12-31';
DECLARE l_datetime datetime DEFAULT '1999-12-31 23:59:59';
DECLARE l_varchar varchar(255) DEFAULT 'This will not be padded';
select l_int,l_numeric,l_date,l_datetime,l_varchar;
END
调用存储过程
call demo06(1)
用户变量
①用户变量名一般以@开头
②滥用用户变量会导致程序难以理解及管理
第一种方式:
select 'hello world' into @x;
select @x;
第二种方式:
set @y='hello mysql';
select @y
第三种方式
set @z=1+2+3;
select @z;
在存储过程中使用用户变量:
create PROCEDURE demo07(in p_in int)
BEGIN
select concat(@y,'hello world');
END
设置用户变量并调用demo07
set @y='hello mysql';
call demo07(1)
在存储过程之间传递全局范围的用户变量:
CREATE PROCEDURE demo08(in p_in int)
BEGIN
set @last = 'p1';
END
CREATE PROCEDURE demo09(in p_int int)
begin
select concat('last is ',@last);
end
call demo08(1);
call demo09(1);
注释
MySQL存储过程可使用两种风格的注释
双模杠:–
该风格一般用于单行注释
c风格: 一般用于多行注释
Mysql中存储过程的查询
我们知道一个数据库下面有哪些表,我们一般采用show tables进行查看,那么我们要是查看某个数据库下面的存储过程,是否也可以采用呢?答案是,我们可以查看某个数据库下面的存储过程,但是是另一种方式。
我们可以用
select * from information_schema.ROUTINES where routine_schema='数据库名'
进行查询。
如果我们想知道某个存储过程的详细,那我们又该怎么做呢?是不是也可以像操作表一样用 describ 表名 进行查看呢?
答案是:我们可以查看存储过程的详细,但是需要用另一种方法:
show create procedure 数据库.存储过程名;
就可以查看当前存储过程的详细。
存储过程的修改
alter procedure
更改用CREATE PROCEDURE 建立的预先指定的存储过程,其不会影响相关存储过程或存储功能。
存储过程的删除
drop procedure
删除一个存储过程比较简单,和删除表一样:
DROP PROCEDURE
从MySQL的表格中删除一个或多个存储过程。