사용자가 정의한 함수이며, DBMS에 저장되고 SQL과 함께 사용할 수 있다.
delimeter $$ (쿼리의 구분자, 마무리 부분을 $$로 변경한다.)
변경하지 않을시 ; (세미콜론)을 만나게되면 함수 정의가 마무리된다.
CREATE Function 함수명()
RETURNS 반환타입
NO SQL (mysql에서는 반드시 입력해야한다. - mysql 문법)
BEGIN (함수 정의 시작)
RETURN(함수 구현);
END (함수 정의 끝)
$$
delimeter ; (쿼리 구분자 원복)
insert into 테이블
values(함수(), ...)
values(id_generator(), ...)
Function을 정의하면 값을 생성하거나 반환받아 사용할 수 있다.
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 ;
회사에서 사용하고 있는 Function이 있는경우 파악하는 방법
SHOW FUNCTION STATUS WHERE DB='데이터베이스명';
SHOW CREATE FUNCTION 함수명;
회사에서 사용하는 방법대로 사용한다. + 추가적 의견
비즈니스 로직의 일부가 Data tier에 존재하는건 좋지 않다.
비즈니스 로직은 Logic tier에 존재하도록 구현한다.
toeic 점수에 따라 fail, pass를 정하는 정책은 비즈니스 정책이다. Data tier랑은 관련이 없다.
또한, 기준 점수가 변경될 수 있기 때문에 점수에 따른 정책은 비즈니스 로직이다.
이러한 구현을 가지고 있는 Function은 Date Tier가 아닌, Logic Tier에서 점수에 대한 로직을 구현하는게 좋다.
비즈니스 로직은 가지고 있으면 Logic Tier로, 비즈니스 로직없이 단순 값에 대한 계산인 경우 Data Tier에서 활용하는것도 생각해보자.