반응형
MySQL 저장프로시저
내가 익숙치 않거나 못해서 그런걸수도 있지만 정말로 쓰다보니.. 많이 부족함과 불편함이 이만 저만이 아니다.
그리고 너무 많은 구글링 필요하다;;
MySQL 저장프로시저를 만들고 사용하다 보면 MS-SQL Server 와 오라클의 저장프로시저가 너무나 그리워
진다. 역시.. 돈들여서 안좋은건 없다고.. 다시한번 또..새삼스럽게..ㅎㅎ
일단 샘플로 간단하게 MySQL 저장프로시저 올린다.
DELIMITER $$ DROP PROCEDURE IF EXISTS SP_EMP_DPT_UPDATE $$ CREATE PROCEDURE SP_EMP_DPT_UPDATE( IN_UNION_QUERY_TEXT VARCHAR(1500), IN_EMP_NO INT, OUT OUT_RETURN_VALUE TINYINT ) BEGIN DECLARE INSERT_QUERY_STRING VARCHAR(1500); DECLARE CATCH_ERROR TINYINT; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET CATCH_ERROR = -1; SET AUTOCOMMIT = 0; SET SQL_SAFE_UPDATES = 0; START TRANSACTION; DROP TEMPORARY TABLE IF EXISTS TEMP_MEMBER_EMP_DPT; CREATE TEMPORARY TABLE TEMP_MEMBER_EMP_DPT ( EMP_DPT_NO INT, EMP_NO INT, DPT_NAME VARCHAR(100), DPT_AUTH TINYINT ) engine = memory; SET @INSERT_QUERY_STRING = CONCAT("INSERT INTO TEMP_MEMBER_EMP_DPT (EMP_DPT_NO, EMP_NO, DPT_NAME, DPT_AUTH) ", IN_UNION_QUERY_TEXT); PREPARE STMT FROM @INSERT_QUERY_STRING; EXECUTE STMT; DEALLOCATE PREPARE STMT; UPDATE MEMBER_EMP_DPT AS A INNER JOIN TEMP_MEMBER_EMP_DPT AS B ON A.EMP_DPT_NO = B.EMP_DPT_NO SET A.DPT_NAME = B.DPT_NAME WHERE A.EMP_NO = IN_EMP_NO; INSERT INTO MEMBER_EMP_DPT (EMP_NO, DPT_NAME, DPT_AUTH) SELECT EMP_NO, DPT_NAME, DPT_AUTH FROM TEMP_MEMBER_EMP_DPT WHERE EMP_DPT_NO NOT IN (SELECT DISTINCT EMP_DPT_NO FROM MEMBER_EMP_DPT WHERE EMP_NO = IN_EMP_NO) AND EMP_NO = IN_EMP_NO; IF CATCH_ERROR < 0 THEN ROLLBACK; SET OUT_RETURN_VALUE = 0; ELSE COMMIT; SET OUT_RETURN_VALUE = 1; END IF; DROP TEMPORARY TABLE IF EXISTS TEMP_MEMBER_EMP_DPT; SELECT OUT_RETURN_VALUE; END$$ #DELIMITER ;
반응형
'DataBase > MySQL' 카테고리의 다른 글
참조키 선언시 에러 (0) | 2014.11.26 |
---|---|
우분투에서 mysql 삭제 후 재설치 (0) | 2014.11.26 |
임시테이블 - Temproray Table (0) | 2014.03.26 |
MySQL 에러처리 (0) | 2014.03.26 |
저장 프로시저 관련 포스팅 (0) | 2014.03.26 |
댓글