zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    总结一下最近用过的phpcms语法
    phpcms和php格式化时间戳
    为什么使用bootstrap在一个页面同时做两个轮播效果时,只有第一个有效??
    Jquery右击显示菜单事件,运用smartMenu插件。
    流程管理
    权限管理
    文件管理的练习(目录文件的打开,双击返回上一层目录、双击打开子目录文件)
    php部分--文件操作
    php部分--头像上传预览
    PHP部分--图片上传服务器、图片路径存入数据库,并读取
  • 原文地址:https://www.cnblogs.com/dshore123/p/10559182.html
Copyright © 2011-2022 走看看