haventmetyou 2024. 1. 25. 16:46
DELIMITER //  -- INSERT 트리거
CREATE TRIGGER trg_insertedMemberTBL
	AFTER INSERT
	ON memberTBL
	FOR EACH ROW
BEGIN
	INSERT INTO deletedmembertbl
		VALUES (NEW.memberID, NEW.memberName, NEW.memberAddress, CURDATE());
END //
DELIMITER ;

INSERT INTO memberTBL VALUES ('ABCD', '테스트', '서울시 어쩌구');

 

DELIMITER //  -- 업데이트 트리거 1
CREATE TRIGGER trg_updatedMemberTBL
	AFTER UPDATE
	ON memberTBL
	FOR EACH ROW
BEGIN
	INSERT INTO deletedmemberTBL
		VALUES (NEW.memberID, NEW.memberName, NEW.memberAddress, CURDATE());
END //
DELIMITER ;

UPDATE memberTBL SET memberName = 'Test' WHERE memberID = 'ABCD';

INSERT INTO memberTBL VALUES ('QWER', 'QWER', '이게 되나');
UPDATE memberTBL SET memberAddress = '확인 중' WHERE memberName = 'QWER';

DELIMITER //  -- 업데이트 트리거 2
CREATE TRIGGER trg_updatedMemberTBL2
AFTER UPDATE
ON memberTBL
FOR EACH ROW
UPDATE deletedmemberTBL
SET
    memberID = NEW.memberID,
    memberName = NEW.memberName,
    memberAddress = NEW.memberAddress
WHERE
    memberID = OLD.memberID; -- 기존의 행을 찾아 업데이트합니다.
//
DELIMITER ;


INSERT INTO memberTBL VALUES ('FIND', '업데이트', '트리거 2');
UPDATE memberTBL SET memberID = 'GET' WHERE memberName = '업데이트';

 

모든 트리거 적용되는 것 확인 완

-- 뷰
CREATE VIEW uv_memberTBL2
AS
	SELECT memberID, memberAddress FROM memberTBL;

SELECT * FROM uv_memberTBL2

-- 스토어드 프로시저 1
DELIMITER //
CREATE PROCEDURE StProc()
BEGIN
	SELECT * FROM memberTBL ;
	SELECT * FROM productTBL ;
END //
DELIMITER ;

CALL StProc() ; 

-- 스토어드 프로시저 2 (계산)
DROP PROCEDURE IF EXISTS errorProc;
DELIMITER $$
CREATE PROCEDURE errorProc()
BEGIN
	DECLARE i INT; -- 1씩 증가하는 값
	DECLARE hap INT; -- 합계(정수형). 오버플로 발생시킬 예정
	DECLARE saveHap INT; -- 합계(정수형). 오버플로 직전의 값 저장
	
	DECLARE EXIT HANDLER FOR 1264 -- INT형 오버플로가 발생하면 이 부분 수행
	BEGIN
		SELECT CONCAT('INT 오버플로 직전의 합계 -->', saveHap);
		SELECT CONCAT('1+2+3+4+...+',i ,'=오버플로');
	END;
	
	SET i = 1; -- 1부터 증가
	SET hap = 0; -- 합계 누적
	
	WHILE (TRUE) DO -- 무한 루프
		SET saveHap = hap; -- 오버플로 직전의 합계 저장
		SET hap = hap + i; -- 오버플로가 나면 위에 수행하는 부분 수행
		SET i = i + 1;
	END WHILE ;
END $$
DELIMITER ;

CALL errorProc();