DELIMITER //
create function userFunc(value1 int, value2 int)
returns int
begin
return value1+value2;
end //
select userFunc(100,200); -- 결과는 300
DELIMITER
로 시작 //, $$ 와 같은 기호를 사용하여 시작과 끝을 명시함.
create Function
+ 함수이름( 매개값 타입 ) + returns
리턴 타입,
begin
과 end
사이에 함수 내용을 작성한다.
select
로 함수를 호출하고 매개값을 넣는다.
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; -- 입력한 수와 같은 사원번호를 가진 사원의 연봉을 리턴
-- 'v_empno' 를 넣으면 컬럼이 아닌 문자 데이터로 받아서 에러!
return v_sal;
end //
select get_annual_sal(7369);
declare
로 로컬 변수를 선언할 수 있다.
매개값을 받아서 쿼리를 수행하여 변수에 값을 저장한다.
변수에 값을 넣을때 <set
변수명 = 값> OR <select
컬럼 into
변수명> 을 사용.
return
을 마지막에 넣어 변수v_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) -- 입사후 오늘까지 개월 수
-- TIMESTAMPDIFF(단위, 날짜1, 날짜2); 두 날짜간의 차이를 구함
into v_sal
from emp
where empno=v_empno;
return v_sal;
end //
select get_retire_money(7369);
사원번호 7369의 퇴직급여는
select empno "사번"
, ename "성명"
, get_annual_sal(empno) "연봉"
, get_retire_money(empno) "퇴직금"
from emp;
DELIMITER // -- 프로시저의 간단한 구조
create procedure pr1(a int)
begin
select * from emp where deptno = a;
end
//
call pr1(20); -- CALL 을 이용해 호출; 사원 번호가 20인 사원의 데이터를 조회힌다.
구조는 함수와 비슷하다
프로시저는 한페이지에 하나씩만 작성한다
호출시에는 CALL 프로시저명(파라미터);
DELIMITER //
create procedure adjust_sal(v_flag varchar(20), v_empno int, v_pct int)
begin
if v_flag = 'INCREASE' then -- 매개값이 'INCREASE' 일때
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; -- if를 끝낸다
end
//
call adjust_sal('INCREASE', 7369, 10); -- 사원번호 7369의 급여를 10% 인상
<update
테이블 set
컬럼 = 값> 으로 컬럼을 수정