저장 프로시저를 영어로 하면 스토어드 프로시저(Stored PROCEDURE)입니다.
MSSQL에서는 작업 스케줄러라는 이름으로 제공하고 있고,
MySQL에서는 이벤트 스케줄러라는 이름으로 제공되고 있지요.
MSSQL에서 MySQL로 마이그레이션 작업을 할 때,
저장 프로시저를 마이그레이션하는 일이 굉장히 막연했습니다.
어제 하루 종일 그 작업만 하다가 시간을 보냈는데, 결국 해결을 못 했지요.
둘 사이에 구체적으로 어떤 차이점이 있는 것인지 그려볼 수 없었기 때문이
아니었나 하네요.
이 글을 읽고 하루종일 해결되지 않던 문제를 5분 만에 해결할 수 있었습니다.
(오 위대한 구글링이여! ㅡㅡ;)
아래는 퍼온 자료이지만, 몇가지를 보충했습니다.
MSSQL 에서 개발한 스토어드 프로시저(Stored PROCEDURE)를
MySQL 에서 작동이 되도록 변환하면서 터득한 차이점 및 방법을 공개합니다.
MySQL 스토어드 프로시저의 모습
DELIMITER $$;
DROP PROCEDURE IF EXISTS `test`.`test1`$$
CREATE DEFINER=`root`@`%` PROCEDURE `test1` ( $a VARCHAR(12), $b INT)
BEGIN
DECLARE $bid VARCHAR(12);
SET $bid = "wrew";
SELECT $bid, $a, $b;
END$$
DELIMITER; $$
(추가)
하지만 여기서 하루에 한번, 일주일에 한번, 한달에 한번씩 주기를 설정하는 내용이 빠져있습니다.
주기를 설정하려면 다음과 같이 코드를 수정해야 합니다.
EVERY 1 MONTH는 매월 1회라는 의미를 가지고 있습니다. 그 외에 년(YEAR),
일(DAY), 시(HOUR), 분(MINUTE), 초(SECOND) 등 여러가지 단위로
이벤트 스케줄을 짤 수 있습니다.
단순히 1회로 처리하는 방법도 있습니다. 그때는 스케줄 구문을 생략하거나
AT 구문을 추가해주면 됩니다.
| MSSQL | MySQL |
변수 명 | '@' 사용
@bid | '$'사용
$bid |
실행 방법 | exec SPDeleteItem | call test1( 'param', 1 ) |
변수 선언 | declare @bid binary(12) | declare $bid varchar(12); |
함수 인자 | create proc SPCheckBadUser
@userid varchar(12) | CREATE DEFINER=`root`@`%` PROCEDURE `test1`( $bid varchar(12) ) |
기본
사용 예 | create proc SPAddBadReport
@nickname varchar(12), @reporterid varchar(12), @reason varchar(60), @chating varchar(2500)
as
declare @bad_userid varchar(12)
@nickname, @bad_userid output
if @bad_userid is not null
begin
insert dbo.bad_report
values( @bad_userid, @nickname, @reporterid, @reason, @chating, getdate() )
end | DELIMITER $$;
DROP PROCEDURE IF EXISTS `test`.`test1`$$
CREATE DEFINER=`root`@`%` PROCEDURE `test1`( $a varchar(12), $b int )
BEGIN
declare $bid varchar(12);
set $bid = "wrew";
select $bid, $a, $b;
END$$
DELIMITER ;$$ |
라인단위 | 라인의 끝에 특수문자를 붙이지 않는다. | 라인의 끝에 특수문자 ; 를 붙인다.
select $bid, $a, $b; |
if 구문 | if @bad_userid is not null
begin
end | if $bid = '1'
then
set $a = 1;
else
set $a = 2;
END IF;
|
출처:
MSSQL에서 MySQL 스토어드 프로시저(Stored PROCEDURE) 변경방법
참고
스토어드 프로시저 (Stored Procedure) - 우너효 @ NHN NEXT
MySQL Fetch Cursor 문 사용방법 - Happy Resource
댓글