이틀 동안 삽질하다 못해 문의 드립니다..
사용자 테이블 트리거내부에서 커서로 데이터 하나씩 업데이트를 하고 싶습니다..
문제는 커서로 선언되는 데이터가 집합데이터를 가져와야해서 어쩔수 없이 프로시저로 했는데.. .. 오류가 나네요..
제가 봐도 틀린것 같긴한데... 개념이 없으니 어떻게 풀어야 할지 모르겠습니다..
혹시 집합데이터를 받아서 커서를 사용할 수 있는 방법이 있다면 조언좀 해주시기 바랍니다.
-------로그인 트리거 소스입니다..---
CREATE DEFINER=`test@`%` TRIGGER `test`.`LOGIN` AFTER UPDATE ON test.LOGIN FOR EACH ROW
BEGIN
DECLARE done BOOLEAN DEFAULT 0;
## CURSOR
DECLARE cur1 CURSOR FOR CALL PRO_SYS_GROUP_ID(PAR_GROUP_ID); --> 집합데이터 가져와서 선언하고 싶습니다.
## CONTINUE HANDLER
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
DECLARE M_STATUS VARCHAR(1);
OPEN cur1;
REPEAT
FETCH cur1 INTO ?? ;
IF NOT done THEN
SELECT STATUS
INTO M_STATUS
FROM T_SYS_CHARGE
WHERE GROUP_ID = ??;
IF M_STATUS = 'Y' THEN
T_SYS_CHARGE 계산과 업데이트
END IF ;
IF M_STATUS = 'I' THEN
T_SYS_CHARGE 계산과 업데이트
END IF ;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
END;
------문제의 프로시저 소스입니다. -----------------
CREATE PROCEDURE test.`PRO_SYS_GROUP_ID`(PAR_GROUP_ID INT(10))
BEGIN
DECLARE M_MENU_ORDER VARCHAR(30);
SELECT MENU_ORDER
INTO M_MENU_ORDER
FROM T_SYS_GROUP
WHERE GROUP_ID = PAR_GROUP_ID ;
SELECT GROUP_ID
FROM T_SYS_GROUP
WHERE GROUP_KIND = 'N' AND MENU_ORDER LIKE CONCAT(M_MENU_ORDER ,'%');
END; |