Frage Beispiel für eine Schleife in MySQL


In MySQL habe ich diese gespeicherte Prozedur mit einer For-Schleife darin:

DELIMITER $$  
CREATE PROCEDURE ABC()

   BEGIN
      DECLARE a INT Default 0 ;
      simple_loop: LOOP
         SET a=a+1;
         select a;
         IF a=5 THEN
            LEAVE simple_loop;
         END IF;
   END LOOP simple_loop;
END $$

Es druckt immer 1. Was ist die korrekte Syntax für eine MySQL for-Schleife?


76
2018-02-26 04:35


Ursprung


Antworten:


drop table if exists foo;
create table foo
(
id int unsigned not null auto_increment primary key,
val smallint unsigned not null default 0
)
engine=innodb;

drop procedure if exists load_foo_test_data;

delimiter #
create procedure load_foo_test_data()
begin

declare v_max int unsigned default 1000;
declare v_counter int unsigned default 0;

  truncate table foo;
  start transaction;
  while v_counter < v_max do
    insert into foo (val) values ( floor(0 + (rand() * 65535)) );
    set v_counter=v_counter+1;
  end while;
  commit;
end #

delimiter ;

call load_foo_test_data();

select * from foo order by id;

113
2018-02-26 11:36



While-Schleifensyntaxbeispiel in MySQL:

delimiter //

CREATE procedure yourdatabase.while_example()
wholeblock:BEGIN
  declare str VARCHAR(255) default '';
  declare x INT default 0;
  SET x = 1;

  WHILE x <= 5 DO
    SET str = CONCAT(str,x,',');
    SET x = x + 1;
  END WHILE;

  select str;
END//

Welche Drucke:

mysql> call while_example();
+------------+
| str        |
+------------+
| 1,2,3,4,5, |
+------------+

REPEAT-Schleifensyntaxbeispiel in MySQL:

delimiter //

CREATE procedure yourdb.repeat_loop_example()
wholeblock:BEGIN
  DECLARE x INT;
  DECLARE str VARCHAR(255);
  SET x = 5;
  SET str = '';

  REPEAT
    SET str = CONCAT(str,x,',');
    SET x = x - 1;
    UNTIL x <= 0
  END REPEAT;

  SELECT str;
END//

Welche Drucke:

mysql> call repeat_loop_example();
+------------+
| str        |
+------------+
| 5,4,3,2,1, |
+------------+

Beispiel einer FOR-Schleifensyntax in MySQL:

delimiter //

CREATE procedure yourdatabase.for_loop_example()
wholeblock:BEGIN
  DECLARE x INT;
  DECLARE str VARCHAR(255);
  SET x = -5;
  SET str = '';

  loop_label: LOOP
    IF x > 0 THEN
      LEAVE loop_label;
    END IF;
    SET str = CONCAT(str,x,',');
    SET x = x + 1;
    ITERATE loop_label;
  END LOOP;

  SELECT str;

END//

Welche Drucke:

mysql> call for_loop_example();
+-------------------+
| str               |
+-------------------+
| -5,-4,-3,-2,-1,0, |
+-------------------+
1 row in set (0.00 sec)

Mach das Tutorial: http://www.mysqltutorial.org/stored-procedures-loop.aspx

Wenn ich Sie dabei erwischen sollte, diese Art von MySQL-For-Loop-Konstrukten in Produktion zu bringen, werde ich Sie mit dem Schaumraketenwerfer abschießen. Sie können eine Rohrzange benutzen, um in einen Nagel zu knallen, aber dabei machen Sie albern aussehen.


44
2017-12-25 05:05



Angenommen, Sie haben eine Tabelle mit dem Namen 'table1'. Es enthält eine Spalte 'col1' mit dem Typ varchar. Abfrage an Kiste Tabelle ist unten angegeben

CREATE TABLE `table1` (
    `col1` VARCHAR(50) NULL DEFAULT NULL
)

Wenn Sie jetzt eine Zahl von 1 bis 50 in diese Tabelle einfügen möchten, verwenden Sie die folgende gespeicherte Prozedur

DELIMITER $$  
CREATE PROCEDURE ABC()

   BEGIN
      DECLARE a INT Default 1 ;
      simple_loop: LOOP         
         insert into table1 values(a);
         SET a=a+1;
         IF a=51 THEN
            LEAVE simple_loop;
         END IF;
   END LOOP simple_loop;
END $$

Um diese gespeicherte Prozedur aufzurufen, verwenden Sie

CALL `ABC`()

10
2017-10-11 11:58