目录
1.概念
存储过程和函数类似java中的方法,能够提高代码的重用性,能够简化操作
一组预先编译好的SQL语句的集合,理解成批处理语句,减少了编译次数并且减少了和数据库服务器的连接数,提高了效率。
存储过程可以有0个返回值,也可以有多个返回值。
2.创建语法
create procedure 存储过程名(参数列表)
begin
存储过程体(一组合法的sql语句)
end
注意:
1、参数列表包含三部分
参数模式 参数名 参数类型 例:
IN stuname VARCHAR(20)
参数模式:
IN: 该参数可以作为输入,也就是该参数需要调用方传入值
OUT: 该参数可以作为输出,也就是该参数可以作为返回值
INOUT: 该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值。
2、如果存储过程体仅仅只有一句话,BEGIN END可以省略。
存储过程体中的每条SQI语句的结尾要求必须加分号。存储过程的结尾可以使用 DELIMITER 重新设置
语法:
DELIMITER 结束标记案 例:
DELIMITER $
我在Navicat中执行,开始和结束标记可以不加。
3.调用
call 存储过程名(实参列表);
4.示例
创建:
create procedure memo_pro(IN idParam int)
begin
select * from bms_bills_memo
where id =idParam;
end
调用:
CALL memo_pro(4);
创建:
create procedure memo1_pro(IN idParam int,IN supplierId int)
begin
declare num int default 0;
select count(*) into num from bms_bills_memo
where id =idParam and supplier_id = supplierId;
select if(num >0 ,'存在','不存在');
end
调用:
call memo1_pro(4,5);
创建:
CREATE PROCEDURE myp (IN beautwName VARCHARC(20),OUT bovName VARCHAR(20), OUT usercpINT )
BEGIN
SELECT boys.boyname ,boys .usercp INTO boyname,usercp
FROM boys
RIGHT JOINbeauty b ON b.boyfriend id = boys .idWHERE b .name=beautyName ;
END
调用:
call myp('张三',@name,@cp);
select @name,@cp;
5.删除
drop procedure 存储过程名;
6.查看
show create procedure 存储过程名;