zoukankan      html  css  js  c++  java
  • MariaDB存储过程笔记

    FECTH INTO 字段名不能与 CURSOR FOR 中select字段名一致,否则FETCH出的值均为空。

    DECLARE 字段名不能与 CURSOR FOR 中select语句内where条件中使用的字段同名,否则会出现查询不到数据的情况(无数据无法进入进入循环)。

    在过程中执行动态查询时,将查询字段结果赋值到临时变量,如果查询字段结果为 null 会导致当前循环出现 not found 从而调用在 not found中的 set done = true;语句,使循环终止,解决办法是,在此类查询后增加 set done = false;语句确保不会因为循环内部的not found影响到本循环,大致结构如下(测试直接查询某个为null的字段到临时变量并不会出现not found):

    BEGIN
        DECLARE DONE DEFAULT FALSE;
        CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
        
        OPEN cur_ ;
        _loop:LOOP
           IF done THEN
              LEAVE _loop;
           END IF;
           SET sql_text = CONCAT('SELECT name into @out_tmp FROM ', 'test_e',' where id = ?');
           set @sql = sql_text;
           PREPARE stmt FROM @sql;
           set @param = '1111';
           EXECUTE stmt using @param;
           DEALLOCATE PREPARE stmt;
           select @out_tmp;
           set done = FALSE;
        END LOOP;
        CLOSE cur_;
    END;
    

      

  • 相关阅读:
    BZOJ2034 【2009国家集训队】最大收益
    「PKUSC2018」最大前缀和
    「PKUSC2018」真实排名
    【FJOI2016】建筑师
    【FJOI2014】最短路径树问题
    【HNOI2007】紧急疏散
    【TJOI2015】线性代数
    【SDOI2017】新生舞会
    POJ2079 Triangle
    【SDOI2011】工作安排
  • 原文地址:https://www.cnblogs.com/justbeginning/p/9773094.html
Copyright © 2011-2022 走看看