-- 存储过程示例一   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. centos 7.1系统更改Mariadb数据存储位置步骤分享

    一.首先确保你要更改Mariadb数据存储的位置的空间够大 现在已将Mariadb存储位置更改到/opt/目录下 1.然后将Mariadb服务stop:systemctl stop mariadb 2 ...

  2. SQL SERVER 数据库级联删除

    --SQL SERVER 2008R2 级联删除:主子表设置外键关联,当主表数据删除的时候会自动删除子表中对应的数据 --创建主表 create table test_main( ID ,) PRIM ...

  3. python apschedule安装使用与源码分析

    我们的项目中用apschedule作为核心定时调度模块.所以对apschedule进行了一些调查和源码级的分析. 1.为什么选择apschedule? 听信了一句话,apschedule之于pytho ...

  4. PHP 注释 数据类型 变量的定义/输出 类型的获取/转换 可变变量

    注释方法: 1,单行注释:     // 2,  多行注释:     /*   */ 二,数据类型 1,integer(整数型):在三十二位操作系统中它的有效范围是:-2147483648~+2147 ...

  5. 写博客 Why?

    博客?英文名字为blogger,它是一种网络日记. 一.我为什么要写博客? 这是我第一回写博客,写的可能不是非常的好,请多多给些意见.在平常的学习的时候,我怕忘掉自己学的知识,常常都会记录下来,但回头 ...

  6. Java并发编程之原子变量

    原子变量最主要的一个特点就是所有的操作都是原子的,synchronized关键字也可以做到对变量的原子操作.只是synchronized的成本相对较高,需要获取锁对象,释放锁对象,如果不能获取到锁,还 ...

  7. 【转】PC架构系列:CPU/RAM/IO总线的发展历史!

    原文地址:http://blog.csdn.net/xport/article/details/1387928 1. 从 IBM PC XT 架构开始...一开始PC的设计中,CPU/RAM/IO都是 ...

  8. 【NOIP模拟】jzoj5233概率博弈(树规)

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵

  9. 【20171027早】alert(1) to win 第9,10,11,12题

    人在江湖,不服就干! 第9题: function escape(s) { function htmlEscape(s) { return s.replace(/./g, function(x) { r ...

  10. ssh更改默认端口号及实现免密码远程登陆

    近来在复习防火墙管理工具 iptables 的基本使用方法,涉及到对端口添加或删除防火墙策略的内容,之前对ssh更改默认端口号及免密码登录的方法不熟悉,这次做一个基本的总结防止自己遗忘. 错误偏差及其 ...