MySQL : Procedure란 녀석을 만났다.

TheCarDeveloper·2023년 8월 23일
0

Database

목록 보기
3/5

Procedure란 녀석을 처음 만났다.

본인이 Procedure를 처음 사용하게된 이유는 한 번의 호출로 2가지 이상의 SQL명령문을 실행 하기 위해서였다.

MySQL : Procedure 생성문

======================================================================================

CREATE PROCEDURE PROCEDURE_NAME(

// Procedure 호출 시에 전달할 PARAMETER
CODETYPEvarchar(50),CODE_TYPE varchar(50),CHANNEL_NAME varchar(100),
CHANNELZIPvarchar(50),CHANNEL_ZIP varchar(50),CHANNEL_ADDRESS varchar(100),
$CHANNEL_ADDRESS_DETAIL varchar(100),

USEYNchar(1),USE_YN char(1),REG_ID varchar(50),
CHANNELPGMIDvarchar(100),CHANNEL_PG_MID varchar(100),CHANNEL_PG_KEY varchar(200),
$CHANNEL_PG_CANCEL_KEY varchar(100)

// PARAMETER 끝
)
begin // 시작 선언

declare CHANNEL_CODE varchar(50); // 프로시져내에서 사용할 변수 선언
declare CHANNEL_SEQ varchar(50); // 프로시져내에서 사용할 변수 선언

// 처음 실행 할 SQL
set CHANNEL_SEQ = ifnull((select max(tc.CHANNEL_SEQ) from tb_channel tc), 0) + 1;

// 프로시져 내에서 선언한 변수에 값 할당
set CHANNEL_CODE = concat($CODE_TYPE,CHANNEL_SEQ);

// 두번째 실행 할 SQL
insert into tb_channel (CHANNEL_CODE, CHANNEL_NAME,CHANNEL_ZIP, CHANNEL_ADDRESS, CHANNEL_ADDRESS_DETAIL, USE_YN, REG_ID, REG_DATE, CHANNEL_PG_MID, CHANNEL_PG_KEY, CHANNEL_PG_CANCEL_KEY)
values (channel_code, $CHANNEL_NAME, $CHANNEL_ZIP, $CHANNEL_ADDRESS, $CHANNEL_ADDRESS_DETAIL, $USE_YN, $REG_ID, NOW(), $CHANNEL_PG_MID, $CHANNEL_PG_KEY, $CHANNEL_PG_CANCEL_KEY);

end; // 끝 선언

=========================================================================================

이런식으로 생성하고 호출 할 때는

CALL PROCEDURE_NAME (PARAMETER1, PARAMETER2, PARAMETER3 ...);

Procedure를 사용하면 한 번 호출에서 여러 SQL을 실행 할 수 있어 네트워크 소요시간이 줄어드는 장점을 가질 수 있지만

단점으로는 Procedure 내에서 문자나 숫자 연산을 한다면 JAVA나 C에서 보다 느린 성능을 보여주고 DB 확장이 어려워질 수 있다.

0개의 댓글