zoukankan      html  css  js  c++  java
  • 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,'张三');  
  • 相关阅读:
    Centos 下查看服务器CPU的信息
    网速的一些知识整理
    如何复制文件夹里面的全部内容? 在pc上
    DataGridView中CellClick的使用,选中一行触发的动作可以在这个方法里执行
    C# 文件的压缩与解压缩
    C#调用Exe 及 有参数的
    oracle提示 ORA12154: TNS: 无法解析指定的连接标识符 OCIEnvCreate 失败, 返回代码为1,但错误消息文本不可用
    C# 导出wps配置服务器 注意事项
    C# FTP 操作类
    组件服务问题
  • 原文地址:https://www.cnblogs.com/t0404/p/10291052.html
Copyright © 2011-2022 走看看