MySQL procedure 질문입니다~! 0 5 1,921

by 릿죠로 [PL/SQL] mysql procedure query [2017.02.23 17:02:27]


DELIMITER $$

DROP PROCEDURE IF EXISTS memdb.mass_del_memarticle_2 $$
CREATE PROCEDURE memdb.`mass_del_memarticle_2`(  
                                              INOUT  v_memid   varchar(20)
                                              )
BEGIN


DECLARE done INT DEFAULT 0;
DECLARE v_counted_table VARCHAR(64);
DECLARE crsr CURSOR FOR SELECT table_name FROM memdb.article_list WHERE memid = v_memid AND STATUS = 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;


OPEN crsr;

read_loop: LOOP
FETCH crsr INTO v_counted_table;

IF done THEN
LEAVE read_loop;
END IF;

SET @s =
       CONCAT(
          'update article_list set cnt = (select count(*) from ',
          v_counted_table,
          " where mem_id = '",
          v_memid,
          "'", " and state = 'Y'",
          " ) where table_name  = '",
          v_counted_table,
          "';");
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END LOOP;


CLOSE crsr;


 UPDATE article_list  AS a
       JOIN article_list AS b ON a.idx = b.idx
  SET a.minus_point = a.point * b.cnt
  where a.memid = v_memid;

END$$

DELIMITER ;
 

 

====================================================

위 프로시져에서 다른부분은 정상 작동하는데 close  crsr; 이후에 나오는 쿼리인

UPDATE mass_del_article_list  AS a
       JOIN mass_del_article_list AS b ON a.idx = b.idx
  SET a.minus_point = a.point * b.cnt
  where a.memid = v_memid;

이부분의 업데이트문을 수행을 안하네요;;;  그부분에 다른 프로시져를 호출하게 해봐도 호출도 안합니다.  고수님들의 고견을 부탁드립니다! ㅠㅠ

by jkson [2017.02.23 17:22:37]

제가 mysql 문법일 잘 몰라서 여쭤보는데요.

update article_list  as a
       join article_list as b on a.idx = b.idx
   set a.minus_point = a.point * b.cnt
 where a.memid = v_memid;

=> 같은 테이블인데 왜 조인하시는 거죠?
  
update article_list  a
   set a.minus_point = a.point * a.cnt
 where a.memid = v_memid;

이렇게 하시면 안 되는지..

 


by 릿죠로 [2017.02.23 17:31:05]

네 그 부분은 수정되는게 맞네요 ~^^;; 

그래도 close crsr 이후 부분은 작동을 안합니다 ~ 


by jkson [2017.02.23 17:34:55]

실제 저 부분을 실행하지 않는 것인지 실행은 하는데 update를 못 하는 것인지 체크해보셔야할 것 같습니다.


by jkson [2017.02.23 17:44:50]

mysql은 exception 처리를 어떻게 하는지 모르겠는데 제 생각에는 v_counted_table에 실제 존재하지 않는 테이블이 들어오면서(혹은 그게 아니라 다른 이유로) 실제로 윗단에서 오류가 나면서 중지되는 게 아닐까 싶은데요.


by 주킹 [2017.02.23 18:30:53]

예외처리는 필수로 넣으셔야 할듯하고요 log를 찍어서 어떻게 돌구 있나봐야할듯싶네요

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입