개발공작소
article thumbnail
728x90
반응형

저장 프로시저(함수)란?

SQL로 만든 함수로, 이 함수 안에는 여러 SQL문을 작성하여 사용이 가능하다.

저장 프로시저(함수)를 사용하는 이유는?
단위 하나로 작업을 만들어 필요할 때마다 호출이 가능하며, 이는 반복적인 작업을 줄여주며, 
여러개의 SELECT문이나 UPDATE, INSERT문을 하나의 프로시저(함수)에서 묶어 실행함으로써,
불필요한 네트워크 통신 횟수를 줄여 더 빠르게 DBMS연산 결과를 얻을 수 있다.
또한 프로시저(함수) 호출 시 인자만을 변경하여 빠르고 쉽게 재활용이 가능하다.

Postgres에서는 PL/pgSQL을 활용하며 이는 Oracle의 PL/SQL과 유사하다.

사용자 정의함수 기본문법

1. function_name : 생성하고자 하는 사용자 함수의 이름

2. param1, param2 : 함수에서 사용하고자 하는 인수. 인수 뒤에 타입이 붙는다.

3. return_type : 쿼리 실행후 반환 할 결과의 타입.  ex) INTEGER, CHAR....

4. language_name : 어떤 언어를 사용할 지 정함. (postgres의 경우  PL/pgSQL 언어를 사용하므로 항상 plpgsql로 사용)

5. code : 실제로 실행할 쿼리문. BEGIN과 END사이에 들어간다.

6. $function$ : 실행 할 문의 시작과 끝에 붙으며, $$로 대체 가능.

 

샘플 함수

 

위의 함수는 int형 파라메터 2개를 받아 
더한 값을 반환해주는 함수이다. 실제로 파라메터 값만 바꿔 쉽게 빠르고 재활용 하는 모습을 볼 수 있다.

사용자함수는 다음과 같이 크게 선언부, 실행부, 예외처리부로 나뉠 수 있다.

기본 문법2
샘플 함수2

위의 샘플 함수2는 각 3파트에 맞게 작성한 간단한 함수이다. 그냥 사용자명을 받아 해당 사용자명을

가진 사용자를 카운트하여 변수에 담고 만약 사용자수가 0이면 예외메세지를 뿌리고, 아니면 변수를 반환하는 문이다.

 

솔직히, 변수를 선언하지 않고, 바로 해당 카운트값을 리턴해 줘도 되지만, declare를 활용하려고 어거지로 만들었다..

결과는 아래와 같다.

 

왼쪽은 잘가져왔고, 오른쪽은 IF문에 걸려서 에러메세지를 뿌려준다..

위에서 사용한 select 결과값 into 변수 from .... 은 테이블에서 가져온 값을 변수에 담아라. 라는 의미로,

declare에서 선언한 변수에 값을 넣어주기 위해 사용하였다.

 

샘플 함수3

위와 같이 파라메터를 3개 받아서 값이 있으면 배열에 계속 담아가는 식으로도 할 수 있다. 결과는 아래와 같다.

함수를 배워놓으면 개발을 할 때 도움이 많이 될 거 같다. 끝

 

 

참조링크

http://postgresqldbnews.blogspot.com/2007/10/best-way-to-handle-no-data-found-in.html

728x90
반응형
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!