mysql存储过程小解
mysql 存储过程
1.创建语法
delimiter $$ --$$表示改变默认的分隔符,代表以下为存储过程,不然会以SQL的方式执行
drop procedure if exists pro_name$$ --创建存储过程之前判断是否存在,存在则先删除
create procedure pro_name(
in paramIn type(length), --IN:输入参数,不写则默认为IN,并且在存储过程不能改变值
out paramOut type(length), --Out:输出参数
inout paranInOut type(length) --InOut 输入输出参数
)
begin
...SQL...
end $$
delimiter; --恢复mysql的默认分隔符
2.mysql变量类型
<1>局部变量
存储过程中用declare声明的变量。如 Declare name varchar(100) default 'dawa';
default值可以不设置,默认为对象类型的系统默认值。
<2>用户变量
以"@"符号开头,如 set @name = 'dawa'或者在存储过程中select @name := ...
用户变量只对当前当前用户使用的客户端有效。
<3>会话变量
以"@@"符号开头,如 set @@session.name = 'dawa' 或set session name = 'dawa';
会话变量仅对连接的客户端有效。
<4>全局变量
以"@@"符号开头,如 set @@global.name = 'dawa' 或者set global name = 'dawa';
对所有客户端生效,只有super权限才可以设置global变量
declare专门用于声明局部变量,set用于设置变量值。注set设置值有两种方式 set param = value 或 set param := value;
3.常用语法
<1>if...then...elseif...then...else...end if;
示例:
DELIMITER $$
DROP PROCEDURE IF EXISTS HelloWorld$$
CREATE PROCEDURE HelloWorld (
param INT,
OUT paramout INT,
INOUT paramInOut INT
)
BEGIN
IF param MOD 3 = 0 THEN
SET paramout := param DIV 3;
SET paramInOut := param MOD 3;
ELSEIF param MOD 2 = 0 THEN
SET paramout := param DIV 2;
SET paramInOut := param MOD 2;
ELSE
SET paramout := param DIV 5;
SET paramInOut := param MOD 5;
END IF; SELECT paramout,paramInOut ;
END $$
DELIMITER ;
<2>循环:
a.LOOP...END LOOP
示例:
DELIMITER $$
DROP PROCEDURE IF EXISTS HelloWorld$$
CREATE PROCEDURE HelloWorld (param INT, OUT paramout INT)
BEGIN
DECLARE counter INT (10) ;
SET counter := param ;
SET paramout = 0 ;
my_loop :
LOOP
SET paramout := paramout + counter ;
SET counter := counter - 1 ;
IF counter <= 0
THEN LEAVE my_loop ;
END IF ;
END LOOP my_loop ;
END $$
DELIMITER ;
b.WHILE...DO...END WHILE
示例:
DELIMITER $$
DROP PROCEDURE IF EXISTS HelloWorld$$
CREATE PROCEDURE HelloWorld (param INT, OUT paramout INT)
BEGIN
DECLARE counter INT (10) ;
SET counter := param ;
SET paramout = 0 ;
WHILE
counter >= 0 DO
SET paramout := paramout + counter ;
SET counter := counter - 1 ;
END WHILE ;
END $$
DELIMITER ;
c.REPEAT...UNTIL...END REPAEAT
示例:
DELIMITER $$
DROP PROCEDURE IF EXISTS HelloWorld$$
CREATE PROCEDURE HelloWorld (param INT, OUT paramout INT)
BEGIN
DECLARE counter INT (10) ;
SET counter := param ;
SET paramout = 0 ;
REPEAT
SET paramout := paramout + counter ;
SET counter := counter - 1 ;
UNTIL counter <= 0
END REPEAT ; END $$
DELIMITER ;
<3>游标Cursor:用于查询数据批处理,cursor使用方法
declare cursor_name cursor for select...from table;
open cursor_name;
my_loop:LOOP
fetch cursor into variable;
if..then
leave my_loop;
end if;
end LOOP;
close cursor_name;
示例:
DELIMITER $$ USE `cssdj_shixi` $$ DROP PROCEDURE IF EXISTS `test` $$ CREATE DEFINER = `root` @`localhost` PROCEDURE `test` (OUT paramout VARCHAR (100))
BEGIN
DECLARE counter INT DEFAULT 0 ;
DECLARE done INT DEFAULT 0;
DECLARE notice CURSOR FOR SELECT operaName FROM g_prac_notice ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := 1;
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
START TRANSACTION;
OPEN notice ;
notice_loop :LOOP
FETCH notice INTO paramout ;
SET counter := counter + 1 ;
IF done = 1 OR counter = 1 THEN
LEAVE notice_loop;
END IF;
END LOOP notice_loop ;
CLOSE notice ;
COMMIT;
SELECT paramout,done,counter;
END $$ DELIMITER ; 4.异常处理
<1>语法:
DECLARE
CONTINUE -- 继续
|EXIT -- 退出
|UNDO -- 撤回,暂不支持
HANDLER
FOR
mysql_error_code -- mysql对应的错误代码
|SQLSTATE[VALUE] sqlstate_value -- SQLState标准错误代码
|condition_name -- 自定义异常
|SQLWARNING -- SQLSTATE中以"01"开头的异常,默认继续执行
|NOT FOUND -- SQLSTATE中以"01"开头的异常,默认继续执行
|SQLEXCEPTION -- SQLSTATE中不是以"00","01","02"开头的其他异常
statement -- 执行语句:如 set done = 1; condition_name:mysql_error_code及sqlstate_value值阅读性比较差
示例:
#原来的
DECLARE CONTINUE HANDLER FOR 1216 statement;
#改变的
DECLARE foreign_key_error CONDITION FOR 1216 ;
DECLARE CONTINUE HANDLER FOR foreign_key_error statement; <2>示例:
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := 1;
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
mysql存储过程小解的更多相关文章
- Oracle存储过程小解
Oracle存储过程小解 1.创建语法 create or replace procedure pro_name( paramIn in type, paramOUt out type, paramI ...
- MySQL存储过程(转)
一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b" ...
- MySql存储过程
MySQL 存储过程 ```sql CREATE PROCEDURE myprocedure (IN para01 INTEGER) BEGIN DECLARE var01 CHAR(10); IF ...
- mysql存储过程和存储函数
mysql存储过程和存储函数 存数函数代码示例: DROP PROCEDURE IF EXISTS calc_ci_day_suc_rate; delimiter // CREATE FUNCTION ...
- mysql存储过程编写-入门案例-遁地龙卷风
(-1)写在前面 这篇文章只是简要的叙述了mysql存储过程编写的基本概念. 我使用的mysql版本是5.7.9-log. 参照<<深入浅出MySQL>>. (0) delim ...
- MySQL存储过程动态SQL语句的生成
用Mysql存储过程来完成动态SQL语句,使用存储过程有很好的执行效率: 现在有要求如下:根据输入的年份.国家.节假日类型查询一个节假日,我们可以使用一般的SQL语句嵌入到Java代码中,但是执行效率 ...
- MySQL 存储过程
MySQL 存储过程 存储过程是通过给定的语法格式编写自定义的数据库API,类似于给数据库编写可执行函数. 简介 存储过程是一组为了完成特定功能的SQL语句集合,是经过编译后存储在数据库中. 存储过程 ...
- mysql存储过程详解
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- PHP调用MYSQL存储过程实例
PHP调用MYSQL存储过程实例 标签: mysql存储phpsqlquerycmd 2010-09-26 11:10 11552人阅读 评论(3) 收藏 举报 实例一:无参的存储过程$conn = ...
随机推荐
- Joomla 随记
使用 joomla 开发好几个网站了,记录一下基础的东西吧~ 一.下载: 进入 joomla官网 下载: 二.安装 Joomla: 把下载好的 joomla 放到网站文件夹(图为wamp阿帕奇服务 ...
- java类增强方式
我理解的增强类即是对类进行功能性扩展,除了网上常规的3种方法( 1.继承或者实现接口:特点是被增强对象不能变,增强的内容不能变. 2.装饰着模式:特点是被增强对象可变,但增强内容不可变. 3.动态代理 ...
- js判断两个对象是否相等
function isObjectValueEqual(a, b) { if(typeof a == 'number' && typeof b == 'number'){ return ...
- VMware 设置支持UEFI
修改后缀名为 vmx 配置文件 添加行: bios.bootDelay = "10000" //延迟10秒进入系统 firmware = "efi" ...
- 2019-8-31-HttpRepl-互操作的-RESTful-HTTP-服务调试命令行工具
title author date CreateTime categories HttpRepl 互操作的 RESTful HTTP 服务调试命令行工具 lindexi 2019-08-31 16:5 ...
- 跟我一起做一个vue的小项目(四)
接下来我们进行的是轮播页面下面的导航页的开发 我们需要的是实现轮播页下面的图标,并且实现轮播效果 这个话,其实基本思路先是渲染出小图标,然后,我们要对页数进行判断,如果图标的个数展示的就是8个,那个这 ...
- ASP.NET Core修改IOC为Autofac
如下是我为了了解如何更换ASP.NET Core中的IOC而查找的文章,如果大家英文OK的,可以直接前往阅读,同时也已经有简单的github例子供大家参考. 参考文章: ASP.NET Core文档: ...
- TZ_16ES6学习总结
1.块级作用域的引入 在ES6之前,js只有全局作用域和函数作用域,ES6中let关键字为其引入了块级作用域. { var a = 5; let b = 6; } console.log(a); // ...
- java开发岗位面试整理
一.Java基础 1. String类为什么是final的 2. HashMap的源码,实现原理,底层结构. 3. 说说你知道的几个Java集合类:list.set.queue.map实现类. 4. ...
- Vue.之.项目开发工具选用
Vue.之.项目开发工具选用 上篇文章记录了创建项目,这篇文件记录,如何对创建的项目进行开发.这里选择一个工具:Visual Studio Code (请自行下载安装) 1. 打开VSCode工具,并 ...