MySQL创建存储过程
SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。
创建存储过程
mysql> create procedure 过程名([in|out|inout] [变量名] [变量类型]) -> begin -> ... -> end;
DELIMITER // CREATE PROCEDURE myproc(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM students; END // DELIMITER ;
分隔符:MySQL默认以";"为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错,所以要事先用“DELIMITER //”声明当前段分隔符,让编译器把两个"//"之间的内容当做存储过程的代码,不会执行这些代码;“DELIMITER ;”的意为把分隔符还原。
参数:
IN:传递给存储过程
OUT:从存储过程中传出
INOUT:对存储过程传入和传出
调用存储过程
call 存储过程名([@变量1,@变量2...]);
select @变量1;
建立智能存储过程
--Name:ordertotal --Parameters:onumber=order_number -- taxable=0 if not taxable,1 if taxable -- ototal=order total variable CREATE PROCEDURE ordertotal ( IN onumber INT, IN taxable BOLLEAN, OUT ototal DEMCIAL(8,2) )COMMENT 'Obtain order total,optionlly adding tax' BEGIN --Declare variable for total DECLARE total DEMCIAL(8,2); --Declare tax percentage DECLARE taxrate INT DEFAULT 6; --Get the order total SELECT Sum(item_price*quantity) FROM orderitems WHERE order_num=onumber INTO total; --Is this taxable? IF taxable THEN --Yes,so add taxrate to the total SELECT total+(total/100*taxrate) TNTO total; END IF; --And finally,save to out variable SELECT total INTO ototal; END;
- 获得合计
- 把营业税有条件的添加到合计
- 返回合计(带税或不带税)
可以再存储过程中包含comment的值,他不是必须的 ,但是如果给出,在show procedure status的结果中显示