SNOWFLAKES DRAWING PAPER
[SQL] MySQL Stored Procedure 본문
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 ;
'개발 > Oracle/SQL/ERD' 카테고리의 다른 글
[SQL] MYSQL :: show table status (0) | 2009.04.18 |
---|---|
[SQL] MySql 데이터 타입 (0) | 2009.04.18 |
[SQL] MySQL 기본적인 명령어 (0) | 2009.04.18 |
[ERD] MySQL Workbench를 이용한 ER diagram 작성 및 sql import/exrpot (0) | 2009.04.15 |
[SQL] InnoDB 와 MyISAM (0) | 2009.04.15 |