-- 存储过程示例一   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存储过程--学习的更多相关文章

  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 存储过程学习(总)

    #一.存储过程和存储函数的创建案例 CREATE PROCEDURE myprocedure(in a int,in b int ,OUT c INT) BEGIN set c=a+b; end; c ...

  8. mysql 存储过程学习

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

  9. mysql 存储过程学习 汇总

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

随机推荐

  1. ubuntu远程桌面介绍

    一.windows远程ubuntu14.04 由于xrdp.gnome和unity之间的兼容性问题,在Ubuntu 14.04版本中仍然无法使用xrdp登陆gnome或unity的远程桌面,现象是登录 ...

  2. sqlserver 使用脚本创建Sql Server代理作业

    use master GO /* --开启sql server代理 sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_con ...

  3. 使用Gradle构建Android项目

    阅读目录 Gradle是什么? 环境需求 Gradle基本结构 任务task的执行 基本的构建定制 目录配置 签名配置 代码混淆设置 依赖配置 输出不同配置的应用 生成多个渠道包(以Umeng为例) ...

  4. python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)

    python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...

  5. javaWeb 基础知识

    cookie  深度解析:  http://blog.csdn.net/ghsau/article/details/20395681 cookie 的作用: 利用存在客户端本地的缓存让无状态的服务器也 ...

  6. Ubuntu/deppin 系统安装Nginx

    Ubuntu/deppin 系统安装Nginx 添加密钥 打开Nginx官网 ,并找到如下位置: 在桌面新建"nginx_signing.key"文件,文件内容为请点击图1中的标注 ...

  7. EF异常探究(An entity object cannot be referenced by multiple instances of IEntityChangeTracker.)

    今天在改造以前旧项目时出现了一项BUG,是由于以前不规范的EF写法所导致.异常信息如下: "An entity object cannot be referenced by multiple ...

  8. 使用Hibernate Tools从数据库逆向生成Hibernate实体类

    自动生成model.java.*.hbm.xml 甚至是dao.java.*.ddl.*.html等等.一般也就如下三种方式1. MyEclipse 自带插件2. jboss的 hibernate-t ...

  9. Repeated Substring Pattern --重复字符串

    Given a non-empty string check if it can be constructed by taking a substring of it and appending mu ...

  10. LeetCode 219. Contains Duplicate II (包含重复项之二)

    Given an array of integers and an integer k, find out whether there are two distinct indices i and j ...