Mysql的 存储过程(procedure)

什么是存储过程

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名字和参数(如果有)来执行它。存储过程可以在很多数据库管理系统(DBMS)中找到,如SQL Server、Oracle、MySQL等。

存储过程的好处:

  1. 代码重用:存储过程允许你编写一次代码,然后在多个地方重复使用。
  2. 简化操作:对于复杂的数据库操作,可以将这些操作封装在存储过程中,用户只需调用存储过程即可。
  3. 提高性能:存储过程在首次执行时会进行编译和优化,后续的调用会重用这些编译后的代码,从而提高性能。
  4. 安全性:通过存储过程,你可以限制对基础表的直接访问,只允许通过预定义的、受控的接口进行访问。
  5. 集中管理:所有的数据库操作逻辑都存储在数据库中,使得管理和维护更加容易

使用存储过程需要注意的是 :

1. declare语句只能放在存储过程的开始位置,放在后面就会报错 
2. if 语句的后面必须有then,但是不需要begin,在if结束时需要end if 
3. 判断是否为NULL倒是和MSSQL一样都有IS NULL 
4. delimiter是定界符的意思在结束的end后面要添加定界符 
5. end if之后必须跟分号,否则语法错误 
6. while后面跟条件,条件后面要跟一个do,在while循环体结束之后需要end while并以分号结束。
7. in 表入参(默认) , out 表出参 , inout 表出入参
8. 两种赋值方式: set ,select into
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
SET a = 0;

具体案例:

1. 基本案例

--  代码
DELIMITER $$
CREATE PROCEDURE test1(IN ss VARCHAR(100))
BEGIN

   SELECT ss ;
END $$
-- 调用
SET @s1 = '你好' ;
CALL test1(@s1) ;
-- 

2. 带出参案例

--  代码

DELIMITER $$
CREATE PROCEDURE testproce(IN score INT,OUT rs VARCHAR(200))
BEGIN
   DECLARE sc INT;
   SET sc = score ;
   IF sc < 0 OR sc > 100 THEN
      SET rs = 'score error';
   ELSEIF sc > 80 THEN
      SET rs = 'A';
   ELSEIF sc > 60 THEN
      SET rs = 'B';
   ELSE
      SET rs = 'C';
   END IF ;
END $$

-- 调用
SET @a1 =60;
SET @a2 = '';
CALL testproce(@a1,@a2);
SELECT @a2 ;
-- 

3.while的简单应用

--  代码
 

DELIMITER $$
CREATE PROCEDURE proc_add_looply(IN $className VARCHAR(200),INOUT $insertTimes INT)
BEGIN
    WHILE $insertTimes>0 DO
        INSERT INTO classes VALUES(DEFAULT,$className);
        SET $insertTimes = $insertTimes - 1 ;
    END WHILE;
    COMMIT;
END $$

-- 调用
SET @lp_1 = '班' ;
SET @lp_2 = 5 ;
CALL proc_add_looply(@lp_1,@lp_2);

--

4.用数据库中的数据赋值

--  代码

DELIMITER $$
CREATE PROCEDURE show_job_dept(IN no2 INT,OUT job2 VARCHAR(100),OUT dno2 INT)
BEGIN
    SELECT job,deptno INTO job2,dno2 FROM emp WHERE EMPNO = no2;
END $$

-- 调用
SET @sjd_1 = 7369;
SET @sjd_2 = '';
SET @sjd_3 = 0;
CALL show_job_dept(@sjd_1,@sjd_2,@sjd_3);
SELECT @sjd_2 ;
SELECT @sjd_3 ;
--

相关推荐

  1. Mysql 存储过程procedure

    2024-06-10 15:10:01       31 阅读
  2. MySQL-存储过程PROCEDURE

    2024-06-10 15:10:01       43 阅读
  3. MySQL存储过程

    2024-06-10 15:10:01       41 阅读
  4. mysql触发器,存储过程

    2024-06-10 15:10:01       44 阅读
  5. MySQL视图、存储过程、触发器

    2024-06-10 15:10:01       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-10 15:10:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-10 15:10:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-10 15:10:01       82 阅读
  4. Python语言-面向对象

    2024-06-10 15:10:01       91 阅读

热门阅读

  1. python使用关联规则来分析数据

    2024-06-10 15:10:01       40 阅读
  2. 【蓝桥杯】C语言常见高级算法

    2024-06-10 15:10:01       36 阅读
  3. 【leetcode】hot100 哈希表

    2024-06-10 15:10:01       41 阅读
  4. C-Linux: 题集

    2024-06-10 15:10:01       30 阅读
  5. 【DevOps】开源的sd-wan软件介绍和对比分析

    2024-06-10 15:10:01       36 阅读
  6. 词向量对模型performance的影响

    2024-06-10 15:10:01       34 阅读
  7. Linux磁盘与文件系统管理

    2024-06-10 15:10:01       28 阅读
  8. 需求记录(共享元素)

    2024-06-10 15:10:01       51 阅读
  9. Vue3 组合式 API:依赖注入(四)

    2024-06-10 15:10:01       28 阅读
  10. 贪心算法03(leetcode1005,134,135)

    2024-06-10 15:10:01       37 阅读
  11. web前端三大主流框架

    2024-06-10 15:10:01       30 阅读
  12. C++中的if constexpr

    2024-06-10 15:10:01       31 阅读