Java基础89 MySQL存储过程

1、MySQL存储过程    

  1.1、什么是存储过程

      带有逻辑的sql语句;带有流程控制语句(if  while)等等 的sql语句

  1.2、存储过程的特点

      1)执行效率非常快,存储过程是数据库的服务器端执行的。
      2)移植性很差,不同数据库的存储过程是不能移植的。

2、存储过程的语法    

-- 创建存储过程
1
DELIMITER $  -- 声明存储过程的结束符 2 CREATE PROCEDURE pro_test() -- 创建存储过程 存储过程的名称(参数列表) 3 BEGIN  -- 开始
4 5     -- 这中间可以写多个sql语句     -- sql语句+流程控制等 6   7 END $ -- 结束 结束符
1 --执行存储过程
2 CALL pro_test(); -- call存储过程的名称(参数)
1 -- 存储过程名称里面的参数:
2 IN :表示输入参数,可以携带数据存储过程中
3 OUT:表示输出参数,可以从存储过程中返回结果
4 INOUT:表示输入输出参数,既可以输入功能,也可输出功能
-- 删除存储过程
1 DROP PROCEDURE pro_test; -- 删除存储过程  存储过程的名称;

3、实例演示          

  3.1、带有参数的存储过程           Java代码调用存储过程的方法:https://www.cnblogs.com/dshore123/p/10582283.html

1 -- 需求:传入一个员工的id,查询员工的信息
2 DELIMITER $
3     CREATE PROCEDURE pro_findById(IN eid INT) -- IN: 输入参数; eid:传入参数的名称; int:传入参数的类型
4 BEGIN
5     SELECT * FROM employee WHERE id = eid;
6 END $
7 
8 -- 调用 
9 CALL pro_findByID(4)

调用pro_findByID() 后的结果图

         

  3.2、带有输出参数的存储过程

 1 -- 带有输出参数的存储过程
 2 DELIMITER $
 3    CREATE PROCEDURE pro_test_out(OUT str VARCHAR(20))  -- out:输出参数
 4 BEGIN
 5    -- 给参数赋值
 6    SET str = 'helloMySQL';
 7 END $
 8 
 9 CALL pro_test_out(@NAME); -- 调用pro_test_out存储过程
10 SELECT @NAME; -- 查询pro_test_out存储过程
11 
12  -- 如何返回接收的返回数值
13  -- ****mysql的变量******
14  -- 全局变量(内置变量):mysql数据库中内置的变量(所有连接都起作用)
15  -- 查看所有的全局变量:show variables;
16  -- 查看某个全局变量:select @@变量名
17  -- 修改全局变量:set 变量名 = 新值
18  
19  -- 会话变量:只存在于当前客户端与数据库的一次连接当中;如果断开,那么会话变量将全部失效(丢失)。
20  -- 定义会话变量: set @变量 = 值;
21  -- 查看会话变量: select @变量;
22  -- character_set_client: 服务器的接收编码
23  -- character_set_results: 服务器的输出编码
24    
25  -- 局部变量:在存储过程中使用的变量就叫局部变量;只要存储过程执行完毕,局部变量就丢失。
26  

结果图

  3.3、带有输入输出参数的存储过程

 1 -- 带有输入输出参数的存储过程
 2 DELIMITER $
 3    CREATE PROCEDURE pro_test_InOut(INOUT n INT)  -- INOUT: 输入输出参数
 4 BEGIN
 5    -- 查看变量
 6    SELECT n;
 7    SET n=500;    
 8 END $
 9 
10 -- 调用
11 SET @n=10;
12 CALL pro_test_InOut(@n);
13 SELECT @n;

结果图

         

  3.4、带有条件判断存储过程

 1 -- 需求:输入一个整数,如果是1,则返回'星期一';如果是2,则返回'星期二';如果是3,则返回'星期三'。如果是其他,则返回'输入有误'
 2 DELIMITER $
 3   CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(32))
 4 BEGIN
 5    IF num=1 THEN
 6       SET str = '星期一';
 7    ELSEIF num = 2 THEN
 8       SET str = '星期二';
 9    ELSEIF num = 3 THEN
10       SET str = '星期三';
11    ELSE
12       SET str = '输入错误';
13    END IF;
14 END $
15 
16 CALL pro_testIf(3,@str);
17 SELECT @str;

结果图

  3.5、带有循环功能的存储过程

 1 -- 需求:输入一个整数,求和。例如:输入100 ,统计1~100的和
 2 DELIMITER $
 3    CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT)
 4 BEGIN
 5     -- 定义一个局部变量  for(int i=1;i<=100;i++)
 6     DECLARE i INT DEFAULT 1; -- 定义一个局部变量i,int类型,默认值为1。
 7     DECLARE vsum INT DEFAULT 0; -- 定义一个局部变量vsum,int类型,默认值为0。
 8     WHILE i <= num DO
 9        SET vsum = vsum + i;
10        SET i = i + 1;
11     END WHILE;
12     SET result = vsum;    
13 END $
14 
15 CALL pro_testWhile(100,@result);
16 SELECT @result;

结果图

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/10559182.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

原文地址:https://www.cnblogs.com/dshore123/p/10559182.html