mysql存储过程--学习
-- 存储过程示例一 in
DROP DATABASE IF EXISTS tdemo;
CREATE DATABASE tdemo CHARACTER SET=utf8;
USE tdemo;
CREATE TABLE temp2(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
nodename VARCHAR(10)
)ENGINE=INNODB DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci;
DELIMITER $$
USE tdemo $$
DROP PROCEDURE IF EXISTS pro_demo1 $$
CREATE PROCEDURE pro_demo1(IN tid INT)
BEGIN
SELECT tid;
SELECT * FROM temp2 WHERE id=tid;
END $$
CALL pro_demo1(1);
-- 存储过程示例 out
DELIMITER $$
USE tdemo $$
DROP PROCEDURE IF EXISTS pro_demo2 $$
CREATE PROCEDURE pro_demo2(OUT tnodename VARCHAR(10))
BEGIN
DECLARE tname VARCHAR(10);
SET tname = 'tl';
SELECT nodename INTO tnodename FROM temp2 WHERE id=1;
SELECT tnodename;
SET tnodename=CONCAT(tname,tnodename);
SELECT tname;
SELECT tnodename;
END $$
CALL pro_demo2(@name);
SELECT @name;
-- 存储过程示例 in+out
DELIMITER $$
USE tdemo $$
DROP PROCEDURE IF EXISTS pro_demo3 $$
CREATE PROCEDURE pro_demo3(IN tid INT,OUT tnodename VARCHAR(10))
BEGIN
DECLARE tname VARCHAR(10) DEFAULT 'tl';
SELECT nodename INTO tnodename FROM temp2 WHERE id=tid;
SET tnodename = CONCAT(tname,tnodename);
SELECT tnodename;
SET tname = 'll';
SET tnodename = CONCAT(tname,tnodename);
END $$
CALL pro_demo3(1,@name);
SELECT @name;
-- 存储过程示例 inout
DELIMITER $$
USE tdemo $$
DROP PROCEDURE IF EXISTS pro_demo4 $$
CREATE PROCEDURE pro_demo4(INOUT temp VARCHAR(10))
BEGIN
DECLARE tname VARCHAR(10) DEFAULT 'tlll';
SELECT nodename INTO temp FROM temp2 WHERE id=CAST(temp AS SIGNED);
SELECT temp;
SET temp = CONCAT(tname,temp);
END $$
SET @temp=1;
CALL pro_demo4(@temp);
SELECT @temp;
-- 存储过程判断语句 if case
DELIMITER $$
USE tdemo $$
DROP PROCEDURE IF EXISTS pro_demo5 $$
CREATE PROCEDURE pro_demo5(IN tstr VARCHAR(10),IN tid INT)
BEGIN
DECLARE temp VARCHAR(100);
IF tid > 0 THEN
SELECT 'tid > 0 ';
ELSEIF tid = 0 THEN
SELECT 'tid = 0 ';
ELSEIF tid IS NULL THEN
SELECT 'tid is null';
ELSE
SELECT 'tid < 0';
END IF;
CASE WHEN tstr ='tl' THEN
SET temp = 'tstr = tl';
SELECT temp;
WHEN tstr IS NOT NULL THEN
SET temp = 'tstr is not null';
SELECT temp;
ELSE
SET temp = 'tstr is null';
SELECT temp;
END CASE;
END $$
CALL pro_demo5('a',2);
CALL pro_demo5('tl',0);
CALL pro_demo5(NULL,-1);
CALL pro_demo5(NULL,NULL);
-- 存储过程判断 条件 case if 嵌套
DELIMITER $$
USE tdemo $$
DROP PROCEDURE IF EXISTS pro_demo6 $$
CREATE PROCEDURE pro_demo6(IN str VARCHAR(10),IN id INT)
BEGIN
DECLARE temp VARCHAR(100);
CASE WHEN id>0 THEN
SELECT 'id > 0';
IF str IS NOT NULL THEN
SET temp = 'str is not null';
SELECT temp;
ELSE
SET temp = 'str is error';
SELECT temp;
END IF;
WHEN id<0 THEN
SELECT 'id < 0';
WHEN id IS NULL THEN
SELECT 'id is null';
ELSE
SELECT 'id is error';
END CASE;
END $$
CALL pro_demo6('a',2);
CALL pro_demo6('tl',0);
CALL pro_demo6(NULL,-1);
CALL pro_demo6(NULL,NULL);
-- 存储过程 循环 while END WHILE
DELIMITER $$
USE tdemo $$
DROP PROCEDURE IF EXISTS pro_demo7 $$
CREATE PROCEDURE pro_demo7()
BEGIN
DECLARE i INT;
DECLARE str VARCHAR(10) DEFAULT '$';
SET i = 0;
WHILE i<5 DO
SET str= CONCAT(str,',',CAST(i AS CHAR));
INSERT INTO temp2(id,nodename) VALUES(25+i,str);
SET i=i+1;
END WHILE;
SELECT str;
END $$
CALL pro_demo7();
-- 存储过程 循环 while repeat end repeat
DELIMITER $$
USE tdemo $$
DROP PROCEDURE IF EXISTS pro_demo8 $$
CREATE PROCEDURE pro_demo8()
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE str VARCHAR(100) DEFAULT '$';
REPEAT
SET str= CONCAT(str,',',CAST(i AS CHAR));
SET i = i+1;
UNTIL i>=5
END REPEAT;
SELECT str;
END $$
CALL pro_demo8();
-- 存储过程 循环 loop end loop
DELIMITER $$
USE tdemo $$
DROP PROCEDURE IF EXISTS pro_demo9 $$
CREATE PROCEDURE pro_demo9()
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE str VARCHAR(100) DEFAULT '$';
loop_label:LOOP
SET str = CONCAT(str,',',i);
SET i = i+1;
IF i>=5 THEN
LEAVE loop_label;
END IF;
END LOOP;
SELECT str;
END $$
CALL pro_demo9();
-- 存储过程 循环 loop end loop iterate
DELIMITER $$
USE tdemo $$
DROP PROCEDURE IF EXISTS pro_demo10 $$
CREATE PROCEDURE pro_demo10()
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE str VARCHAR(100) DEFAULT '$';
loop_label:LOOP
IF i=3 THEN
SET i = i+1;
ITERATE loop_label; -- iterate 跳出当前循环
END IF;
SET str = CONCAT(str,',',i);
SET i = i+1;
IF i>=5 THEN
LEAVE loop_label;
END IF;
END LOOP;
SELECT str;
END $$
CALL pro_demo10();
-- 存储过程 游标
DELIMITER $$
USE tdemo $$
DROP PROCEDURE IF EXISTS pro_demo11 $$
CREATE PROCEDURE pro_demo11()
BEGIN
DECLARE done INT;
DECLARE id INT DEFAULT 0;
DECLARE str VARCHAR(10) DEFAULT '';
DECLARE cur_demo CURSOR FOR SELECT id,nodename FROM temp2 WHERE id=1; -- 声明一个游标变量
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; -- 声明游标结束的标志位
SET done = 0;
OPEN cur_demo; -- 打开游标
loop_lable:LOOP
IF done=1 THEN
LEAVE loop_lable;
END IF;
FETCH cur_demo INTO id,str;
INSERT INTO temp2 VALUES(100,'tltl');
END LOOP loop_lable;
CLOSE cur_demo; -- 关闭游标
SELECT id;
SELECT str;
END $$
CALL pro_demo11();
-- 存储过程 游标
DELIMITER $$
USE tdemo $$
DROP PROCEDURE IF EXISTS pro_demo12 $$
CREATE PROCEDURE pro_demo12()
BEGIN
DECLARE done INT;
DECLARE id INT DEFAULT 0;
SET str2 VARCHAR(10);
DECLARE str VARCHAR(10) DEFAULT '';
DECLARE cur_demo CURSOR FOR SELECT id,nodename FROM temp2 WHERE id=1; -- 声明一个游标变量
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; -- 声明游标结束的标志位
SET done = 0;
OPEN cur_demo; -- 打开游标
FETCH cur_demo INTO id,str;
SET str2=str;
CLOSE cur_demo; -- 关闭游标
SELECT str2;
END $$
CALL pro_demo12();
-- 存储过程 游标 循环
DELIMITER $$
USE tdemo $$
DROP PROCEDURE IF EXISTS pro_demo13 $$
CREATE PROCEDURE pro_demo13()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE tid INT;
DECLARE tnodename VARCHAR(10);
DECLARE cur_demo CURSOR FOR SELECT * FROM temp2 WHERE id BETWEEN 1 AND 5;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
CREATE TEMPORARY TABLE tl(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
info VARCHAR(20) NOT NULL
);
OPEN cur_demo;
loop_label:LOOP
IF done=1 THEN
LEAVE loop_label;
END IF;
FETCH cur_demo INTO tid,tnodename;
INSERT INTO tl(info) VALUES(CONCAT(tnodename,CAST(tid AS CHAR)));
END LOOP loop_label;
CLOSE cur_demo;
SELECT * FROM tl;
DROP TABLE tl;
END $$
CALL pro_demo13();
mysql存储过程--学习的更多相关文章
- MySQL存储过程学习笔记
MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.MySQL 5.0终于开始支持存储过程了. MySQL的关键字大小写通用.该学习笔记对关键字使用大写:变量名,表名使用小写. ...
- MySql存储过程学习总结
创建存储过程 1.格式 MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程参数[,...]]),举个例子: CREATE PROCEDURE proc1 (OUT s ...
- mysql存储过程学习(一)
转载 什么是存储过程,存储过程的作用及优点 mysql存储过程详细教程 mysql 使用存储过程批量插数据 一.存储过程介绍: 存储过程(Stored Procedure)是一组为了完成特定功能的 ...
- mysql存储过程学习
一.存储过程的创建 语法: CREATE PROCEDURE sp_name (参数)合法的SQL语句 mysql> delimiter // mysql> CREATE PROCEDUR ...
- MySQL 存储过程学习笔记
存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...
- mysql存储过程学习第一天
摘要:存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存储过程和函数是在 ...
- mysql 存储过程学习(总)
#一.存储过程和存储函数的创建案例 CREATE PROCEDURE myprocedure(in a int,in b int ,OUT c INT) BEGIN set c=a+b; end; c ...
- mysql 存储过程学习
存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...
- mysql 存储过程学习 汇总
存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...
随机推荐
- android Intent机制详解
http://www.oschina.net/question/565065_67909 http://www.cnblogs.com/hummersofdie/archive/2011/02/12/ ...
- 学习flex布局(弹性布局)
Flex是Flexible Box的缩写,意为弹性布局.是W3C早期提出的一个新的布局方案.可以便捷的实现页面布局,目前较高版本的主流浏览器都能兼容,兼容情况如下: Flex在移动端开发上已是主流,比 ...
- 【框架学习与探究之AOP--Castle DynamicProxy】
声明 本文欢迎转载,原始地址:http://www.cnblogs.com/DjlNet/p/7603654.html 前言 先说一点废话,在此之前博主也在早期就接触了或者看了些许AOP相关的文章,然 ...
- win10 uwp 获取指定的文件 AQS
很多时候不需要获取整个文件夹的文件,是需要获取文件夹里指定的文件. 那么 UWP 如何对文件夹里的文件进行过滤,只拿出自己需要的文件? 本文:如何使用通配符或文件匹配方式在uwp获取文件夹中指定的文件 ...
- Python学习笔记(四)
Python学习笔记(四) 作业讲解 编码和解码 1. 作业讲解 重复代码瘦身 # 定义地图 nav = {'省略'} # 现在所处的层 current_layer = nav # 记录你去过的地方 ...
- PyCharm 2017 官网 下载 安装 设置 配置 (主题 字体 字号) 使用 入门 教程
一.安装 Python 3.6 首先,要安装好 Python 3.6.如果你还没有安装,可以参考咪博士之前的教程 Python 3.6.3 官网 下载 安装 测试 入门教程 (windows) 二.官 ...
- 【转】缓存淘汰算法系列之3——FIFO类
原文地址:http://www.360doc.com/content/13/0805/16/13247663_304923435.shtml 1 FIFO 1.1. 原理 按照“先进先出(First ...
- 基于容器微服务的PaaS云平台设计(二)通过kubernetes实现微服务容器管理
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 上一章描述了基于spring cloud的微服务实例(实 ...
- 你真的懂offset与scroll吗?
背景 身为一个前端工程师,每次在做关于滚动或者定位之类的交互时,或多或少都会用到offset.scroll之类的元素属性值来计算距离,但是每次都是现用现百度,从来没有真正系统地弄明白其中的原理及用法: ...
- enum(枚举类型)
可以使用枚举类型声明代表整数常量的符号名称. 通过enum,创建一个新类型,并指定它可以拥有的值.(就像平常用一个整形变量,我们指定它等于0的时候代表什么,1呢,2呢...而通过枚举,就增加了程序的可 ...