반응형
CREATE PROCEDURE `abc`.`cursordemo` (IN start_date DATETIME,IN end_date DATETIME)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE k1,k2,g,s,last_status VARCHAR(45);
DECLARE b, c INT;
DECLARE cur1 CURSOR FOR SELECT `key` FROM `abc`.`temp_weekly`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO k1;
IF done THEN
LEAVE read_loop;
END IF;
block_cursor:BEGIN
DECLARE cur2 CURSOR FOR SELECT `key`,`group`,`status` FROM `abc`.`jira_local` WHERE `key` = k1 AND updateddate < end_date;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done1 = TRUE;
OPEN cur2;
REPEAT
FETCH cur2 INTO k2,g,s;
IF NOT done1 THEN
IF s != last_status THEN
CASE
WHEN s = 'verified' THEN
SET c = c +1;
WHEN s = 'closed' THEN
SET c = c +1;
WHEN s = 'to be scheduled' THEN
SET c = c +1;
WHEN s = 'deferred' THEN
SET c = c +1;
/*'resolved','closed','to be scheduled','deferred','validated','assigned','l3 need more info','l2 need more info','need more info'*/
WHEN s = 'resolved' THEN
SET c = c +1;
WHEN s = 'validated' THEN
SET c = c +1;
WHEN s = 'assigned' THEN
SET c = c +1;
WHEN s = 'l3 need more info' THEN
SET c = c +1;
WHEN s = 'l2 need more info' THEN
SET c = c +1;
WHEN s = 'need more info' THEN
SET c = c +1;
END CASE;
SET last_status = s;
END IF;
END IF;
UNTIL NOT done1 END REPEAT;
INSERT INTO ticketsResolvedCount values(k2,g,s,c);
END block_cursor;
END LOOP;
CLOSE cur1;
CLOSE cur2;
END$$
내가하는 일 1) read all keys from temp_weekly and iterate 2) 특정 키에 대한 jira_local 테이블에서 모든 레코드를 찾고 확인, 해결 등의 횟수를 계산합니다.
문제 : 이것을 컴파일하면 오류가 발생합니다.
ERROR 1193: Unknown system variable 'done1'
업데이트 :
done / done1
을 선언 한 후 내 절차는 다음과 같습니다.
BEGIN
DECLARE k1,k2,g,s,last_status VARCHAR(45);
DECLARE b, c INT;
DECLARE cur1 CURSOR FOR SELECT `key` FROM `abc`.`temp_weekly`;
DECLARE done1 BOOLEAN DEFAULT FALSE;
DECLARE done BOOLEAN DEFAULT FALSE;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
.
.
.
block_cursor:BEGIN
DECLARE cur2 CURSOR FOR SELECT `key`,`group`,`status` FROM `abc`.`jira_local` WHERE `key` = k1 AND updateddate < end_date;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done1 = TRUE;
.
.
.
이것은 나에게 준다
ERROR 1337: Variable or condition declaration after cursor or handler declaration
해결 방법
done
에서했던 것처럼 done1
을 선언해야합니다.
에서
DECLARE done INT DEFAULT FALSE;
에
DECLARE done, done1 INT DEFAULT FALSE;
^^^^^^^
참조 페이지 https://stackoverflow.com/questions/15834433
반응형
'MySql' 카테고리의 다른 글
MySQL은 여러 열 삭제 (0) | 2021.01.06 |
---|---|
MySQL 치명적 오류 : phpMyAdmin에서 실행 시간 30 초 초과 (0) | 2021.01.06 |
MySQL iOS 앱을 데이터베이스 (mySQL 및 Sequel Pro)에 연결하는 방법은 무엇입니까? (0) | 2021.01.06 |
MySQL 의미? header ( 'P3P : CP = "IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); (0) | 2021.01.06 |
MySQL 변수 MySQL 트리거 선언 (0) | 2021.01.06 |
댓글