查询存储过程:


show procedure  status where Db='数据库名称'


SHOW PROCEDURE STATUS //查询所有的存储过程


SHOW PROCEDURE STATUS  LIKE  'pattern' //查询符号要求的存储过程


如:


SHOW PROCEDURE STATUS  LIKE  'myuse' 查询的就是存储过程名称 为myuse 的信息


 


 


查询数据库字符编码情况


show variables where Variable_name like 'collation%';


 


删除存储过程:


DROP PROCEDURE IF EXISTS myuse //IF EXISTS最好带上 不然会报错


 


 


创建存储过程的基本样式:


create procedure 存储过程名称( 参数的种类 参数1 数据类型参数的种类 参数2数据类型...参数的种类 参数n 数据类型


BEGIN  


// 处理内容 其中可以用到函数和条件语句等


END


 


注释: 存储过程的名称可以自由定义,但不可与存在的函数或存储过程名称重复,命名时建议以【sp_】开头,需要处理的内容则编辑在BEGIN和END之间。参数的种类分3种,分别是IN、OUT、INOUT,其中IN为输入参数类型,OUT为输出参数类型,而INOUT既是输入类型又是输出类型


 


下面先创建一个简单的例子


create procedure hi() select 'hello'


 


 


/-----分割线-------/


那我们怎么使用它?


调用语法如下:


CALL 存储过程名称(参数,....)


 


如上面创建的存储过程就可以这样调用


call hi()


(ps:因为没有函数参数可以不写参数,注意存储过程和调用是分开执行的,一起执行会报错)


 


 


 


下面创建一个稍微复杂一点的存储过程(函数)


 


 


CREATE  PROCEDURE `myuse`( IN NAME VARCHAR (12) )


BEGIN


if name is null or name='' then
 
       select * from lei ;
 
    else
 
    select * from code where code.`name` = NAME;
 
end if;


END


 


(ps:注意看到使用了IF else,在if里面使用then才能写对应的sql语句 并且每段sql结尾必须带上英文分号。使用了if else 最终要使用 end if;(分号也是必带的)代表条件语句的结束,不然创建过程会报错)


首先 解析这个存储过程的意思: 如果输入参数(使用了IN)是null或‘’会执行 select * from lei这个sql,不匹配条件就会执行下面的


 


调用结果:



存储过程的使用(一)_存储过程


call myuse('')



存储过程的使用(一)_数据类型_02


 


call myuse('')


 


 



存储过程的使用(一)_sql_03


 


下面再来创建一个单纯的输出参数的存储过程


 


CREATE PROCEDURE sp_con ( OUT v1_name varchar(10), OUT v2_age varchar(10) ) BEGIN


SELECT


    name


FROM


    CODE limit 0,1 INTO v1_name;


SELECT


    age


FROM


    lei limit 0,1 INTO v2_age;


END;


 


//上面的sql使用into +形参,这个意思就是查询结果赋值给此形参 这个形参称之为sql里面的变量


 


call sp_con(@v1_name,@v2_age)


//下面的调用方式也不同了,使用@XX的格式,这就是mysql里面的变量命名规则


 


//然后查询就可以使用变量,如下面所示,值得一提的是变量是会随着服务关闭而消失的,而存储过程不会


select @v1_name,@v2_age


 


//其实变量名称不一定非要跟存储过程的out类型中 参数一样,如下图所示,只不过查询一定要用自己设置的变量


call sp_con(@a1,@b1)


select @a1,@b1