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 |