저장 프로시저(함수)란?
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는 각 3파트에 맞게 작성한 간단한 함수이다. 그냥 사용자명을 받아 해당 사용자명을
가진 사용자를 카운트하여 변수에 담고 만약 사용자수가 0이면 예외메세지를 뿌리고, 아니면 변수를 반환하는 문이다.
솔직히, 변수를 선언하지 않고, 바로 해당 카운트값을 리턴해 줘도 되지만, declare를 활용하려고 어거지로 만들었다..
결과는 아래와 같다.
왼쪽은 잘가져왔고, 오른쪽은 IF문에 걸려서 에러메세지를 뿌려준다..
위에서 사용한 select 결과값 into 변수 from .... 은 테이블에서 가져온 값을 변수에 담아라. 라는 의미로,
declare에서 선언한 변수에 값을 넣어주기 위해 사용하였다.
위와 같이 파라메터를 3개 받아서 값이 있으면 배열에 계속 담아가는 식으로도 할 수 있다. 결과는 아래와 같다.
함수를 배워놓으면 개발을 할 때 도움이 많이 될 거 같다. 끝
참조링크
http://postgresqldbnews.blogspot.com/2007/10/best-way-to-handle-no-data-found-in.html
'데이터베이스 > 쿼리' 카테고리의 다른 글
[Postgres] 기본적인 배열함수를 알아보자 ( feat. array_agg, array_to_string, string_to_array, unnest) (0) | 2022.02.03 |
---|---|
[Postgres] 중복값을 체크해보자. ( feat. GROUP BY, HAVING ) (0) | 2022.01.28 |
[SQL] VIEW TABLE(뷰 테이블) 생성, 조회, 수정, 삭제 (0) | 2022.01.18 |
[Postgres] Procedure(프로시저), Function(함수) 생성 및 사용 (1) | 2022.01.17 |
[SQL] JOIN에 대한 정리 ( INNER, OUTER, LEFT, RIGHT ) (1) (0) | 2022.01.09 |