¿Cómo puedo usar dos cursores en la misma rutina? Si elimino la segunda declaración del cursor y el ciclo de búsqueda todo funciona bien. La rutina se usa para agregar un amigo en mi aplicación web. Toma la identificación del usuario actual y el correo electrónico del amigo que queremos agregar como amigo, luego verifica si el correo electrónico tiene una identificación de usuario correspondiente y si no existe una relación de amistad, creará una. Cualquier otra solución de rutina que esta también sería genial.Procedimiento almacenado de MySQL, manejo de múltiples cursores y resultados de consultas
DROP PROCEDURE IF EXISTS addNewFriend;
DELIMITER //
CREATE PROCEDURE addNewFriend(IN inUserId INT UNSIGNED, IN inFriendEmail VARCHAR(80))
BEGIN
DECLARE tempFriendId INT UNSIGNED DEFAULT 0;
DECLARE tempId INT UNSIGNED DEFAULT 0;
DECLARE done INT DEFAULT 0;
DECLARE cur CURSOR FOR
SELECT id FROM users WHERE email = inFriendEmail;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO tempFriendId;
UNTIL done = 1 END REPEAT;
CLOSE cur;
DECLARE cur CURSOR FOR
SELECT user_id FROM users_friends WHERE user_id = tempFriendId OR friend_id = tempFriendId;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO tempId;
UNTIL done = 1 END REPEAT;
CLOSE cur;
IF tempFriendId != 0 AND tempId != 0 THEN
INSERT INTO users_friends (user_id, friend_id) VALUES(inUserId, tempFriendId);
END IF;
SELECT tempFriendId as friendId;
END //
DELIMITER ;
Gracias por sus direcciones, soy nuevo en procedimientos almacenados y trató de utilizar una rutina anterior llegué con ayuda (http://stackoverflow.com/questions/1903189/using-select-resultset-to-run-update-query-with-mysql-stored-procedures), intentaré encontrar un enfoque diferente para escribir este procedimiento. – Tirithen
Y sí, tiene razón acerca de la lógica, debería ser: SELECCIONAR user_id DE users_friends WHERE (user_id = tempFriendId AND friend_id = inUserId) O (friend_id = tempFriendId AND user_id = inUserId); Pero como dije, intentaré una forma diferente de hacerlo. – Tirithen