관리 메뉴
yeznable
[ MySQL 쿼리 기초 ] 다이나믹 쿼리 본문
728x90
다이나믹 쿼리 예시를 나중에 찾아보기 쉽게 남겨둔다.
해당 쿼리는 그냥 실행시키는 건 아니고 SP 안에서 활용해야 한다.
declare v_fdate varchar(10);
declare v_tdate varchar(10);
declare v_finished integer default 0;
declare v_parts varchar(100);
declare v_pname varchar(100);
declare v_psort integer default 0;
declare cur_Items cursor for
select 'parts_1', 'name_1', 1
union all
select 'parts_2', 'name_2', 2
union all
select 'parts_3', 'name_3', 3
;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;
set v_fdate = p_fdate;
set v_tdate = DATE_ADD(p_fdate, INTERVAL 1 day);
set @stmt = concat('insert into table_to (cdate, uid, parts, parts_sort, id) ');
OPEN cur_Items;
get_Items: LOOP
FETCH cur_Items INTO v_parts, v_pname, v_psort;
IF v_finished = 1 THEN LEAVE get_Items; END IF;
set @stmt = concat(@stmt, ' select cdate, uid ');
set @stmt = concat(@stmt, ' , "',v_pname,'" parts ');
set @stmt = concat(@stmt, ' , ',v_psort,' parts_sort ');
set @stmt = concat(@stmt, ' , ',v_parts,'_ID id ');
set @stmt = concat(@stmt, ' from table_from ');
set @stmt = concat(@stmt, ' where ',v_parts,'_ID <> "0" ');
if v_parts <> 'parts_3' then
set @stmt = concat(@stmt, ' union all ');
end if;
END LOOP get_Items;
CLOSE cur_Items;
set @stmt = concat(@stmt, ' ; ');
PREPARE dquery FROM @stmt;
EXECUTE dquery;
DEALLOCATE PREPARE dquery;
728x90
'하는 일 > 데이터엔지니어링' 카테고리의 다른 글
[ 윈도우 서버 ] CMD 뜨지 않게 백그라운드 실행 (0) | 2024.11.04 |
---|---|
[ MySQL 쿼리 기초 ] JSON 파싱 (0) | 2024.10.22 |
[ MySQL 쿼리 기초 ] 랭킹 그룹화 (0) | 2024.10.22 |
[ 윈도우 서버 ] 윈도우 서버 운영기 (1) (0) | 2024.09.19 |
[ MySQL ] Federated 엔진 사용 시 Sleep 프로세스 쌓임 이슈 (0) | 2024.07.09 |