大家晚上好,我是阿涛。
今天的主题是SQL存储过程,存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。
在工作里也会经常遇到重复性的工作,这时候就可以把常用的SQL写好存储起来(比如根据身份证计算年龄,根据超市消费记录计算每个月消费总额,消费次数等等),这就是存储过程。
【1】.如何使用存储过程
1.1 无参数的存储过程
create procedure 存储过程名称()begin <sql语句> ;end;
实例1:查询日期
# MYSQL中DELIMITER //create procedure q_date() begin select date from db_name.tablename;end //DELIMITER ;
为什么有DELIMITER //,"DELIMITER //" 语句的作用是将MYSQL的结束符设置为//,因为MYSQL默认的语句结束符为分号; ,存储过程中的SQL语句需要分号来结束,为了避免与存储过程中SQL语句结束符相冲突,需要使用DELIMITER 改变存储过程的结束符,并以"END //"结束存储过程。存储过程定义完毕之后再使用DELIMITER ;恢复默认结束符。DELIMITER 也可以指定其他符号为结束符。注意:当使用DELIMITER命令时,应该避免使用反斜杠(\)字符,因为反斜杠是MYSQL的转义字符!!!
其实这个存储过程跟SAS的宏函数是很像很像的,功能都是为了简化一些重复操作。
调用:
call q_date();
结果:
1.2 有参数的存储过程
create procedure 存储过程名称(参数1,参数2,...)begin <sql语句> ;end;
实例2:
增加参数价格,查询开盘价为XX的日期
DELIMITER //create procedure q_date_price(price float(10)) begin select date,open from db_name.tablename where open=price;end //DELIMITER ;
调用:带参数
call q_date_price(20); # 查询open价格为20的日期
结果:
1.3 默认参数的存储过程
前面的存储过程名称后面是create procedure name (in/out/inout,参数),括号里面只包含参数的类型和名字,方便调用。
in 输入参数:参数初始值在存储过程前被指定为默认值,在存储过程中修改该参数的值不能被返回;
out输出参数:参数初始值为空,该值可在存储过程内部被改变,并可返回;
inout输入输出参数:参数初始值在存储过程前被指定为默认值,并且可在存储过程中被改变和在调用完毕后可被返回。
对了如果要删除的话,drop procedure name 就可。
注意:定义不同的存储过程,要使用不同的存储过程名称,相同的存储过程的名字会引起系统报错
End
作者:是阿涛呀
半壶水全栈工程师,好读书,甚喜之