본문 바로가기

데이터베이스

스칼라 함수(Scalar Function)

스칼라 함수(Scalar function)는 0개 이상의 파라메터를 받아 단 하나의 값을 반환하는 함수이다. 

 

여러 쿼리에서 공통으로 사용되는 복잡한 연산이 있다고 하자. 그리고 이 연산의 결과는 하나의 값이다.  각 쿼리마다 이 연산을 코딩을 한다면 굉장히 번거로울 것이다. 물론 관리도 비효율적이다. 연산을 변경할때 이것을 사용하는 쿼리를 모두 찾아서 바꾸어 주어야 하니 정말 막노동이다.  

 

하지만 이것을 스칼라 함수를 사용해서 처리토록하면 어떨까? 필요한 곳에 이 함수를 호출해서 결과만 받으면 된다. 

 

스칼라 함수를 만들어 보자.

 

Create Function [schema_name.]function_name (parameter_list)  
Returns data_type AS
Begin
    statements
    return value
end 

 

# Create Function 키워드 다음에 함수명(function_name)을 적는다, 함수명 앞 schema_name는 필수입력사항은 아니다.

# parametere_list는 함수 내에서 어떤 값을 받아 처리한다며 입력해주면 된다. 

  예) Create Function 함수명(@name nvarhar(10), @birth_dt date) 

# Returns data_type은 반환값의 데이터 타입을 적어준다.

# statments에는 함수에서 처리하는 연산코드를 적어준다.

# return value는 호출한 프로그램에 반환할 결과변수나 결과값을 적어준다.

 

CREATE Function dbo.GetBalance() 
returns decimal(14,4) as 

 

    declare @Balance decimal(14,4);

    select top 1 @Balance = Balance from BANK_BOOK order by STATEMENT_DT desc;

    return @Balance
end 

Bank_Book 테이블 조회 결과

이번에는 호출을 해보자.

 

select GetBalance();

가장 마지막에 입력된 잔고 0원이 출력되었다. 

 

스칼라 함수 수정은 Create를 Alter로만 변경해주면 Ok!

Alter Function [schema_name.]function_name (parameter_list)
returns data_type AS
begin
        statements
        return value
end 

 

스칼라 함수 삭제는 Drop Function  [schema_name.]function_name

 

스칼라 함수는 If 나 While과 같은 Loop문을 사용할 수 있다. 하지만 Update문은 사용할 수 없으니 주의하자.