简体   繁体   English

MySQL的存储过程,如果语法

[英]Mysql Stored Procedure if syntax

I create a Stored procedure, that should take value from column 'alt1','alt2','alt3''alt4', and create a new row with each of that values. 我创建了一个存储过程,该过程应该从“ alt1”,“ alt2”,“ alt3” alt4”列中获取值,并使用每个值创建一个新行。 This new value must have an incremental id. 此新值必须具有增量ID。 However if condition is never met, although I know for sure there are many alt1, alt2, alt3, alt4 that aren't null. 但是,如果条件从未满足,尽管我确定可以肯定有很多alt1,alt2,alt3,alt4不为空。

EDIT: On Database there are a lot of alt* NOT NULL, but in the stored variables Alt* are ALL NULL. 编辑:在数据库上有很多alt * NOT NULL,但是在存储的变量中Alt *是ALL NULL。

Thank you in advance 先感谢您

DELIMITER $$

DROP PROCEDURE IF EXISTS smonta_alias $$
CREATE PROCEDURE smonta_alias ( )
BEGIN
 DECLARE done INT DEFAULT FALSE; 
 DECLARE tname VARCHAR(255);
 DECLARE nuovo_id INT DEFAULT 5000;
 DECLARE alt1 VARCHAR(255);
 DECLARE alt2 VARCHAR(255);
 DECLARE alt3 VARCHAR(255);
 DECLARE alt4 VARCHAR(255);
 DECLARE id INT;
 DECLARE idq INT;

 DECLARE cur1 CURSOR FOR SELECT `alt1` AS alt1, `alt2` AS alt2, `alt3` AS alt3, `alt4` AS alt4, `id` AS id, `id_quota` AS idq FROM `squadra` s WHERE
                                         `s`.alt1 IS NOT NULL OR 
                                         `s`.alt2 IS NOT NULL OR
                                         `s`.alt3 IS NOT NULL OR
                                         `s`.alt4 IS NOT NULL; 
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

 OPEN cur1;
 tables_loop: LOOP
   FETCH cur1 INTO alt1, alt2, alt3, alt4, id, idq;
   IF done THEN
     LEAVE tables_loop;
   END IF;
   IF @alt1 IS NOT NULL THEN   
    SET @s = CONCAT('INSERT INTO `squadra` (id, id_quota, nome_squadra) VALUES (?,?,?)');  
    SELECT @s;
    PREPARE stmtd FROM @s;
    EXECUTE stmtd USING @nuovo_id, @idq, @alt1;
    SET @nuovo_id = @nuovo_id + 1;
   END IF;

   IF @alt2 IS NOT NULL THEN   
    SET @s = CONCAT('INSERT INTO `squadra` (id, id_quota, nome_squadra) VALUES (?,?,?)');  
    SELECT @s;
    PREPARE stmtd FROM @s;
    EXECUTE stmtd USING @nuovo_id, @idq, @alt2;
    SET @nuovo_id = @nuovo_id + 1; 
   END IF;

   IF @alt3 IS NOT NULL THEN   
    SET @s = CONCAT('INSERT INTO `squadra` (id, id_quota, nome_squadra) VALUES (?,?,?)');  
    SELECT @s;
    PREPARE stmtd FROM @s;
    EXECUTE stmtd USING @nuovo_id, @idq, @alt3;
    SET @nuovo_id = @nuovo_id + 1; 
   END IF;

   IF @alt4 IS NOT NULL THEN   
    SET @s = CONCAT('INSERT INTO `squadra` (id, id_quota, nome_squadra) VALUES (?,?,?)');  
    SELECT @s;
    PREPARE stmtd FROM @s;
    EXECUTE stmtd USING @nuovo_id, @idq, @alt4;
    SET @nuovo_id = @nuovo_id + 1;
   END IF;

 END LOOP;
END $$

DELIMITER ;

CALL smonta_alias;

In IF statements use alt1, alt2, alt2, alt4 . 在IF语句中使用alt1, alt2, alt2, alt4 Not @alt1, @alt2, @alt3, @alt4 . 不是@alt1, @alt2, @alt3, @alt4 When you declare variables don't use @. 声明变量时,请勿使用@。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM