• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    2. 데이터 조작 문
    3. MySQL 트랜잭션과 잠금 문
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    1. BEGIN ... END 복합 명령문 구문
    2. 레이블 구문
    3. DECLARE 구문
    4. 저장 프로그램 내의 변수
    1. 로컬 변수 DECLARE 구문
    2. 로컬 변수의 범위 해결
    5. 흐름 제어문
    6. 커서
    7. 조건의 처리
    7. 데이터베이스 관리 문
    8. MySQL 유틸리티 문
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

13.6.4.2 로컬 변수의 범위 해결

로컬 변수의 범위는 그것이 선언 된 BEGIN ... END 블록입니다. 이 변수는 같은 이름을 가진 변수를 선언하고있는 블록을 제외하고 선언 블록 내에서 중첩 된 블록 내에서 볼 수 있습니다.

로컬 변수는 저장 프로그램 실행 중에 만 범위 내에 있으므로 이러한 참조는 저장 프로그램에서 생성 된 준비된 명령문은 허용되지 않습니다. 준비된 명령문의 범위는 현재의 세션이며, 저장 프로그램이 아니기 때문에 문은 프로그램의 종료 후에 수행 할 수 있으며 이때 변수는 범위 내에 존재하지 않습니다. 예를 들어, SELECT ... INTO local_var 는 준비된 명령문으로 사용할 수 없습니다. 이 제약은 저장 프로 시저 및 저장 함수의 매개 변수에 적용됩니다. 섹션 13.5.1 "PREPARE 구문" 을 참조하십시오.

로컬 변수 테이블 컬럼과 동일한 이름으로는 안됩니다. SELECT ... INTO 문 등의 SQL 문에 컬럼 및 동일한 이름을 가진 선언 된 로컬 변수에 대한 참조가 포함되어있는 경우, MySQL은 현재 그 참조를 변수의 이름으로 해석합니다. 다음 프로 시저 정의를 생각해 보겠습니다.

 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;

MySQL은 SELECT 문에 xname 을 xname 컬럼 대신 xname 변수에 대한 참조로 해석합니다. 그 결과, 프로 시저 sp1() 가 호출되면 table1.xname 컬럼의 값에 관계없이 newname 변수는 값 'bob' 를 반환합니다.

마찬가지로 다음 ​​프로 시저에서 커서 정의에 xname 을 참조하는 SELECT 문이 포함되어 있습니다. MySQL은 이것을 컬럼 참조가 아니라 그 이름의 변수에 대한 참조로 해석합니다.

 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;

섹션 D.1 "저장 프로그램 제한 사항" 을 참조하십시오.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved