Mysql存储过程

Mysql存储过程

-- 删除存储过程
DROP PROCEDURE IF EXISTS `pro`;

-- 修改结束符
DELIMITER //
-- 存储过程过程
CREATE PROCEDURE `pro` (IN a INT, IN b INT, OUT c INT)
-- 开始存储过程
BEGIN

-- 定义循环结束标识符
DECLARE Done INT DEFAULT 0;
-- 定义变量
DECLARE VAR_NAME, VAR_ADD VARCHAR(50);
-- 定义光标(并使用参数)
DECLARE CUR_USER CURSOR FOR SELECT USERNAME, ADDRESS FROM USER LIMIT a, b;
-- 发生异常设置结束符, 02000 = [输入, 更新, 删除, FETCH最后一行]
-- 出现错误也继续执行
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done = 1;

SET 

-- 打开游标
OPEN CUR_USER;

-- 执行循环
loop1: LOOP
    -- 获得一行
    FETCH CUR_USER INTO VAR_NAME, VAR_ADD;
    -- 判断是否还有最后一行
    IF Done = 1 THEN
        LEAVE loop1;
    END IF;
    -- 查询变量(返回一个结果集)
    SELECT VAR_NAME, VAR_ADD, 'k';

END LOOP loop1;

-- 关闭游标
CLOSE CUR_USER;

-- 设置返回值参数c
SET c = a + b;

-- 结束存储过程
END //
-- 修改结束符
DELIMITER ;

----------------------------------------------------

set @a = 1  -- 定义变量
set @c = 0  -- 定义变量
call pro(@a, 10, @c) -- 执行存储过程
select @c; -- 显示@c变量

MySQL 中直接用 select 即可返回结果集。
而 Oracle 则需要使用游标来返回结果集。
这一点 Mysql 相对比较方便

Java jdbc执行存储过程

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java_spring?useUnicode=true&characterEncoding=UTF-8", "root", "wjjyy");

CallableStatement call = conn.prepareCall("{call pro(?,?,?)}");
call.setInt(1, 1);
call.setInt(2, 10);

boolean execute = call.execute();
// 获得返回值
System.out.println("a + b : " + call.getInt(3));

while (execute){
    ResultSet resultSet = call.getResultSet();
    while(resultSet.next()){
        System.out.println(resultSet.getString(1) + ":" + resultSet.getString(2));
    }
    resultSet.close();
    System.out.println("------------------------");
    execute = call.getMoreResults();
}

call.close();
conn.close();

MySql 存储过程详情

循环

LOOP循环
名: LOOP 
命令 
    LEAVE 名   -- back
    ITERATE 名 -- continue 
END LOOP
REPEAT循环
名: REPEAT 
命令 
    UNTIL 退出条件 
END REPEAT
WHILE循环
名: WHILE 继续循环条件 DO 
命令 
END WHILE

判断

IF 条件 THEN 命令
   [ELSEIF 条件 THEN 命令] ... 
   [ELSE 命令] 
END IF 

分支

CASE 值
WHEN 何值 THEN 命令 
    [WHEN 何值 THEN 命令] ... 
    [ELSE 命令] 
END CASE 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值