SNOWFLAKES DRAWING PAPER

[SQL] MySQL Stored Procedure 본문

개발/Oracle/SQL/ERD

[SQL] MySQL Stored Procedure

눈송2 2009. 4. 18. 12:53

MYSQL Stored Procedure 생성(mysql 변수 이용)


/*********************************************************************
sp_get_RecordAds_Info_count(searchType int(10), searchText varchar(10));
searchType : 0(전체) 1(광고Tag)
=> return string[]
string[0] : 광고 id

string[1] : 광고Tag
*/*********************************************************************/


Drop procedure if exists sp_get_RecordAds_Info;

DELIMITER |
CREATE PROCEDURE sp_get_RecordAds_Info(searchType int(10), searchText varchar(10), stval int, retcnt int)
BEGIN

//변수를 선언하는 문장

DECLARE mysql varchar(2000);
DECLARE tempVariable varchar(10);

//변수 값을 할당
set tempVariable = '';

 

// concat : 문자열을 합쳐주는 mysql 내장함수이다.
set mysql = concat(mysql, 'select AD_ID, AD_Tag ');
set mysql = concat(mysql, 'from ADs, ');
set mysql = concat(mysql, '(select AD_ID, ADCn_ID from AdContents ) adcnInfo ');

// 문자열 내의 '를 인식시키기 위해 \' 로 표기한다.

// limit  A, B : mssql의 top과 비슷한 기능을 하는 것으로 몇번째 레코드(A) 부터 몇개(B)를 가져온다.
set mysql = concat(mysql, 'where ADs.AD_ID_PK = adcnInfo .AD_ID and AD_Tag like concat(\'%\', ? ,\'%\') limit ?,? ');

 

//set @변수명 : 프리페어드구문(prepared) : 여러 비슷한 쿼리를 실행하기 위해, 서버와 클라이언트 사이의 트래픽이 적다는 장점

// set @변수명 -> @변수 정의 문법

set @execlimitmysql = mysql;

set @execlimitSearchText = searchText ;
set @execlimitstrSearchAll = tempVariable;

set @execlimitstval = stval;
set @execlimitretcnt = retcnt;

 

/* 전체 보여주기 */
if(searchType = 0) then
      BEGIN
      prepare stmt from @execlimitmysql; 

      // ? 순서대로 들어갈 값을 가진 변수명 나열
      execute stmt using @execlimitstrSearchAll, @execlimitstval, @execlimitretcnt;

      Deallocate prepare stmt;
      END;
end if;

 

/* 광고Tag 로 검색 */
if (searchType = 1) then
      BEGIN

//프리페어드 구문 실행
      prepare stmt from @execlimitmysql; 
      execute stmt using @execlimitSearchText, @execlimitstval, @execlimitretcnt;

//자동으로 지워지지만 확실히 삭제하기 위해 deallocate prepare

//drop prepare 구문 사용 가능

      Deallocate prepare stmt;
      END;
end if;


END |
DELIMITER ;

 

/*--------------------------------------------------------------------*/

//단일행 주석 : --
-- call web_get_RecordAds_Info(1,'코카');

 

drop procedure if exists web_get_RecordAds_Info;

 

DELIMITER |
CREATE PROCEDURE WEB_GET_RECORDADS_INFO(searchType int(10), searchText varchar(10), stval int, retcnt int
BEGIN
      call SP_GET_RECORDADS_INFO(searchType, searchText, stval, retcnt) ;
END |
DELIMITER ; 


Comments