본문 바로가기
호구지책/DB

[MySQL] MSSQL에서 MySQL로 저장 프로시저 마이그레이션

by 하늘의흐름 2016. 3. 3.
반응형

저장 프로시저를 영어로 하면 스토어드 프로시저(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



반응형

댓글