mysql procedure 관련질의드립니다. (소스 포함) 0 0 1,716

by 비연 [MySQL] mysql procedure event scheduler delete insert [2017.11.07 12:55:30]


mysql procedure 관련 문의드립니다.

A,B,C 라는 테이블이 있습니다

1. A테이블의 데이터를 조건에 맞게 가져온뒤(여러개의 Row) 가져온 데이터의 key를 기준으로 B 테이블을 업데이트합니다.

2. A테이블에서 가져온 데이터들은 가져와서 업데이트 했다는 의미로 A의 특정컬럼을 'Y' 로 업데이트합니다.

3. 마지막으로 A테이블에서 가져온 데이터들을 C라는 테이블에 insert 하고 싶습니다.

이 3가지 조건을 만족시키기 위해 프로시져를 활용할까 하는데, 프로시져를 어떻게 구현해야 하는지 조언 부탁드려 봅니다.

cursor 도 이용해야 하고 loop도 이용해야 한다고 하는데, 이해가 잘 되지 않습니다.

일단 select 해온뒤 insert 하는 구문을 만들어봤는데, 실제로 업데이트는 되지가 않습니다. 어디 부분이 잘못된건지 모르겠네요..실행은 정상적으로 되었다고 하는데..

도움 부탁드립니다.

 

DELIMITER $$
DROP PROCEDURE IF EXISTS `vcs`.`sp_mes_warehousing_info` $$
CREATE PROCEDURE `vcs`.`sp_mes_warehousing_info`( IN r_roder_status VARCHAR(32),IN r_lgort VARCHAR(32), IN r_cs_use_yn VARCHAR(32) ) 
BEGIN
DECLARE m_rma_no  VARCHAR(32);
-- DECLARE m_필드값2 VARCHAR(32);
-- DECLARE m_

DECLARE m_Done INT DEFAULT 0;
 
/* 여기에 커서를 정의 합니다. */
DECLARE m_Cursor CURSOR FOR
SELECT zcsreq
FROM vmes.raw_vendor_result
WHERE rorder_status = r_roder_status AND lgort = r_lgort AND cs_use_yn = r_cs_use_yn;
  
/* 데이터가 없으면 m_Done에 1 */
DECLARE CONTINUE HANDLER FOR NOT FOUND SET m_Done=1;
OPEN m_Cursor;

/* 반복합니다. */ 
REPEAT
 /* 반환된 필드값을 변수에 담습니다. */
FETCH NEXT FROM m_Cursor INTO m_rma_no;
   
IF NOT m_Done THEN
  
   /* 수행할 쿼리리 여기에 작성합니다. */   
   -- INSERT INTO 테이블2( 필드명1, 필드명2 ) VALUES( m_필드값1, m_필드값2 );
   UPDATE vcs.cs_csr SET csr_status = '44' WHERE csr_no = (select csr_no from cs_rma where rma_no = m_rma_no); 
   
END IF;
 
/* m_Done이 1이 될때까지 반복 합니다. */
UNTIL m_Done END REPEAT;

CLOSE m_Cursor;
END $$
DELIMITER ;

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