Mysql存储过程

来源:互联网 发布:淘宝优惠券转换 编辑:程序博客网 时间:2024/05/16 18:11

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;-- 设置返回值参数cSET 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
原创粉丝点击