0


存储过程(SQL)

1.存储过程

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

2.MySQL存储过程创建

1.语法
  1. #创建存储过程
  2. CREATE PROCEDURE 存储过程名 ([[IN|OUT|INOUT]] 参数名 数据类型) 过程体;
  3. #删除存储过程
  4. DROP PROCEDURE IF EXISTS 存储过程名;
  1. #删除存储过程
  2. DROP PROCEDURE IF EXISTS adduser;
  3. #创建存储过程
  4. CREATE PROCEDURE adduser(num DOUBLE)
  5. BEGIN
  6. UPDATE `user` SET money = money - num WHERE name = '张三';
  7. UPDATE `user` SET money = money + num WHERE name = '李四';
  8. END;
2.过程体
  1. BEGIN
  2. 过程体
  3. END;
  4. 过程体每条SQL语句用';'隔开
3.参数
  1. IN
  2. 不管存储过程里面的参数怎么改变,都不影响外部变量。
  3. OUT
  4. 不管参数传入之前的定义是什么,在存储过程中都为null
  5. 存储过程里面对参数的改变,都会影响外部变量。
  6. INOUT
  7. 参数在外部定义后,会将定义的变量传入。
  8. 存储过程里面对参数改变,都会影响外部的变量。
  1. #IN0
  2. CREATE PROCEDURE add2(IN num INT(20))
  3. BEGIN
  4. SET num = 111;
  5. SELECT num;
  6. END;
  7. SET @a = 123;
  8. CALL add2(@a);
  9. SELECT @a;

  1. #OUT
  2. CREATE PROCEDURE add3(OUT num INT(20))
  3. BEGIN
  4. SELECT num;
  5. SET num = 111;
  6. END;
  7. SET @a = 123;
  8. CALL add3(@a);
  9. SELECT @a;

  1. #INOUT
  2. CREATE PROCEDURE add3(INOUT num INT(20))
  3. BEGIN
  4. SELECT num;
  5. SET num = 111;
  6. SELECT num;
  7. END;
  8. SET @a = 123;
  9. CALL add3(@a);
  10. SELECT @a;

4.变量
  1. 使用 DECLARE 定义变量(只能在存储过程、函数或触发器中使用)。
  2. 变量赋值:
  3. 1.使用 DEFAULT 默认赋值。
  4. 2.使用 SET 赋值。
  5. 3.使用 SELECT...INTO... 赋值。
  1. DROP PROCEDURE IF EXISTS add1;
  2. CREATE PROCEDURE add1()
  3. BEGIN
  4. #默认值
  5. DECLARE a INT(20) DEFAULT 1;
  6. DECLARE b INT(20);
  7. DECLARE c VARCHAR(255);
  8. #使用set为变量赋值
  9. SET b = 2;
  10. SELECT a;
  11. SELECT b;
  12. #使用SELECT...INTO...为变量赋值
  13. SELECT name INTO c FROM user WHERE id = 1;
  14. SELECT c;
  15. END;
  16. CALL add1();
  1. 用户变量:
  2. 用于在 SQL 语句和存储过程之间传递数据。
  3. 用法:
  4. @变量名
  5. 在使用用户变量之前,最好先初始化它,否则它的值将是 null
  6. 变量作用域:
  7. 内部变量在其作用域范围内享有更高的优先权,当执行到end时,内部变量消失,不再可见了,在存储过程外再也找不到这个内部变量,但是可以通过out参数或者将其值指派给会话变量来保存其值。
5.调用存储过程
  1. CALL 存储过程名;
6.分隔符
  1. MySQL默认以";"为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错。所以要事先用 "DELIMITER //" 声明当前段分隔符,让编译器把两个 "//" 之间的内容当做存储过程的代码,不会执行这些代码。"DELIMITER ;" 的意为把分隔符还原。

3.MySQL存储过程的控制语句

1.条件语句
  1. IF-THEN-ELSE语句:
  1. IF 条件 THEN
  2. SQL语句;
  3. END IF;
  1. CREATE PROCEDURE methods()
  2. BEGIN
  3. DECLARE a INT;
  4. SET a = 1;
  5. IF a = 1 THEN
  6. SELECT a;
  7. END IF;
  8. END;
  9. CALL methods();
  1. CASE-WHEN-THEN-ELSE语句:
  1. CASE 变量名
  2. WHEN 1 THEN
  3. SQL语句;
  4. WHEN 2 THEN
  5. SQL语句;
  6. ELSE
  7. SQL语句;
  8. END CASE;
  1. CREATE PROCEDURE methods()
  2. BEGIN
  3. DECLARE a INT;
  4. SET a = 1;
  5. CASE a
  6. WHEN 0 THEN
  7. SELECT '0',a;
  8. WHEN 1 THEN
  9. SELECT '1',a;
  10. ELSE
  11. SELECT '---',a;
  12. END CASE;
  13. END;
  14. CALL methods();
2.循环语句
  1. WHILE-DO...END-WHILE语句:
  1. WHILE 条件 DO
  2. SQL语句;
  3. END WHILE;
  1. CREATE PROCEDURE methods()
  2. BEGIN
  3. DECLARE a INT DEFAULT 0;
  4. WHILE a<5 DO
  5. INSERT INTO user (name,money) VALUES ('李明',1000);
  6. SET a=a+1;
  7. END WHILE;
  8. END;
  9. CALL methods();
标签: sql 数据库

本文转载自: https://blog.csdn.net/m0_71192988/article/details/143189021
版权归原作者 一撮不知名的呆毛 所有, 如有侵权,请联系我们删除。

“存储过程(SQL)”的评论:

还没有评论