函数
自己定义的
存储过程
相对于函数可以没有返回值,存储过程存储函数预先存储在mysql的服务器上边,而且预先编译好了
存储过程:
没有参数
只有in类型(有参数无返回)
只有out类型(无参数有返回)
有in和out类型的参数(有参数有返回)
如果自己创建的时候没有指明默认就是in类型
存储过程
characteristics:指明存储过程中带的约束
language sql:指明存储过程行为的结果是否确定
sql security:指明存储过程的权限
delimit $ 代替封号表示结束
存储过程的创建
delimiter //
CREATE PROCEDURE show_max_salary()
BEGIN
SELECT MAX(salary) FROM emp;
END //
delimiter ;
存储过程的调用
CALL show_max_salary
存储过程带参数的创建调用
elimiter //
CREATE PROCEDURE show_min_salary(OUT ms DOUBLE)
BEGIN
SELECT min(salary) INTO ms
FROM emp;
END //
delimit ;
call show_min_salary(@ms);
SELECT @ms
存储过程带参数的调用2
delimiter //
CREATE procedure show_some_one_salary (IN empname VARCHAR(20))
BEGIN
SELECT salary FROM emp WHERE last_name = empname;
END //
delimiter ;
调用方式1
call show_some_one_salary(“abel”)
调用方式2
set @empname = ‘Abel’;
call show_some_one_salary(@empname);
存储过程带参数的创建与调用3
delimiter //
CREATE PROCEDURE show_someone_salary(IN empname varchar(20),OUT empsalary DECIMAL(10,2))
BEGIN
SELECT salary INTO empsalary FROM emp WHERE last_name = empname;
END //
delimiter ;
SET @empname = "abel";
call show_someone_salary (@empname,@empsalary);
SELECT @empsalary
存储过程inout3
delimiter $
CREATE procedure show_mgr_name(inout empname VARCHAR(25))
BEGIN
SELECT last_name INTO empname FROM emp
WHERE employee_id =
(SELECT manager_id FROM emp WHERE last_name = empname);
end $
delimiter ;
set @empname := "abel";
call show_mgr_name(@empname);
SELECT @empname
ps:在使用存储过程的时候由于不能调试因此错误难以排查