SeSac (2021-08 ~ 2021-12)/MySQL

MySQL 11 - Cursor를 이용한 프로시저 작성

배워도끝이없네 2021. 8. 30. 17:36

Cursor를 사용하려면 선언을 해줘야 한다.

cursor는 일종의 변수이다 (type이 커서인)

 

Declare => Declare Continue Handler => OPEN => Fetch => CLose

Declare <cursor-name> CURSOR FOR
	select...
    
Declare Continue Handler
	For Not Fount SET <end-flag> := True;
OPEN <cursor-name>

<cursor-loop-var>: LOOP
	Fetch <cursor-name> into <var-name>, ...;
    
    IF <end-flag> THEN
    	LEAVE <cursor-loop-var>
    END IF
 LOOP <cursor-loop var>;
 
 CLOSE <cursor-name>;

FETCH 를 하면 각각 가져올 컬럼을 담을 변수가 필요하다.

프로시져에서 디클레어가 항상 상위에 와야한다.

디클레어는 디클레어끼리 모아두어야 한다

커서가 돌다가 더이상 자료가 없으면(not found), SET해준다.

커서를 열고close를 하지 않으면 메모리를 계속 보기 때문에 꼭 CLOSE를 해줘야 한다.

 

 

Exception Handling : 보통 insert delete등을 쓰는 프로시져는 전에 반드시 START Transaction을 건다.

 

START TRANSACTION

DECLARE {EXIT | CONTINUE} HANDLER FOR SQLEXCEPTION

BEGIN

  -- 에러 처리 구문
  ROLLBACK;
  
END;

-- 위에서 CONTINUE라고 선언했다면, 오류 발생해도 아래를 계속 수행

COMMIT;

 

Stem-and-leaf display(줄기 잎 그림)

도수 분포표와 히스토그램을 같이 볼 수 있다.