이번에 프로젝트를 하면서 프로시저 이야기가 나와서 한번 정리를 해보았다.
오라클을 공부할 때는 프로시저를 많이 들어봤었는데, Postgres에서는 프로시저에 대한 내용을 찾을 수 없어
구글링을 해보니,
** Postgres에서는 저장 프로시저(stored Procedure)를 사용하지 않고 함수(Funtion)를 사용한다고 한다. **
쉽게 말해서 Postgresql에서 우리가 아는 Procedure = Function 이라고 생각하면 될 것 같다.
** 함수가 프로시저를 포함하고 있기 때문, Postgres에서 프로시저를 사용하지 못하는 것은 아니다.
프로시저와 함수 둘 다 사용 가능. 본문에서는 프로시저와 함수 둘다 생성해보고 사용해보겠다.
여기서 저장 프로시저란(함수)? 다음과 같다.
프로시저와 함수는 비슷하지만 크게 다른 것은 리턴값이 필수냐 아니냐이다.
프로시저는 리턴값이 있을수도 있고, 함수는 리턴값이 존재해야한다.
프로시저는 CALL 로 호출 해야하고, 함수는 SELECT로 호출해야 한다.
1. 프로시저 (Procedure)
프로시저는 리턴값이 있을 수도 없을 수도 있으며, CALL 또는 로 호출이 가능하다. 그럼 직접 프로시저를 생성해보자.
New Function을 이용하여 Type을 Function과 Procedure 둘 중 하나를 선택 할 수 있는데,
Procedure를 선택하면 Return type이 기본적으로 없어진다. 왜 그런지는 나중에 알게 되면 후첨하도록 함. 많은 사람들이 Procedure은 return 값이 없다고 한다..
그럼 위 이미지와 같이 Procedure가 생성이 된다. 여기에 내가 원하는 작업을 실행해주는 Procedure을 작성해보자.
나는 파라메터로 할인율을 받아 상품에 해당 할인율을 적용시켜주는 Procedure을 만들어 보겠다.
위 Procedure를 보면 sender, amount라는 파라메터를 받는다. 파라메터 앞에 있는 'IN'은 해당 파라메터를 이 Procedure안에서 사용하겠다는 의미인데, 필수는 아니다.
그리고 Begin과 End 사이에 실제도 동작 할 쿼리문을 작성하여 준다.
그럼 다음과 같이 호출을 할 수 있다..
<좌> 프로시저 호출전 <우> 프로시저 호출후
그럼 위와 같이 작동한다. id가 1인 사용자의 balance값을 15% 감소시켰다. 해당 샘플은 간단하게 작성 되었지만,
복잡한 쿼리문을 작성해둔다면 쉽게 쉽게 복잡한 쿼리문을 호출 할 수 있다는 장점이 있다.
2. 함수 (Function)
이제 함수를 만들어보겠다. 복잡한 쿼리문을 간단히 호출 할 때 자주 사용되며, 반드시 return값이 있어야 한다.
해당 함수는 sender이라는 파라메터를 받아, 어떤 사용자의 할인가격을 추출 해주는 함수이다. 그리고 다음과 같이
호출한다.
이렇게 호출을 하면 Bob이라는 파라메터를 넣고 Bob의 할인가격울 리턴해준다.
아래는 같은 값을 리턴해준다.
상항에 따라 사용하면 될 것 같다. 정리하면서 이해가 잘 안된 게
여기서는 사용방법만 간단히 알아보고 심화내용은 나중에 정리해야겠다
'데이터베이스 > 쿼리' 카테고리의 다른 글
[Postgres] Procedure(프로시저), Function(함수) 정리 (0) | 2022.01.18 |
---|---|
[SQL] VIEW TABLE(뷰 테이블) 생성, 조회, 수정, 삭제 (0) | 2022.01.18 |
[SQL] JOIN에 대한 정리 ( INNER, OUTER, LEFT, RIGHT ) (1) (0) | 2022.01.09 |
[Postgres] 월별/주별/일별 통계 (2) (0) | 2022.01.08 |
[Postgres] 월별/주별/일별 통계 (1) (0) | 2022.01.08 |