#一。存储过程和存储函数的创建案例

CREATE PROCEDURE myprocedure(in a int,in b int ,OUT c INT)
BEGIN
set c=a+b;
end;

call myprocedure(1,2,@num);#存储过程需要call 来执行 @num 这个是执行的结果,我们通过select 来调用

SELECT @num;

CREATE FUNCTION myfunction(a INT) RETURNS INT(2)#RETURNS 要返回的类型
BEGIN
set a=a+1;
RETURN a;
end;

SELECT myfunction(2)+@num;

#二。变量的使用
#通用公式 :DECLARE 变量名称 变量类型 DEFAULT 默认值 (如果不写DEFAULT,则默认值为NULL)
#给变量赋值用set 或者select ... into 变量名

CREATE FUNCTION myfunction2(a INT) RETURNS INT(2)#RETURNS 要返回的类型
BEGIN
DECLARE b INT DEFAULT 100;
set a=b+1;
RETURN a;
end;
SELECT myfunction2(3);

SELECT myfunction(2),+@num;

CREATE FUNCTION myfunction3(a INT) RETURNS INT(2)
BEGIN
#相同的变量可以写在一起
# b,c,d为局部变量
DECLARE b,c,d INT DEFAULT 100;
set a=b+c+d;
RETURN a;
end;
SELECT myfunction3(2);
#三。定义条件和处理程序

#mysql 存储函数和过程可以将错误 变成我们想要的处理结果分2步骤

#1.定义错误条件 语法:DECLARE 条件名字 CONDITION for 错误编码
#2. 定义错误执行程序: DECLARE 类型(EXIT,CONTINUE)HANDLER for 条件名字 set @info='定义的含义';

CREATE TABLE contest(s1 int,PRIMARY KEY(s1));

CREATE PROCEDURE myprocedure2()
BEGIN
DECLARE myfirstcon CONDITION for 1062;
DECLARE CONTINUE HANDLER for myfirstcon set @info='主键冲突';
INSERT INTO contest VALUES(1);
INSERT INTO contest VALUES(1);
set @info='主键冲突1';
end;

call myprocedure2();
SELECT @info
# @info为用户变量

#备注:

-- 1. 局部变量:局部变量一般用在sql语句块中,比如存储过程的begin/end。
--
--   2. 用户变量:用户变量的作用域要比局部变量要广。用户变量可以作用于当前整个连接,但是当当前连接断开后,其所定义的用户变量都会消失。
--
--   3. 会话变量:服务器为每个连接的客户端维护一系列会话变量。(SET @num=1; #设置一个变量等于1 SELECT @num; #查询该变量)
--
--   4. 全局变量:全局变量影响服务器整体操作。当服务器启动时,它将所有全局变量初始化为默认值(可以通过@@或global来操作系统变量)

#四。光标的使用

#声明光标 语法:DECLARE 光标名字 CURSOR FOR sql语句

#打开光标 OPEN 光标名称

#使用光标 FETCH 光标名称 into 。。。

#关闭光标 CLOSE 光标名称

CREATE PROCEDURE guangbiao()
BEGIN
DECLARE a VARCHAR(20);
DECLARE c VARCHAR(20);
DECLARE b int DEFAULT 0;
DECLARE myguangbiao CURSOR for SELECT title,body from 测试.articless;
DECLARE CONTINUE HANDLER for not FOUND set b=1;
OPEN myguangbiao;

read_loop:
LOOP
FETCH myguangbiao into a,c;
IF b=1 THEN
LEAVE read_loop;
end IF;
INSERT into 测试.aaa(text1,text) VALUES(a,c);
set b=0;
END LOOP read_loop;
CLOSE myguangbiao;
END;

call guangbiao();

#五。流程控制的使用

#1.IF 使用

create PROCEDURE iftest1()
BEGIN
DECLARE a int DEFAULT 10;
-- IF (a>1 &&a<20) THEN
IF (a>1 and a<20) THEN
SELECT 'ok';
ELSE SELECT 'No';
END IF;
END;
CALL iftest();

#2.case 使用

create PROCEDURE casetest()
BEGIN
DECLARE a int DEFAULT 10;
CASE a
WHEN a>10 then SELECT 'no';
WHEN 10 then SELECT 'ok';
ELSE SELECT 'nono';
end CASE;
END;
CALL casetest();
#3.loop 使用

CREATE PROCEDURE looptest()
BEGIN
DECLARE a int DEFAULT 0;
DECLARE b int DEFAULT 0;
my_loop:LOOP
set a=a+1;
if a>10 THEN LEAVE my_loop;
END if;
set b=a;

END LOOP my_loop;
SELECT b;

end;

CALL looptest();

#4.LEAVE 使用 跳出当前循环见上个测试用例 looptest相当于java循环中的break

#5.ITERATE 使用,跳转到循环头部执行,相当于java循环中的continue,ITERATE只能 使用在循环中

CREATE PROCEDURE ITERATEtest()
BEGIN
DECLARE a int DEFAULT 0;
DECLARE b int DEFAULT 0;
my_loop:LOOP
set a=a+1;
if a>10 THEN LEAVE my_loop;
ELSEIF a>5 THEN ITERATE my_loop;
END if;
set b=a;

END LOOP my_loop;
SELECT b;

end;

CALL ITERATEtest();

#6.REPEAT 带条件的循环

CREATE PROCEDURE REPEATtest()
BEGIN
DECLARE a int DEFAULT 0;
REPEAT
set a=a+1;
UNTIL a>10
END REPEAT;
SELECT a;
END;

CALL REPEATtest();
#7.WHILE 带条件的循环

CREATE PROCEDURE WHILEtest()
BEGIN
DECLARE a int DEFAULT 0;

WHILE a<10 DO
set a=a+1;
END WHILE;
SELECT a;

END;

CALL WHILEtest()

#查看存储过程和函数 状态和信息

show PROCEDURE STATUS like 'casetest%';
show CREATE FUNCTION 测试.myfunction;
show CREATE PROCEDURE 测试.casetest;

mysql 存储过程学习(总)的更多相关文章

  1. MySQL存储过程学习笔记

    MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.MySQL 5.0终于开始支持存储过程了. MySQL的关键字大小写通用.该学习笔记对关键字使用大写:变量名,表名使用小写. ...

  2. MySql存储过程学习总结

    创建存储过程 1.格式   MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程参数[,...]]),举个例子: CREATE PROCEDURE proc1 (OUT s ...

  3. mysql存储过程学习(一)

    转载 什么是存储过程,存储过程的作用及优点  mysql存储过程详细教程  mysql 使用存储过程批量插数据 一.存储过程介绍: 存储过程(Stored Procedure)是一组为了完成特定功能的 ...

  4. mysql存储过程学习

    一.存储过程的创建 语法: CREATE PROCEDURE sp_name (参数)合法的SQL语句 mysql> delimiter // mysql> CREATE PROCEDUR ...

  5. MySQL 存储过程学习笔记

    存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...

  6. mysql存储过程学习第一天

    摘要:存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存储过程和函数是在 ...

  7. mysql 存储过程学习

    存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...

  8. mysql 存储过程学习 汇总

    存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...

  9. mysql存储过程--学习

    -- 存储过程示例一   inDROP DATABASE IF EXISTS tdemo;CREATE DATABASE tdemo CHARACTER SET=utf8; USE tdemo;CRE ...

随机推荐

  1. python学习(二十五) 链表方法

    # 链表 cars = ['a', "b"] print(cars) # 链表长度 print(len(cars)) # 结尾添加元素 cars.append("c&qu ...

  2. node+express+ejs搭建一个简单的"页面"

    1.建立工程文件夹my_ejs. 2.首先利用npm install express和npm install ejs 下载这两个家伙.至于要不要设置成全局的,看习惯,我习惯性的下载到本项目中的文件夹中 ...

  3. 3_python之路之商城购物车

    python之路之商城购物车 1.程序说明:Readme.txt 1.程序文件:storeapp_new.py userinfo.py 2.程序文件说明:storeapp_new.py-主程序 use ...

  4. eclipse项目推送git

    引用:http://blog.csdn.net/zongzhankui/article/details/48653731

  5. Tkinter Checkbutton

    Python - Tkinter Checkbutton: checkbutton小部件用于显示切换按钮的用户多项选择.然后,用户可以通过点击相应的按钮每个选项中选择一个或多个选项.   checkb ...

  6. nginx 1.12 配置解析php

    server { listen 80; server_name foo.com; root /path; index index.html index.htm index.php; location ...

  7. 使用EXCEL绘制三维地图(超简单的五分钟绘制地图方法,妈妈再也不用担心我不会画地图啦~)

    博主为从区域规划转行地图学的小学渣一枚,最近处理数据希望对结果进行三维可视化,意外发现从小用到大的EXCEL可以绘制地图且功能非常强大,在这里做一下简单介绍,希望可以给看官提供些许帮助.那下面就开始吧 ...

  8. Bootstrap 与 Jquery validate 结合使用——简单实现

    首先必须引入的JS和CSS <script type="text/javascript" src="${ctx}/static/js/jquery-1.9.1.mi ...

  9. PHP 缓存插件之 Zend Opcache ( 取代 APC )

    简介: Zend Opcache .APC 这都是 PHP 代码加速器,将 PHP 源代码的编译结果缓存起来,再次调用时对比时间标记,如果没有改变则使用缓存数据,免去再次解析代码的开销. APC 止步 ...

  10. Mysql 5.6 源码编译安装

    简介: 多余的话不说,就是源码安装 Mysql 5.6 ,机器内存 512 MB ,系统 CentOS 6.6 ,安装方式 minimal ! 1.安装底层支持包 shell > yum -y ...