태그: 임시테이블, 다중테이블반환함수, 과거년도 조회, MSSQL
□ 목적
○ 임시 테이블을 사용하여 귀찮은 일련의 절차를 다중 테이블반환함수로 작성한 뒤
○ DB 단에서 모두 처리한 후 화면단으로 가져올 수 있습니다.
□ 작업
○ 다음처럼 DB상에서 직접 과거 5개년도를 CODE, NAME 으로 가져와야 할 때가 있습니다.
○ JSP나 JAVA에서도 해도 되지만 번거롭기 때문에 간단한 테이블 반환함수를 작성해봅니다.
□ NULL로 할 경우 당해년도 포함 과거 5개년 데이터 조회
SELECT * FROM FN_FIVE_YEARS(NULL)
□ 매개변수 넣어줄 경우 – 해당년도로부터 과거 5개년
SELECT * FROM FN_FIVE_YEARS(2017)
--펑션 생성문
CREATE FUNCTION [dbo].[FN_FIVE_YEARS]
(
--입력변수 지정(기본 널값)
@END_YEAR INT = NULL
)
--반환값 지정
-- 여기에선 테이블 반환
RETURNS
@YEAR_TBL TABLE --임시테이블명
(
CODE CHAR(4) --컬럼
,NAME CHAR(4) --컬럼
)
AS
BEGIN
--변수 선언하기
DECLARE @CODE_YEAR INT
DECLARE @NAME_YEAR INT
DECLARE @IDX INT
--입력변수 널로 들어오면 현재 년도 세팅
IF @END_YEAR IS NULL
BEGIN
SET @CODE_YEAR = YEAR(GETDATE())
SET @NAME_YEAR = YEAR(GETDATE())
END
--아니라면 입력변수로 세팅
ELSE
BEGIN
SET @CODE_YEAR = @END_YEAR
SET @NAME_YEAR = @END_YEAR
END
--WHILE문 돌릴 INDEX 변수에 값 세팅
SET @IDX = 0
--4번 돌림(현대 2018포함 5개년)
WHILE @IDX <= 4
BEGIN
--임시테이블에 값을 넣고 (현재년도)
INSERT INTO @YEAR_TBL (CODE, NAME) VALUES (@CODE_YEAR,@NAME_YEAR )
--변수의 값을 (-1) 차감
SET @CODE_YEAR = @CODE_YEAR - 1
SET @NAME_YEAR = @NAME_YEAR - 1
--반복문 IDX 증가
SET @IDX = @IDX + 1
END
--테이블 리턴 @YEAR_TBL
RETURN
END
GO
'IT 공부 > SQL, DB' 카테고리의 다른 글
[MS SQL] FOR XML PATH와 STUFF 활용 (0) | 2018.11.28 |
---|---|
[MS SQL] split 분할 반환 함수 (문자형, 정수형) (0) | 2018.11.28 |
[MS SQL] PRIMARY KEY 컬럼에 널체크시 INDEX 풀림(속도 느려짐) (0) | 2018.10.31 |
[MySQL] 한글 문자 ???? 깨져서 저장되는 현상 (UTF8) (0) | 2018.10.31 |