- 프로시저
- 트리거
DELIMITER는 구문문자 정의의 기능을 한다. EX) DELIMIETER $$ -> $$를 C언어에서 ; 처럼 사용하겠다는 선언
> DELIMITER로 PROCEDURE 정의 문자 선언을 안하면, 내부 구문과 프로시저 구문의 구분이 어렵다.
> 마지막에 DELIMITER ;를 한 이유도 마찬가지로 다시 구문문자 정의를 ;로 바꾸기 위함이다.
@는 세션이 끝나기 전까지 변수를 유지해주는 역할을 한다. 이는 프로시저가 끝나고도 변수의 값을 유지한다
> 매개변수 활용 프로시저
DELIMITER $$
CREATE OR REPLACE PROCEDURE getName(
IN `name` CHAR(10),
OUT userName CHAR(15)
)
BEGIN
SELECT uname
INTO userName
FROM usertbl
WHERE uname = `name`;
END$$
DELIMITER ;
CALL getName('이승기', @namie);
SELECT @namie;
> if then문 활용
DELIMITER $$
CREATE OR REPLACE PROCEDURE empProc(
IN id CHAR(3)
)
BEGIN
DECLARE `year` INT;
SELECT YEAR(hire_date)
INTO `year`
FROM employee
WHERE emp_id = id;
if `year` >= 2010 then
SELECT '10년대 입사';
ELSEIF `year` >=2000 then
SELECT '00년대 입사';
ELSE SELECT '입싸';
END if;
END $$
DELIMITER ;
CALL empProc('209');
> case when then문 활용
DELIMITER $$
CREATE OR REPLACE PROCEDURE gradeProc(
IN score TINYINT
)
BEGIN
DECLARE grade CHAR(2);
case
when score >= 90 then SET grade = 'A';
when score >= 80 then SET grade = 'B';
when score >= 70 then SET grade = 'C';
ELSE SET grade = 'F';
END case;
SELECT grade;
END$$
delimiter ;
CALL gradeProc(90);
> while do 문 활용
DELIMITER $$
CREATE OR REPLACE PROCEDURE sumProc()
BEGIN
DECLARE i INT;
DECLARE SUM INT;
SET i = 1;
SET SUM = 0;
while i <= 10 do
SET SUM = SUM + i;
SET i = i + 1;
END while;
SELECT CONCAT('1부터 10까지의 합:', SUM);
END$$
DELIMITER ;
CALL sumProc();
> sql error handler
> DECLARE CONTINUE/EXIT/UNDO HANDLER FOR NOT FOUND/SQLEXCEPTION ...
DELIMITER $$
CREATE OR REPLACE PROCEDURE handleProc()
BEGIN
DECLARE CONTINUE handler FOR SQLEXCEPTION
SELECT 'error emerge';
SELECT '안녕';
END$$
DELIMITER ;
CALL handleProc();
DROP PROCEDURE handleProc;
DELIMITER $$
CREATE OR REPLACE TRIGGER inserTrigger
AFTER insert ON employee
FOR EACH row
BEGIN
--
END$$
DELIMITER ;