민서네집

UPPER ID로 최상위노드 찾아가는 MySQL Function 본문

Database/MySQL

UPPER ID로 최상위노드 찾아가는 MySQL Function

브라이언7 2013. 6. 7. 10:29
-- mo 이름을 가져오기 위한 function. 최상위 노드의 MO_NAME 컬럼값을 가져온다.
DELIMITER $$
DROP FUNCTION IF EXISTS ntelsdm.fn_mo_name;

CREATE FUNCTION  fn_mo_name(param_mo_id INTEGER) RETURNS TEXT
READS SQL DATA
BEGIN
    DECLARE _id INTEGER;
    DECLARE _parent INTEGER;
    DECLARE _mo_name TEXT;
    DECLARE _count INT DEFAULT 0;
    DECLARE done INT DEFAULT FALSE;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    SET _parent := NULL;
    SET _id := param_mo_id;

    the_loop: LOOP

		  SELECT UPPER_MO_ID, MO_NAME
		  INTO _parent, _mo_name
		  FROM T_MO
		  WHERE MO_ID = _id;
		  
		  SET _count = _count + 1;

    	  IF _parent = 0 THEN
				return _mo_name;
    	  END IF;

    	  SET _id := _parent;

    	  IF _parent IS NULL THEN
    	  		RETURN NULL;
    	  END IF;

    	  IF done=TRUE THEN
    	  		LEAVE the_loop;
    	  END IF;
    	  
    	  -- UPPER_MO_ID 가 잘못되서 무한루프 도는 것을 방지하기 위한 코드
    	  IF _count > 20 THEN
    			RETURN '* ERROR *';
    	  END IF;

    END LOOP the_loop;

    RETURN NULL;
END
$$
DELIMITER ;


<주의!>

파라미터 이름이 Function 안의 SQL의 컬럼 이름과 같으면 쿼리가 오동작함.


Comments