나는 랭크가있는 뷰의 행을 임시 테이블에 삽입하는 저장된 proc를가집니다.임시 테이블이 MySQL에 저장된 결과 집합을 반환하지 않습니다
임시 테이블은 값을 삽입 한 커서 루프를 실행하고 루프가 완료된 후 SELECT를 실행하기 전에 만들어집니다.
그러나 내가 medianMessagesPerWeek()를 호출하면; "오류 코드 : 1329 데이터가 없습니다 - 행을 가져 오거나 선택했거나 처리했습니다."
테이블을 MYISAM 테이블로 만들면 수동으로 테이블을 선택하고 데이터가 삽입되었지만 저장된 proc이 아무 것도주지 않음을 확인할 수 있습니다.
여기에 뭔가가 있습니까?
DELIMITER $$
USE `yongopal_metrics`$$
DROP PROCEDURE IF EXISTS `medianMessagesPerWeek`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `medianMessagesPerWeek`()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE tempJoinWeek, tempActiveWeek, rank INT DEFAULT 0;
DECLARE joinWeek, activeWeek, memberNo, messages INT;
DECLARE cur CURSOR FOR SELECT * FROM cohortMessagesPerMemberPerWeek;
DROP TEMPORARY TABLE IF EXISTS medianMessagesPerWeek;
CREATE TEMPORARY TABLE medianMessagesPerWeek
(
joinWeek INT,
activeWeek INT,
memberNo INT,
messages INT,
rank INT
) ENGINE=MEMORY;
OPEN cur;
read_loop: LOOP
FETCH cur INTO joinWeek, activeWeek, memberNo, messages;
IF done THEN
LEAVE read_loop;
END IF;
IF tempJoinWeek = joinWeek AND tempActiveWeek = activeWeek THEN
SET rank = rank + 1;
ELSE
SET tempJoinWeek = joinWeek;
SET tempActiveWeek = activeWeek;
SET rank = 1;
END IF;
INSERT INTO medianMessagesPerWeek VALUES (joinWeek, activeWeek, memberNo, messages, rank);
END LOOP;
CLOSE cur;
SELECT * FROM medianMessagesPerWeek;
DROP TEMPORARY TABLE IF EXISTS medianMessagesPerWeek;
END$$
DELIMITER ;
EDIT 여기
당신이 당신의 cur
커서에 대한 not found
handler 누락있는 것처럼
DELIMITER $$
USE `yongopal_metrics`$$
DROP VIEW IF EXISTS `cohortMessagesPerMemberPerWeek`$$
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `cohortMessagesPerMemberPerWeek` AS
SELECT
WEEK(`m`.`regDatetime`,0) AS `joinWeek`,
WEEK(`cd`.`sendDate`,0) AS `activeWeek`,
`m`.`memberNo` AS `memberNo`,
COUNT(0) AS `messages`
FROM (`yongopal`.`chatData` `cd`
JOIN `yongopal`.`members` `m`
ON ((`cd`.`sender` = `m`.`memberNo`)))
GROUP BY WEEK(`m`.`regDatetime`,0),WEEK(`cd`.`sendDate`,0),`m`.`memberNo`
ORDER BY WEEK(`m`.`regDatetime`,0),WEEK(`cd`.`sendDate`,0)$$
DELIMITER ;
와우, 속임수를 썼는지 :
이 사용 해보세요! "찾을 수 없다"고 선언하는 것이 정확히 무엇입니까? –
그 선언하지 않으면 커서가 루핑 완료 후 저장된 proc 그냥 끝날 것 같아요? –
예. 일종의. '발견되지 않음'핸들러가 누락 된 경우 proc은 '데이터 없음'상태 (즉, 커서에서 페치 할 데이터가없는 상태)를 오류로 처리합니다. 처리기를 추가하면 proc에 "데이터가 없습니다 '상태가되면 오류가 발생하지 않습니다. 단지'done' 부울을 true로 설정하십시오." 가능한 한 더 잘 설명 할 수있을 것이므로 내 답변에 게시 된 링크를 빠르게 읽으십시오! 기쁜 데 도움이되었습니다. –