개발 Q&A

제목 트리거 작성중에 문제가 있어서 질문 올립니다.
카테고리 DB
글쓴이 푸하라 작성시각 2019/08/03 10:04:38
댓글 : 0 추천 : 0 스크랩 : 0 조회수 : 9105   RSS
아래와 같은 구문이 있을경우 테이블 상에서 이전 데이터가 있을 경우 삭제 하고 나머지는 업데이트를 시키고 싶어서 트리거를 제작을 하였는데..  select 구문에서 변수를 정확하게 이해 하지 못하는 것 같습니다. 고수님들 도와주세용..

트리거에서 이부분을 인식하지 못함
SET deleteTags =  concat("'",  REPLACE(new.tag, ',',  "','") , "'");

delete from `tb_tags` where tag not in(deleteTags) and `document_srl` = new.document_srl;

 

전체 소스
DROP TRIGGER IF EXISTS `triggerDocumentsUpdateForTags`;
DELIMITER $$
CREATE TRIGGER `triggerDocumentsUpdateForTags` after UPDATE ON `tb_documents` 
FOR EACH ROW 
BEGIN
# 내용 선언하기.
DECLARE idx INT;
DECLARE cntNewTag INT;
DECLARE newTags VARCHAR(255);
DECLARE tag VARCHAR(100);
DECLARE deleteTags VARCHAR(255);



IF new.tag != '' THEN
	SET newTags = new.tag;
	SET deleteTags =  concat("'",  REPLACE(new.tag, ',',  "','") , "'");
	delete from `tb_tags` where tag not in(deleteTags) and `document_srl` = new.document_srl;


	SET cntNewTag =  (LENGTH(new.tag) - LENGTH(REPLACE(new.tag, ',', ''))) / LENGTH(',') + 1;
	#신규 태그 혹은 새로운 태그를 업데이트 한다.
	IF cntNewTag > 0 THEN
		SET idx = 1;
		ins_loop: LOOP
			set tag = (select SPLIT_STRING(newTags, ',',  idx));
			IF tag != '' THEN
				insert into `tb_tags`(`module_srl`, `document_srl`, `tag`, `regdate`) values( new.module_srl, new.document_srl, trim(tag), now()) 
				on duplicate key update `tag` = tag;
			END IF;
			
			set idx = idx + 1;
			IF idx > cntNewTag  THEN
				LEAVE ins_loop;
			END IF;
		END LOOP;
	END IF;

END IF;

END;
$$ DELIMITER ;
 다음글 codeigniter 에서 컨트롤러에서 다른 컨트롤러로... (1)
 이전글 정상 동작 하는데, ajax 200 에러 뜨고 있는데요... (2)

댓글

없음