728x90
반응형

/*
 1. CURSOR 의 사용
  1) CURSOR 를 정의
  2) CURSOR를 이용하여 인출할 테이블 조회
  3) CURSOR 를 사용하기 위해 OPEN한다.
  4) CURSOR의 첫번째 ROW를 인출하여 @COLNAME, @ITEMNAME 변수에 저장한다.
  5) 조회 결과의 마지막 까지 순서대로 한 ROW씩 인출하여 활용 [WHILE @@FETCH_STATUS = 0]
  6) OPEN 되어 있는 CURSOR를 CLOSE
  7) CURSOR 참조를 제거한다.
*/


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[UP_PROCEDURE]
 @SEQ VARCHAR(20)
AS

DECLARE @SQLSTMT VARCHAR(8000)
DECLARE @COLNAME VARCHAR(50)
DECLARE @ITEMNAME VARCHAR(50)

-- CURSOR 를 정의
DECLARE INSPDATA_CUR CURSOR FOR

-- IN에 지정한 항목명에 해당하는 ROW를 조회한다.
SELECT COLNAME,ITEMNAME FROM [TB_COL]
WHERE EQGRID = 'A28'
AND ITEMNAME  IN ('X', 'Y', 'BB', 'CC')
ORDER BY COLNAME

SET @SQLSTMT = ''

-- CURSOR 를 사용하기 위해 OPEN한다.
OPEN INSPDATA_CUR

-- CURSOR의 첫번째 ROW를 인출하여 @COLNAME, @ITEMNAME 변수에 저장한다.
FETCH NEXT FROM INSPDATA_CUR
  INTO @COLNAME, @ITEMNAME

-- 현재 연결에서 연 모든 커서에 대해 실행된 마지막 커서 FETCH 문의 상태를 반환합니다.
-- 0 : FETCH 문이 성공적으로 수행되었습니다.
-- -1 : FETCH 문이 실패했거나 행이 결과 집합의 범위를 벗어났습니다.
-- -2 : 인출된 행이 없습니다.
WHILE @@FETCH_STATUS = 0
BEGIN
  SET @SQLSTMT = @SQLSTMT + @COLNAME + ' AS ' + @ITEMNAME + ', '     
  FETCH NEXT FROM INSPDATA_CUR
  INTO @COLNAME,@ITEMNAME
END
  PRINT @SQLSTMT
 
IF LEN(@SQLSTMT) <> 0 
BEGIN

SET @SQLSTMT = SUBSTRING(@SQLSTMT, 1,LEN(@SQLSTMT)-1)
SET @SQLSTMT = 'SELECT ' + @SQLSTMT + ' FROM [TB_DATA] '
 
  PRINT @SQLSTMT
exec (@SQLSTMT)

END

-- OPEN 되어 있는 CURSOR를 CLOSE
CLOSE INSPDATA_CUR
-- CURSOR 참조를 제거한다.
DEALLOCATE INSPDATA_CUR   

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,