본문 바로가기

공부 기록/Database

Stored Function

Stored Function

  • 사용자가 정의한 함수
  • DBMS에 저장되고 사용되는 함수
  • SQL의 SELECT, INSERT, UPDATE, DELETE statement에서 사용할 수 있다.

⬇️ 임직원의 ID를 열 자리 정수로 랜덤하게 발급하고 싶다면 (맨 앞자리는 1로 고정)

delimiter $$
CREATE FUNCTION id_generator()
RETURNS int
NO SQL
BEGIN
ㅤㅤㅤㅤRETURN (10000000000 + floor(rand() * 10000000000));
END
$$

delimiter ;

- BEGIN 구문의 세미콜론에서 CREATE function이 끝났다고 해석될 수 있기 때문에 delimiter를 잠시 다른 것으로 변경해준다.

 

⬇️ 부서의 ID를 파라미터로 받아서 해당 부서의 평균 연봉을 알고 싶다면

delimiter $$
CREATE FUNCTION dept_avg_salary(d_id int)
RETURNS int
READS SQL DATA
BEGIN
ㅤㅤㅤㅤDECLARE avg_salary int;
ㅤㅤㅤㅤSELECT avg(salary) into avg_salary
ㅤㅤㅤㅤㅤㅤㅤㅤFROM employee WHERE dept_id = d_id;
ㅤㅤㅤㅤRETURN avg_salary;
END
$$

delimiter ;

또는

delimiter $$
CREATE FUNCTION dept_avg_salary(d_id int)
RETURNS int
READS SQL DATA
BEGIN
ㅤㅤㅤㅤSELECT avg(salary) into @avg_salary
ㅤㅤㅤㅤㅤㅤㅤㅤFROM employee WHERE dept_id = d_id;
ㅤㅤㅤㅤRETURN @avg_salary;
END
$$

delimiter ;

 

⬇️ 토익 800 이상을 충족했는지 알고 싶다면

delimiter $$
CREATE FUNCTION toeic_pass_fail(toeic_score int)
RETURNS char(4)
NO SQL
BEGIN
ㅤㅤㅤㅤDECLARE pass_fail char(4);
ㅤㅤㅤㅤIF toeic_score is null THEN SET pass_fail = 'fail';
ㅤㅤㅤㅤELSEIF toeic_score < 800 THEN SET pass_fail = 'fail';
ㅤㅤㅤㅤELSE SET pass_Fail = 'pass';
ㅤㅤㅤㅤEND IF;
ㅤㅤㅤㅤRETURN pass_fail;
END
$$

delimiter ;

또는

delimiter $$
CREATE FUNCTION toeic_pass_fail(toeic_score int)
RETURNS char(4)
NO SQL
BEGIN
ㅤㅤㅤㅤIF toeic_score is null THEN SET @pass_fail = 'fail';
ㅤㅤㅤㅤELSEIF toeic_score < 800 THEN SET @pass_fail = 'fail';
ㅤㅤㅤㅤELSE SET @pass_fail = 'pass';
ㅤㅤㅤㅤEND IF;
ㅤㅤㅤㅤRETURN @pass_fail;
END
$$

delimiter ;

stored function 삭제하기

DROP FUNCTION {stored_function_name};

등록된 stored function 파악하기

SHOW FUNCTION STATUS where DB = '{DB_name}';

- 따로 DB 이름을 명시하지 않으면 현재 활성화되어 있는 DB에 해당하는 function이 생성된다.

 

⬇️ DB 이름을 알고 싶다면

SHOW DATABASES;

 

⬇️ 함수가 어떻게 선언되어 있는지 보고 싶다면

SHOW CREATE FUNCTION {function_name};

'공부 기록 > Database' 카테고리의 다른 글

Stored Procedure  (0) 2023.11.12
Three-tier architecture  (0) 2023.07.30
Spring Data MongoDB 적용해보기  (0) 2023.06.28
MongoDB CRUD  (0) 2023.06.24
MQL, Query Filter, Operator  (0) 2023.06.24