存储过程简单讲,就是为以后的使用而保存的一条或者多条MySQL语句的集合。
使用存储过程的的好处:简单、安全、高性能
创建存储过程:
CREATE PROCEDURE 过程名([参数] 参数名 参数数据类型)
BEGIN
过程体;
END;
看一个例子
此存储过程名为productpricing,用CREATE PROCEDURE productpricing()语句定义。如果存储过程接受参数,它们将在()中列举出来。此存储过程没有参数,但后跟的()仍然需要。BEGIN和END语句用来限定存储过程体,过程体本身仅是一个简单的SELECT语句。
注:mysql命令行使用;作为语句分隔符。如果命令行要解释存储过程自身内的;字符,会出现语法错误,所以使用DELIMITER 分隔符定义当下用 //作为新的结束分隔符。结束后,要恢复为原来的分隔符。
调用存储过程
CALL 过程名();
因为存储过程实际上是一种函数,所以存储过程名后需要有()符号(即使不传递参数也需要)
删除存储过程
DROP PROCEDURE 过程名;
如果要删除的存储过程不存在,该语句会报错,可以使用 DROP PROCEDURE IF EXISTS.
一般,存储过程并不显示结果,而是把结果返回给指定的变量(内存中一个特定的位置,用来存临时存储数据)。
存储过程的参数类型有:IN,OUT,INOUT
传入参数IN
1.类型为in,表示该参数的值必须在调用存储过程时指定,如果不显示指定为in,那么默认就是in类型。
2.IN类型参数一般只用于传入,在调用过程中一般不作为修改和返回
3.如果调用存储过程中需要修改和返回值,可以使用OUT类型
看一个例子
传出参数OUT
1.传出参数:在调用存储过程中,可以改变其值,并可返回;
2.out是传出参数,不能用于传入参数值;
3.调用存储过程时,out参数也需要指定,但必须是变量,不能是常量;
4.如果既需要传入,同时又需要传出,则可以使用INOUT类型参数
看一个例子
此存储过程接受三个参数pl,ph,pa分别存储最低,最高和平均价格。每个参数必须指定数据类型,这里使用decimal。关键字OUT指出相应的参数用来从存储过程传出一个值返回给调用者。
调用这个存储过程,必须指定三个变量名
注:所有变量名都要以@开始
再看一个例子
定义IN参数onumber用来传入订单号,OUT参数ototal存储合计总价,调用时传入两个参数。
可变参数INOUT
1.可变变量INOUT:调用时可传入值,在调用过程中,可修改其值,同时也可返回值;
2.INOUT参数集合了IN和OUT类型的参数功能;
3.INOUT调用时传入的是变量,而不是常量;
看一下例子
网友评论