본문 바로가기

Database

MySQL : Procedure란 녀석을 만났다.

728x90
반응형

Procedure란 녀석을 처음 만났다.

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

 

MySQL : Procedure 생성문

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

CREATE PROCEDURE `PROCEDURE_NAME`(

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

$USE_YN char(1),
$REG_ID  varchar(50),
$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 확장이 어려워질 수 있다. 

728x90
반응형

'Database' 카테고리의 다른 글

HeidiSQL에서 csv파일 import  (0) 2022.08.17
MySQL : Database 복사  (0) 2022.07.28
MySQL : CONCAT 문자열 붙이기  (0) 2022.07.28
MySQL : 데이터베이스, 사용자, 권한 생성  (0) 2022.07.27