참고
- MySQL Documentation 13.6.3 DECLARE Statement
- MySQL Documentation 13.6.4.2 Local Variable Scope and Resolution
설명
- stored programs에서 지역변수(local variables)를 선언하는데 사용
- DECLAREBEGIN ... END 안에서만 사용 가능하며 다른 statements보다 먼저 위치해야 한다.
- 로컬변수의 scope는 선언된 BEGIN ... END 안이다.
- 로컬변수가 선언된 블록안에 중첩된 블록이 있을 경우, 해당 중첩 블록 안에서도 참조가 가능하지만, 해당 중첩 블록에 같은 이름의 로컬변수가 선언되었을 경우 참조할 수 없다.
syntax
DECLARE var_name [, var_name] ... type [DEFAULT value]
var_name
- 변수 이름
- 대소문자를 가리지 않는다(not case-sensitive)
- stored program에서 사용되는 테이블의 컬럼명과 동일하면 안된다.
CREATE PROCEDURE sp1 (x VARCHAR(5))
BEGIN
DECLARE xname VARCHAR(5) DEFAULT 'bob';
DECLARE newname VARCHAR(5);
DECLARE xid INT;
SELECT xname, id INTO newname, xid
FROM table1 WHERE xname = xname;
SELECT newname;
END;
- SELECT 에서 사용된 xname은 table1의 컬럼 xname이 아닌 지역변수 xname를 참조한다.
- 해당 프로시저가 호출되면 newname에는 지역변수 xname의 DEFAULT 값인 'bob'이 할당된다.
- 아래의 프로시저 생성문에서 CURSOR 에 사용된 경우도 동일하다.
CREATE PROCEDURE sp2 (x VARCHAR(5))
BEGIN
DECLARE xname VARCHAR(5) DEFAULT 'bob';
DECLARE newname VARCHAR(5);
DECLARE xid INT;
DECLARE done TINYINT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT xname, id FROM table1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
read_loop: LOOP
FETCH FROM cur1 INTO newname, xid;
IF done THEN LEAVE read_loop; END IF;
SELECT newname;
END LOOP;
CLOSE cur1;
END;
type
DEFAULT
- 선언한 변수의 초기값을 지정
- 지정하지 않으면 초기값은 NULL