제목 | 트리거 작성중에 문제가 있어서 질문 올립니다. | ||
---|---|---|---|
카테고리 | DB | ||
글쓴이 | 푸하라 | 작성시각 | 2019/08/03 10:04:38 |
|
|||
아래와 같은 구문이 있을경우 테이블 상에서 이전 데이터가 있을 경우 삭제 하고 나머지는 업데이트를 시키고 싶어서 트리거를 제작을 하였는데.. 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) | ||
없음 |