아래와 같이 조건문에 의한 sql을 생성후 그 변수를 커서에 쓰고 싶은데..
가능한지 알고 싶습니다.
아니면 커서 선언시 동적 sql을 생성할수 있는 방법이 있을까요?.
DELIMITER $$
DROP FUNCTION IF EXISTS `db_svn_auth`.`FC_getDmList`$$
CREATE DEFINER=`irteam`@`%` FUNCTION `FC_getDmList`(p_svc_id varchar(20), p_comp_id varchar(20)) RETURNS text CHARSET euckr
DETERMINISTIC
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE dm_all varchar(1000);
DECLARE dm varchar(100);
DECLARE v_query text;
IF p_comp_id != '' THEN
set v_query = "select concat(b.user_nm ,'/',b.dept_nm ) dm
from BD_MENUTREE_DET a, BD_DM_MSTR b, BD_DEPT c
where a.svc_id = p_svc_id
and a.comp_id = p_comp_id
and a.priv_cd ='U1'
and a.INUSE_EN = 'Y'
and b.dept_nm = c.dept_nm
and a.user_id = b.user_id
group by b.user_nm,b.dept_nm";
ELSE
set v_query = "select concat(b.user_nm ,'/',b.dept_nm ) dm
from BD_MENUTREE_DET a, BD_DM_MSTR b, BD_DEPT c
where a.svc_id = p_svc_id
and a.priv_cd ='U1'
and a.INUSE_EN = 'Y'
and b.dept_nm = c.dept_nm
and a.user_id = b.user_id
group by b.user_nm,b.dept_nm";
END IF;
DECLARE cur1 CURSOR FOR v_query;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
set dm_all = "";
OPEN cur1;
REPEAT
IF NOT done THEN
fetch cur1 into dm;
set dm_all = concat(dm,"<br>" ,dm_all);
set dm = "";
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
return SUBSTRING(dm_all, 5, CHAR_LENGTH(dm_all)-8);
END$$
DELIMITER ;
|