백엔드/DB

[MySQL] MySQL 프로시저, 사용자 지정 함수

tero1115 2023. 6. 12. 01:43

DELIMITER //
CREATE PROCEDURE 함수명()
begin ~~함수~~
end
//

 

사용자 지정 함수 예제1

DELIMITER //
-- 프로시져 생성
CREATE PROCEDURE pr1(a int)
begin
	select * from emp where deptno = a;
end
//
-- DELIMITER;

call pr1(10);-- 함수 사용
call pr1(20);

 

사원 급여 조정 함수 생성

DELIMITER //
-- 사원 급여 조정 프로시져 생성
CREATE PROCEDURE adjust_sal(v_flag VARCHAR(20),v_empno int, v_pct int)
begin
	if v_flag = 'INCREASE' then 
		update emp set sal=sal+(sal*(v_pct/100))
		 where empno = v_empno;
    else
		update emp set sal=sal-(sal*(v_pct/100))
		 where empno = v_empno;
    end if;
end
//
-- smith의 sal은 800 사원번호는 7369
call adjust_sal('INCREASE',7369,10); -- SMITH의 급여 10퍼 상승되어 880이 됨

DELIMITER //
create function userFunc(value1 int, value2 int)
returns int
begin
return value1 + value2;
end
//

 

함수 써서 연봉, 퇴직금 계산

-- 사원의 연봉을 구하는 함수
drop function get_annual_sal;
DELIMITER //
create function get_annual_sal(v_empno int)
returns int
begin
	declare v_sal int;
    select (sal + ifnull(comm,0)) * 12 into v_sal
	  from emp
	 where empno = v_empno;
	return v_sal;
end //

select get_annual_sal(7369);
-- 사원의 퇴직급여를 구하는 함수
DELIMITER //
create function get_retire_money(v_empno int)
returns int
begin
	declare v_sal int;
    select (sal + ifnull(comm,0))
		   * round(timestampdiff(month,hiredate,now()) / 12,0)  
      into v_sal
	  from emp
	 where empno = v_empno;
	return v_sal;
end //

select get_retire_money(7369); -- 36960
-- 함수 사용

select empno "사번"
	 , ename "성명"
     , get_annual_sal(empno) "연봉"
     , get_retire_money(empno) "퇴직금"
  from emp;

'백엔드 > DB' 카테고리의 다른 글

[MariaDB] MariaDB, DBeaver 설치  (0) 2023.07.07
[MySQL] MySQL 퀴즈  (0) 2023.06.12
[MySQL] MySQL 서브쿼리  (0) 2023.06.12
[MySQL] MySQL 뷰  (0) 2023.06.12
[MySQL] MySQL 문법  (0) 2023.06.12