Cursor 예제 (MS-SQL)

CREATE TABLE 우편물(
번호 int identity(1,1)
, 우편번호 varchar(3)
, 우편주소 varchar(6)
)

INSERT INTO 우편물(우편번호, 우편주소)
VALUES('001', '코난동')
INSERT INTO 우편물(우편번호, 우편주소)
VALUES('002', '악마동')
INSERT INTO 우편물(우편번호, 우편주소)
VALUES('003', '악어동')
INSERT INTO 우편물(우편번호, 우편주소)
VALUES('004', '태오동')
INSERT INTO 우편물(우편번호, 우편주소)
VALUES('', '코난동')
INSERT INTO 우편물(우편번호, 우편주소)
VALUES('', '악마동')




CREATE TABLE 우편번호(
우편번호 varchar(3)
, 우편주소 varchar(6)
)

INSERT INTO 우편번호 VALUES('001', '코난동')
INSERT INTO 우편번호 VALUES('002', '악마동')
INSERT INTO 우편번호 VALUES('003', '거북동')
INSERT INTO 우편번호 VALUES('004', '태오동')
INSERT INTO 우편번호 VALUES('005', '악어동')

SELECT * FROM 우편물
SELECT * FROM 우편번호




--커서 선언
DECLARE cur_konan_Test CURSOR
FOR
SELECT 번호, 우편번호, 우편주소 FROM 우편물

--커서 오픈
OPEN cur_konan_Test

--변수 선언
DECLARE @v_번호 INT
DECLARE @v_우편번호 VARCHAR(3)
DECLARE @v_우편주소 VARCHAR(6)

--첫 로우 FETCH
FETCH NEXT FROM cur_konan_Test INTO @v_번호, @v_우편번호, @v_우편주소

WHILE @@FETCH_STATUS = 0
BEGIN
--FETCH된 데이터를 tempdb에 삽입
UPDATE 우편물
SET 우편번호 = (SELECT 우편번호 FROM 우편번호 WHERE 우편주소 = @v_우편주소)
WHERE 번호 = @v_번호

--다음 로우 FEETCH - 루프
FETCH NEXT FROM cur_konan_Test INTO @v_번호, @v_우편번호, @v_우편주소
END

--커서 CLOSE
CLOSE cur_konan_Test

--커서 DEALLOCATE
DEALLOCATE cur_konan_Test
GO