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