반응형
동일한 루틴에서 두 개의 커서를 어떻게 사용할 수 있습니까? 두 번째 커서 선언을 제거하고 루프를 가져 오면 모든 것이 잘 작동합니다. 이 루틴은 내 웹앱에서 친구를 추가하는 데 사용됩니다. 현재 사용자의 ID와 친구로 추가하고 싶은 친구의 이메일을 받아 해당 이메일에 해당 사용자 ID가 있는지 확인하고 친구 관계가없는 경우 하나를 만듭니다. 이것 이외의 다른 일상적인 해결책도 좋습니다.
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 ;
해결 방법
마침내 동일한 작업을 수행하는 다른 함수를 작성했습니다.
DROP PROCEDURE IF EXISTS addNewFriend;
DELIMITER //
CREATE PROCEDURE addNewFriend(IN inUserId INT UNSIGNED, IN inFriendEmail VARCHAR(80))
BEGIN
SET @tempFriendId = (SELECT id FROM users WHERE email = inFriendEmail);
SET @tempUsersFriendsUserId = (SELECT user_id FROM users_friends WHERE user_id = inUserId AND friend_id = @tempFriendId);
IF @tempFriendId IS NOT NULL AND @tempUsersFriendsUserId IS NULL THEN
INSERT INTO users_friends (user_id, friend_id) VALUES(inUserId, @tempFriendId);
END IF;
SELECT @tempFriendId as friendId;
END //
DELIMITER ;
이것이 더 나은 해결책 이길 바랍니다. 어쨌든 잘 작동합니다. 필요하지 않을 때 커서를 사용하지 말라고 알려 주셔서 감사합니다.
참조 페이지 https://stackoverflow.com/questions/1995189
반응형
'MySql' 카테고리의 다른 글
MySQL mysql 뷰에서 동적 매개 변수를 전달하는 방법 (0) | 2020.12.17 |
---|---|
MySQL laravel 4-> 열 이름 가져 오기 (0) | 2020.12.17 |
MySQL Create Database If Not Exists with PDO (0) | 2020.12.17 |
MySQL 오류 1452 MySQL (0) | 2020.12.17 |
MySQL pip-3.3 install MySQL-python (0) | 2020.12.17 |
댓글