MySQL foreach альтернатива для процедуры

Проблема, которую я испытал, когда персистентность поблочного тестирования, особенно без ORM и таким образом насмешки Вашей базы данных (соединение), состоит в том, что Вы действительно не знаете, успешно выполняются ли Ваши запросы. Могло случиться так, что Вы, Ваши запросы специально предназначены для конкретной версии базы данных и только успешно выполняются с той версией. Вы никогда не будете узнавать это при насмешке базы данных. Так, по-моему, персистентность поблочного тестирования только имеет ограниченное применение. Необходимо всегда добавлять тесты, работающие против целенаправленной базы данных.

34
задан n8bar 1 August 2018 в 02:05
поделиться

2 ответа

Вот ссылка на mysql для курсоров . Я предполагаю, что это примерно так:

  DECLARE done INT DEFAULT 0;
  DECLARE products_id INT;
  DECLARE result varchar(4000);
  DECLARE cur1 CURSOR FOR SELECT products_id FROM sets_products WHERE set_id = 1;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

  OPEN cur1;

  REPEAT
    FETCH cur1 INTO products_id;
    IF NOT done THEN
      CALL generate_parameter_list(@product_id, @result);
      SET param = param + "," + result; -- not sure on this syntax
    END IF;
  UNTIL done END REPEAT;

  CLOSE cur1;

  -- now trim off the trailing , if desired
40
ответ дан 27 November 2019 в 16:57
поделиться

Это можно сделать с MySQL, хотя это очень неинтуитивно:

CREATE PROCEDURE p25 (OUT return_val INT)
BEGIN
  DECLARE a,b INT;
  DECLARE cur_1 CURSOR FOR SELECT s1 FROM t;
  DECLARE CONTINUE HANDLER FOR NOT FOUND
  SET b = 1;
  OPEN cur_1;
  REPEAT
    FETCH cur_1 INTO a;
    UNTIL b = 1
  END REPEAT;
  CLOSE cur_1;
  SET return_val = a;
END;//

Ознакомьтесь с этим руководством: mysql-storedprocedures. pdf

12
ответ дан 27 November 2019 в 16:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: