存储过程与函数

66 阅读2分钟

创建存储

#举例1:创建存储过程select_all_date(),查看 emploees表的所有数据(空参数)

create procedure select_all_data()
begin
		SELECT * FROM employees;
end;

CALL select_all_data();
#
CREATE procedure avg_employee_salary1()
BEGIN
		SELECT AVG(salary)
		FROM employees	;	
end;

CALL avg_employee_salary1();

带OUT

#举例:创建存储过程show_min_salary(), 查看'emp'表的最低薪资, 并将最低薪资通过OUT返回

CREATE PROCEDURE show_min_salary1(OUT ms DOUBLE)
BEGIN
			SELECT MIN(salary) INTO ms
			FROM employees;
end;
#调用:
CALL show_min_salary1(@ms)
#查看变量:
SELECT @ms;
#IN
#创建存储过程show_someone_salary(),查看'emps'表的某个员工的薪资,并用in参数empname输入员工姓名
DESC employees
CREATE procedure show_someone_salary(IN empname VARCHAR(25))
BEGIN
			SELECT salary
			FROM employees
			where last_name = empname;
end;
#调用:
CALL show_someone_salary('Abel')

带 in 和 out

#创建存储过程show_someone_salary2(),查看'emps'表的某个员工的薪资,并用IN参数empname输入员工姓名,用OUT参数empsalary输出员工薪资.

CREATE PROCEDURE show_someone_salary2(IN empname VARCHAR(20),OUT empsalary DECIMAL(10,2))
BEGIN
				SELECT salary INTO empsalary
				FROM employees
				WHERE last_name = empname;
end;
#调用
SET @empname = 'Abel'
CALL show_someone_salary2(@empname,@empsalary);
#显示:
SELECT @empsalary;

带 INOUT

#创建存储过程show_mgr_name(),查询某个员工领导的姓名,并用inout参数'empname'输入员工姓名输出领导的姓名.
CREATE PROCEDURE show_mgr_name(INOUT empname VARCHAR(25))
BEGIN
			SELECT last_name
			FROM employees
			WHERE employee_id = (
					SELECT manager_id
					FROM employees
					WHERE last_name = empname
			);
			
			
end;
#调用
SET @empname = 'Abel';
CALL show_mgr_name(@empname);
#输出
SELECT @empname;

存储函数

#举例:创建一个存储函数,名称为:email_by_name,参数定义为空 #该函数查询Abel的email,并返回,数据类型为字符串型.

 CREATE FUNCTION email_by_name()
 RETURNS VARCHAR(25)
				DETERMINISTIC
				CONTAINS SQL			#(函数储存数据方式)
				READS SQL DATA
 BEGIN
			RETURN(
						SELECT email
						FROM employees
						WHERE last_name = 'Abel'
			);
 end;
 #调用
 SELECT email_by_name()