스칼라 함수(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
이번에는 호출을 해보자.
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문은 사용할 수 없으니 주의하자.
'데이터베이스' 카테고리의 다른 글
Multi-statement table-valued functions in Sql Server (0) | 2020.06.06 |
---|---|
클러스터 인덱스, 비 클러스터형인데스 차이 (0) | 2020.06.05 |
테이블 반환 함수(table-valued function) (0) | 2020.06.03 |
반환 상태가 있는 저장 프로시저 사용 (0) | 2020.06.02 |
Non clustered Index (0) | 2020.06.01 |