一,存储过程的定义与优点
1.定义:
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
2,.优点
1、能完成较复杂的判断和运算<br /> 2、可编程行强,灵活<br /> 3、SQL编程的代码可重复使用<br /> 4、执行的速度相对快一些<br /> 5、减少网络之间的数据传输,节省开销
二,存储过程的语法
1,如何创建存储过程
CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 …]
begin 过程体
end
调用存储过程:
call 过程名[(传参)];
2,参数的个数
存储过程的参数可以有0个(无参)或者多个(有参)
3,参数类型详解:
3.1存储过程的传出参数IN
说明:
(1)传入参数:类型为in,表示该参数的值必须在调用存储过程时指定,如果不显示指定为in,那么默认就是in类型。
(2)、IN类型参数一般只用于传入,在调用过程中一般不作为修改和返回
(3)、如果调用存储过程中需要修改和返回值,可以使用OUT类型参数
例子:
需求:编写存储过程,传入id,根据id返回name
#创建存储过程DELIMITER +$$(修饰结束符号)create procedure test4(userId int)begindeclare username varchar(32) default '';declare ordercount int default 0;select name into username from users where id=userId;select username;end $$
3.2 存储过程的传出参数out
参数说明:
- 传出参数:在调用存储过程中,可以改变其值,并可返回
- out是传出参数,不能用于传入参数值
- 调用存储过程时,out参数也需要指定,但必须是变量,不能是常量;
如果既需要传入,同时又需要传出,则可以使用INOUT类型参数
例子:
需求:调用存储过程时,传入userId返回该用户的name#创建存储过程DELIMITER +$$(修饰结束符号)create procedure test5(in userId int,out username varchar(32))beginselect name into username from users where id=userId;end$$
3.3存储过程的可变参数INOUT
参数说明:
可变变量INOUT:调用时可传入值,在调用过程中,可修改其值,同时也可返回值;
- INOUT参数集合了IN和OUT类型的参数功能;
- INOUT调用时传入的是变量,而不是常量;
例子:
需求:调用存储过程时,传入userId返回该用户的name
#创建存储过程DELIMITER +$$(修饰结束符号)create procedure test6(inout userId int,inout username varchar(32))beginset userId=2;set username='';select id,name into userId,username from users where id=userId;end$$
调用及运行结果如下图
注意:
①如果过程没有参数,也必须在过程名后面写上小括号
例:CREATE PROCEDURE sp_name ([proc_parameter[,…]]) ……
②确保参数的名字不等于列的名字,否则在过程体中,参数名被当做列名来处理
建议:
① 输入值使用in参数;
② 返回值使用out参数;
③ inout参数就尽量的少用。
