[MySQL] DECLARE

참고

설명

  • 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

links

social