DB Stored function

지식저장공간·2023년 5월 23일
0

DB

목록 보기
5/19

Stored function

사용자가 정의한 함수이며, DBMS에 저장되고 SQL과 함께 사용할 수 있다.

예제

예제1

delimeter $$ (쿼리의 구분자, 마무리 부분을 $$로 변경한다.)
변경하지 않을시 ; (세미콜론)을 만나게되면 함수 정의가 마무리된다.

CREATE Function 함수명()
RETURNS 반환타입
NO SQL (mysql에서는 반드시 입력해야한다. - mysql 문법)
BEGIN (함수 정의 시작)
	RETURN(함수 구현);
END (함수 정의 끝)
$$
delimeter ; (쿼리 구분자 원복)

insert into 테이블
values(함수(), ...)
values(id_generator(), ...)

Function을 정의하면 값을 생성하거나 반환받아 사용할 수 있다.

예제2

delimeter $$

CREATE FUNCTION 함수명(변수명 자료형)
RETURNS 반환타입
READS SQL DATA
BEGIN
	DECLARE 변수명 자료형;
    select avg(salary) into avg_sal //평균연봉을 변수 avg_sal에 대입
    from employee
    where dept_id = d_id; // 파라미터로 넘어온 d_id
    RETURN avg_sal;
END

delimeter ;    

예제3

다른 역할

등록된 Function 파악하기

회사에서 사용하고 있는 Function이 있는경우 파악하는 방법

1. 등록되어있는 Function 명 파악하기

SHOW FUNCTION STATUS WHERE DB='데이터베이스명';

2. Function 구현 코드 파악하기

SHOW CREATE FUNCTION 함수명;

Stored Function은 언제써야할까

회사에서 사용하는 방법대로 사용한다. + 추가적 의견

Three-tier architecture

비즈니스 로직의 일부가 Data tier에 존재하는건 좋지 않다.
비즈니스 로직은 Logic tier에 존재하도록 구현한다.

toeic 점수에 따라 fail, pass를 정하는 정책은 비즈니스 정책이다. Data tier랑은 관련이 없다.
또한, 기준 점수가 변경될 수 있기 때문에 점수에 따른 정책은 비즈니스 로직이다.
이러한 구현을 가지고 있는 Function은 Date Tier가 아닌, Logic Tier에서 점수에 대한 로직을 구현하는게 좋다.

비즈니스 로직은 가지고 있으면 Logic Tier로, 비즈니스 로직없이 단순 값에 대한 계산인 경우 Data Tier에서 활용하는것도 생각해보자.

출처 : 쉬운코드 유튜브

profile
발전하는 개발자가 꿈입니다. 지식을 쌓고 지식을 활용해 목표 달성을 추구합니다.

0개의 댓글