[DB] PostgreSQL 함수

Jisoo Choi·2021년 10월 18일
0
post-thumbnail

🔖 PostgreSQL의 PL/psSQL

PostgreSQL는 프로그래밍 언어를 이용해 함수를 직접 만들어 실행하기 위해 PL/psSQL이라는 언어를 제공한다. PL/psSQL를 활용한다는 것 = Stored Procedure를 사용한다는 것! 이를 이용해 Trigger를 사용할 수 있는 발판이 된다.

PL/psSQL은 PostgreSQL을 보다 편리하고 빠르게 사용할 수 있을 뿐만 아니라 데이터베이스 자체의 기능을 확장할 수 있는 기반을 제공한다.

SQL로 처리하기 복잡한 데이터의 삽입, 삭제 등을 보다 편리하게 하기 위해 고안된 것이다. 기본적으로 SQL을 이용하나, 전체적인 문법은 기존의 프로그래밍 언어와 유사하다.

Stored Procedure(저장 프로시저: SP) 란?
DB내부에 저장된 일련의 SQL명령문들을 하나의 함수처럼 실행하기 위한 쿼리의 집합. 즉, 쿼리문의 함수화 버전이다.

📌사용자 정의 함수(User-Defined Function)

절차형 SQL을 활용하여 일련의 SQL처리를 수행하고, 수행 결과를 단일 값으로 반환할 수 있는 절차형 SQL이다.

DBMS에서 제공되는 공통적 함수 이외에 사용자가 직접 정의하고 작성할 수 있다.

Function VS Procedure


  • 함수(Function): return값이 있다. 반드시 수식 내에서만 사용가능하며 함수 단독으로 문장을 구성할 수 없다. 기능을 수행해서 어떤한 목적(결과)을 도출해 내는 것.
  • 프로시저(procedure): return값이 없다. 리턴값이 없기 때문에 수식 내에서는 사용할 수 없으면 단독으로 문장을 구성할 수 있다. 프로시저는 수행하는 절차 그 자체를 목적으로 한다.
    • 함수는 프로시저를 포함하고 있는 개념. 함수들이 여러개 모여 하나의 프로그램을 구성하는 것을 "절차지향적 프로그래밍"이라고 한다.
    • 함수와 프로시저는 둘다 PL/psSQL을 이용하여 만들기 때문에 문법에 차이는 없다.
    • 프로시저의 처리속도는 함수에 비해 빠르다. → 프로시저는 서버 단에서 값을 처리, 함수는 클라이언트 단에서 처리함.
    • 함수는 Select 문에서 호출이 가능하지만, 프로시저는 select문에서 호출이 불가능하다.

✍️ 함수 만들기


CREATE [OR REPLACE] FUNCTION 함수명(arguments)
	RETURNS 도메인 타입
	LANGUAGE plpgsql  --함수가 만들어지는데 사용된 언어
DECLARE
	_TYPE
BEGIN
	<function_body>  --실제 실행 부분
	RETURN {variable_name | value}
END;

--------------------------------------------------------
ex> company 테이블의 튜플의 수(카디널리티)를 구하는 함수
CREATE [OR REPLACE] FUNCTION fn_compangTotal()
	RETURNS integer
	LANGUAGE plpgsql
DECLARE
	_CNT INTEGER;
BEGIN
	_CNT := count(*) from (
					SELECT count(*) FROM company;
	RETURN _CNT;
END;

이렇게 만든 함수는 SELECT문으로 조회할 수 있다.

SELECT fn_compangTotal();


참고:

https://genesis8.tistory.com/183

http://www.gisdeveloper.co.kr/?p=4546

https://this1.tistory.com/entry/Procedure와-Function의-차이-PLSQL-관련

https://benggri.tistory.com/76

https://hyunalee.tistory.com/15

profile
👩‍🚀 No worries! Just record

0개의 댓글