PROCEDURE 存储过程
1. 存储过程的理解
缺点:不建议系统里使用,因为不好调试。但可以用做自定义报表
2. 创建、调用存储过程
#2.1 创建存储过程(注意:写存储过程时候,SQL前不要有空格,不然在创建的时候(全部选中)执行会报语法错误)
#方式1 无参数 无返回值
DELIMITER $
CREATE PROCEDURE pro_select_all_employee()
BEGIN
SELECT * FROM employee;
END $
DELIMITER ;
或者
DELIMITER //
CREATE PROCEDURE pro_select_all_count()
BEGIN
SELECT * FROM employee;
END //
DELIMITER ;
#调用
CALL pro_select_all_employee();
#方式2 OUT参数 DELIMITER $ CREATE PROCEDURE pro_max_salary(OUT maxSalary DOUBLE(10, 2)) BEGIN SELECT MAX(salary) INTO maxSalary FROM employee; END $ DELIMITER; #调用 CALL pro_max_salary(@sal); SELECT @sal;
#方法3 IN参数 DELIMITER $ CREATE PROCEDURE pro_employee_salary(IN employee_name VARCHAR(20)) BEGIN SELECT * FROM employee WHERE NAME = employee_name; END $ DELIMITER; #调用1 CALL pro_employee_salary('frank'); #调用2 SET @employee_name = 'frank'; CALL pro_employee_salary(@employee_name);
SET @employee_name2 := 'frank';
CALL pro_employee_salary(@employee_name2);
#方法4 IN + OUT参数 DELIMITER // CREATE PROCEDURE pro_employee_salary2(IN employee_name VARCHAR(20), OUT salary2 DOUBLE(10, 2)) BEGIN SELECT salary INTO salary2 FROM employee WHERE NAME = employee_name; END // DELIMITER; #调用 SET @employee_name = 'frank'; CALL pro_employee_salary2(@employee_name, @salary2); SELECT @salary2;
#方法5 INOUT参数 DELIMITER // CREATE PROCEDURE pro_employee_name(INOUT empname VARCHAR(25)) BEGIN SELECT NAME INTO empname FROM employee WHERE NAME = empname; END // DELIMITER ; #调用 SET @empname := 'frank'; CALL pro_employee_name(@empname); SELECT @empname;

浙公网安备 33010602011771号