안녕하세요. 홈지기 입니다. ^^;;
2004년 이네요.....
MS_SQL는 많은 기능들이 있습니다. 저로써는 셀수도 없을 정도로 많이 있지요.
그중에는 GETDATE() , SUBSTRING() , INSULL() 과 같이 우리가 유용하게 사용하는
함수들이 있습니다.
그러나, 많은 프로그램머 들은 시스템함수만을 가지고 모든 데이타베이스 자료들을
핸들링하기에는 한계가 있다고 부르짓습니다.
참,,, 안타깝습니다..... 좀더 많고 유용한 함수들이 있다면, 얼마나 좋을까요?
저도 프로젝트들을 하면서 수도없이 그런 문제들을 만나게 된답니다.
예를 들어 테이블의 자료들을 뽑아서 함수에 넣어두고 인자값만을 넘겨서 테이블의
원하는 내용들을 뽑아올수 있으면 얼마나 좋을까요?
오라클의 경우는 decode 라는게 있어서 IF~THEN ELSE 기능을 넣어서 쉽게 조건 비교를
하게 하는 함수가 있습니다.
MS_SQL 의 경우도
case when non='0' then '초급'
when non='1' then '중급'
when non='2' then '고급'
end
같은 기능이 있기는 하지만, 상당히 길고 불편할수 있지요????
더욱 많은 함수를 사용하고 싶을때는 사용자 정의 함수를 만들어서 사용하실수 있습니다.
CREATE FUNCTION 문을 사용해서 만들고 ALTER FUNCTION 문을 이용해서 수정하고,
DROP FUNCTION문을 이용하여 삭제하실수 있습니다.
FUNCTION 구문
CREATE FUNCTION [ owner_name.] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] }
[,... n] ] )
RETURNS scalar_return_data_type
[ WITH < function_option> [ [,] ....n ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
FUNCTION 기능은 MS_SQL 2000 부터 지원하는 기능입니다.
그럼, 새로운 함수를 만들어 보도록 하겠습니다.
CREATE FUNCTION V_AREA
(@W int, @H int)
returns int
as
begin
return(@W * @H)
end
위와 같이 V_AREA 사용자 함수를 만들었습니다.
@W 값과 @H 값을 받아서 W*H 값을 구하는 사용자 함수를 만들어 보았습니다.
그럼, 쿼리분석기에서 돌리면 어떻게 될까요?
실아래의 그림은 실행화면 입니다.
어떤가요????
쉽지요?? 문법의 특성상 프로시져 구문과 많이 흡사하기 때문에 어렵게 느껴지지는 않으실거란
생각을 해 봅니다.
그럼, 위의 V_AREA 함수를 이용하여 간단한 응용을 해 보도록 하겠습니다.
역시나 간단한것이기 때문에 집중하실 필요는 없으실것 같습니다.
위의 함수를 이용한 예제 입니다.
select board_idx,title,dbo.V_area(num,2) as num from board1
쿼리분석기에서 위 소스를 돌려보세요.
게시판의 num 가 있습니다.
이값을 @W 로 넣고 @H 값에 2 값을 넣었습니다.
값을 출력해 보면, NUM*2 값이 되어서 출력되는걸 알수 있으실 겁니다.
위의 함수는 너무나 간단한 함수이기 때문에 쓸모가 없다고 느껴지실지 모르겠으나,
원리를 잘 이해하시면, 응용은 얼마든지 가능하리란 생각이 듭니다.
오늘 배운 내용은 스칼라함수 라고 합니다.
스칼라함수는 단일 데이터 값을 함수를 말한답니다.
다음시간은 테이블의 값을 불러오는 예제를 해 보도록 하겠습니다.