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;

 3. 存储过程的查看、修改、删除 (同理,查看存储函数文章)

posted @ 2024-09-30 15:23  字节虫  阅读(4)  评论(0)    收藏  举报