• Mysql游标和预定义语句的用法


    一 游标
        1语法
          1>声明光标
           DECLARE cursor_name CURSOR FOR select_statement
               这个语句声明一个光标。也可以在子程序中定义多个光标,但是一个块中的每一个光标必须有唯一的名字。
           SELECT语句不能有INTO子句。 
         2>光标OPEN语句
           OPEN cursor_name
           这个语句打开先前声明的光标。
           
         3>光标FETCH语句
           FETCH cursor_name INTO var_name [, var_name] ...
           这个语句用指定的打开光标读取下一行(如果有下一行的话),并且前进光标指针。 
         4>光标CLOSE语句
           CLOSE cursor_name
          5>用法举例
          DROP PROCEDURE IF EXISTS pro_cursor;
           DELIMITER //
           CREATE PROCEDURE pro_cursor()
           BEGIN
              DECLARE gid INT;
              DECLARE gname VARCHAR(20);
              DECLARE ifEnd BOOLEAN DEFAULT FALSE;
              DECLARE cur CURSOR FOR SELECT * FROM grade;
              #定义一个句柄 当fetch 抓取数据时 会自动调用该句柄 如果找不到数据  会自动调用最后的sql语句 set
              # not found等价于 SQLSTATE '02000'
              DECLARE CONTINUE HANDLER FOR NOT FOUND SET ifEnd=TRUE;
              OPEN cur;
               WHILE(ifEnd=FALSE) DO
                   FETCH cur INTO gid,gname;
                   IF(ifEnd=FALSE) THEN
                   SELECT gid,gname;
                   END IF;
               END WHILE;
              
              CLOSE cur;
           END
           //
           CALL pro_cursor;
    二 预定义语句
         1>结构 :
            预制语句的SQL语法基于三个SQL语句:
           PREPARE stmt_name FROM preparable_stmt;
           EXECUTE stmt_name [USING @var_name [, @var_name] ...];
           {DEALLOCATE | DROP} PREPARE stmt_name;
        2>举例
          --创建表
              CREATE TABLE `arcticle` (
                 `id` int(11) NOT NULL AUTO_INCREMENT,
                 `title` varchar(200) DEFAULT NULL,
                 `content` varchar(200) DEFAULT NULL,
                 `createuser` varchar(200) DEFAULT NULL,
                 PRIMARY KEY (`id`)
               ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
           --过程
                 DROP PROCEDURE IF EXISTS pro_queryTitle;
               DELIMITER //
               CREATE PROCEDURE pro_queryTitle(title VARCHAR(20),createuser VARCHAR(20))
               BEGIN
                 SET @msql='select * from arcticle where 1=1 ';
                 IF title IS NOT NULL THEN
                    # select * from arcticle where 1=1 and title='java是否过时';
                    SET @msql=CONCAT(@msql,' and title='' ',title,'''');
                 END IF;
                 IF createuser IS NOT NULL THEN
                    SET @msql=CONCAT(@msql,'  and createuser=''',createuser,'''');
                 END IF;
                 
                 PREPARE stm1 FROM @msql;
                 EXECUTE stm1;
                 DEALLOCATE PREPARE stm1;
               END
               //
               #'java是否过时','张三'
               CALL pro_queryTitle(NULL,'张三');  
  • 相关阅读:
    安全工具-Arachni
    Python读取本地文档内容并发送邮件
    Linux好用的工具命令
    kali 安装google chrome浏览器(离线手动)
    安全工具-Sparta
    安全工具-Hydra
    当年的程序员,如今已是父母,七个方法让孩子爱上学习!
    一个网站SEO优化方案
    发现2017年最好的CSS框架
    怎么样加快JavaScript加载和执行效率
  • 原文地址:https://www.cnblogs.com/t0404/p/10291052.html
Copyright © 2020-2023  润新知