본문 바로가기
MS-SQL

사용자 정의 함수(Function)

by 캡틴노랑이 2015. 7. 29.
반응형
사용자 정의 함수(Function)
Return문에 의해서 특정 값을 돌려주는 기능을 함.

예)
CREATE FUNCTION UFN_GETAGE(@BYEAR INT)
RETURNS INT
AS
BEGIN
 DECLARE @AGE INT
 
 SET @AGE = YEAR(GETDATE()) -@BYEAR
 RETURN @AGE

END

 

호출시(스키마 이름을 지정하지 않으면 dbo를 붙여줘야된다.)
SELECT DBO.UFN_GETAGE(2000)

 

EXECUTE를 이용한 호출
DECLARE @RETVAL INT;
EXEC @RETVAL = DBO.UFN_GETAGE 2000;
PRINT @RETVAL

 

주로 테이블을 조회할 때 사용.
SELECT DBO.UFN_GETAGE(SUBSTRING(USER_BIRTHDATE, 0, 5))
FROM DIT_USER_TBL

 

 

인라인 테이블 반환 함수.
뷰와 거의 동일한 목적으로 사용될 수 있다.
CREATE FUNCTION 함수이름(매개변수)
RETURNS TABLE
AS
BEGIN
 RETURN(단일 select 문장 )
END

 

예)

CREATE FUNCTION UFN_GETYEAR(@YEAR INT)
RETURNS TABLE
AS

RETURN(
 SELECT *
 FROM DIT_USER_TBL
 WHERE SUBSTRING(USER_BIRTHDATE, 0, 5) > @YEAR
)

select * from  dbo.UFN_GETYEAR(1980)

 

 

다중 문 테이블 반환 함수.
CREATE FUNCTION 함수이름(매개변수)
RETURNS @테이블 변수 TABLE
  (열이름과 데이터 형식 정의...)
AS
BEGIN
 위(헤더)에서 정의한 테이블에 행을 INSERT시키는 작업들...
 RETURN
END

 

CREATE FUNCTION UFN_GETYEAR2(@YEAR INT)
RETURNS @RETTABLE TABLE(USERID CHAR(12), NAME NCHAR(10), GRADE NCHAR(5))  
AS
BEGIN
 DECLARE @ROWCNT INT;
 SELECT @ROWCNT = COUNT(*) FROM DIT_USER_TBL WHERE  SUBSTRING(USER_BIRTHDATE, 0, 5) > @YEAR
 
 IF @ROWCNT <=0
 BEGIN
  INSERT INTO @RETTABLE VALUES('없음', '없음', '없음');
  RETURN;
 END  
 
 INSERT INTO @RETTABLE
 SELECT USER_NO, USER_NM,SUBSTRING(USER_BIRTHDATE, 0, 5)
 FROM DIT_USER_TBL
 WHERE  SUBSTRING(USER_BIRTHDATE, 0, 5) > @YEAR
 RETURN;
 
END

 

반응형

'MS-SQL' 카테고리의 다른 글

트랜잭션 격리 수준(SQL Server 2008, 트랜잭션과 잠금)  (0) 2015.07.29
  (0) 2015.07.29
유용한 쿼리  (0) 2015.07.28
stuff함수  (0) 2015.07.28
SQL 설정 관련  (0) 2015.07.28

댓글