본문 바로가기

DB/Oracle

procedure(프로시저)와 function(함수)의 차이

가장 큰 차이는 서버의 DB에 얼만큼 접속을 하고 데이터 전송을 주고 받느냐는 차이죠...

질문중에 
"함수는 리턴값을 갖는 프로시저다.
프로시저는 리턴값이 없다."
이렇게 물어보셨는데 이건 틀린것입니다.

이유는 사실 함수나 프로시져나 구조는 같습니다.

반복되는 코딩을 로직화 하기 위하여 함수나 프로시져를 사용한다고 보시면
가장 이해가 빠를듯 한데...

두가지 다 파라미터값을 지정하고 리턴값을 가집니다.

어떻게 설명을 드려야 가장 쉽게 이해를 하실지 고민되네요...^^

실 사용방법을 예를 들어 설명드리자면...

프로시져의 경우 코딩을 서버(DB상)에서 합니다.
하지만 함수의 경우엔 클라이언트에서 하죠...

프로시져는 화면단(클라이언트)에서 프로시져에게 값을 건네주면(호출하면)...
프로시져는 받은 값을 가지고 서버에서 혼자 지지고 볶고 해서
원하는 값을 걸러내면 그 값을 호출했던 클라이언트에게 넘겨주는 것이구요...

함수는 화면단에서 함수에게 값을 건네주면(호출하면)
함수는 서버에서 필요한 값들을 가지고 와서 자체적으로 지지고 볶고 해서
원하는 값을 걸러내고 그 값을 호출했던 클라이언트에게 넘겨주는 것이지요...

당연히 속도는 프로시져가 빠르구요...
(이유는 서버가 속도가 훨씬 빠르기 때문이죠...)

편의를 위한 경우가 있습니다.

A, B, C라는 화면이 있습니다.
A, B, C 화면에서 FUN이라는 함수를 사용합니다.
하지만 ACCESS는 자기 화면에서밖에 안됩니다.
그렇기 때문에 같은 로직의 같은 함수지만
A, B, C 에 다 선언해야 합니다.

이걸 글로벌로 선언하게 되면 하나로 가능한 거죠...
A, B, C는 다른 화면의 FUNCTION 으로는 접속이 안되지만
하나의 DB에 선언되어 있는 프로시져로는 접속이 가능하기 때문이죠...


출처 | http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10205&docId=69910515&qb=b3JhY2xlIO2UhOuhnOyLnOyggCBvdXQ=&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=SD6F2lpySo0ssaW%2BL1Rssssssvd-363529&sid=bu7HbDilzL99fwxJecx8lQ%3D%3D