<서론>
프로시저에 비즈니스 로직이 녹아있는 프로젝트를 하다보니 여러 프로시저 안에서 다른 프로시저를 부르는 경우를 많이 봤다. 그런데 간혹 프로시저 말고, 사용자 정의 함수를 호출하는 경우도 보였는데, 갑자기 사용자 정의 함수는 왜 쓰는 건지 궁금해졌다. 계속 프로시저만 써도 될 것 같은데 어째서 사용자 정의 함수를 쓰는 걸까?
<본론>
프로시저와 사용자 정의 함수 모두 호출하게 되면 미리 정의 해놓은 기능을 수행하는 프로그램들이다. 인터넷에서 쉽게 찾을 수 있는 이 둘의 차이점이라면 아마 리턴 값인 것 같다.
프로시저는 리턴값이 없어도 되지만, 사용자 정의 함수는 꼭 있어야 한다.
또한 프로시저는 리턴값이 하나가 아닌 여러 개로 나와도 되지만, 함수는 오직 하나의 값만 있어야 한다.
인터넷에서 찾은 답은 이해하기는 쉬웠지만 와닿지는 않았다. 왜냐, 정말 차이가 저것뿐이라면 굳이 사용자 정의 함수를 쓸 필요가 없기때문이다. 프로시저로 사용자 정의 함수가 할 수 있는 일을 다 할 수 있는데, 굳이 둘을 섞어가며 쓸 이유는 없을 것이다. 그래서 좀더 인터넷을 찾아 봤다. 찾은 답은 다음과 같다.
프로시저 | 사용자 정의 함수 |
업무를 맡기는 목적 | 로직을 도와주는 목적 |
SP 안에 트랜잭션을 사용할 수 있음 | 사용자 정의 함수 안에 트랜잭션을 사용할 수 없음 |
파라미터 형식이 입,출력임 | 입력 파라미터만 가능 |
프로시저 안에서 다른 프로시저를 호출할 수 있음 | 사용자 정의 함수 안에서 프로시저를 호출할 수는 없음 |
SELECT, WHERE, HAVING 절에 프로시저를 사용할 수 없음 | SELECT, WHERE, HAVING 절에 사용자 정의 함수를 사용할 수 있음 |
try-catch 블럭을 사용할 수 있음 | try-catch 블럭을 사용할 수 없음 |
위 표와 같이 정리할 수 있는데, 특별히 굵게 처리된 부분이 사용자 정의 함수를 쓰는 이유의 핵심인 것 같다. 사실 표만 보면 프로시저는 되는데, 사용자 정의 함수는 안되는 것들이 무척이나 많다. 하지만 그 중 유일하게 가능한 것이 SELECT 쿼리 안에서는 사용자 정의 함수만 사용 가능하다는 점인 것 같다.
<결론>
배움이 부족하여 위와 같이 밖에 알아내지 못했다. 영어 실력이 좋았다면 영어로 된 문서들도 참고하면서 공부했을테지만, 한글도 제대로 못읽는 관계로 이정도로 마무리 지으려 한다.
<참고자료>
자료 출처를 적어놓지 못했다.. 원작자분들 죄송합니다.
'IT 공부 > 이론 공부' 카테고리의 다른 글
[DB]RAC, HA가 뭐지? (3) | 2019.03.20 |
---|---|
[기본] SP(Stored Procedure - 저장 프로시저) (1) | 2019.03.04 |