일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- MySQL 변수 선언
- DB 생성
- LINUX PORT 상태 확인
- 수학 풀이
- aws ec2
- 외부 접속 설정
- MySQL @
- rwx
- MySQL @ 세션 변수
- mysql procedure
- MySQL View 내용 확인
- 권한
- JAVA 버전 확인
- MySQL Procedure 내용 확인
- MySQL
- 4Step
- procedure 삭제
- 외부 접속
- user생성
- Linux
- 리눅스
- MySQL 프로시저 삭제 명령어
- 수학 풀이 방식
- 소린TV
- linux 명렁어
- TOMCAT 버전 확인
- MySQL 스크립트 확인 명령어
- procedure 삭제 명령어
- rwxrwxrwx
- MySQL 세션 변수
- Today
- Total
us01
MySQL @ 세션 변수 본문
MySQL에서 @붙은 변수는 세션 변수라고 하며, @붙은 변수는 세션이 종료될 때까지 사용이 가능합니다
아래 간단한 예제를 참고해요
SET @z = 1;
DELIMITER //
SET @x = 1;
CREATE PROCEDURE dorepeat(do1 INT)
BEGIN
DECLARE y INT DEFAULT 1;
REPEAT
SET y = y + 1;
UNTIL y > do1
END REPEAT;
SET @x = @x + 1;
SELECT y, @x;
END//
DELIMITER ;
CALL dorepeat(1);
간략하게 코드를 설명하자면 아래와 같습니다
1. 변수는 총 3개 @z(세션 변수), @x(세션 변수), y(지역 변수)를 선언했고, 위치를 잘 봐주세요
- 위치: @z는 DELIMITER // 위, @x는 DELIMITER // 아래, y는 BEGIN ~ END 사이에 선언했습니다
2. dorepeat 프로시저 생성, call dorepeat(1)을 3번 호출한 결과는 아래와 같아요
- 한 번 실행했을 때 y: 2, @x :2, @z: 2
- 두 번 실행했을 때 y: 2, @x: 3, @z: 3
- 세 번 실행했을 때 y: 2, @x: 4, @z: 4
- 실행 할 때마다 @x, @z만 값이 올라갈 거예요 이제 세션 변수의 값이 어떻게 변하는지 볼 수 있도록 dorepeat 프로시저를 삭제하고 다시 동일한 프로시저를 생성해볼게요
(삭제: DROP PROCEDURE IF EXISTS dorepeat; / 프로시저 조회: SHOW PROCEDURE STATUS; )
3. 다시 생성한 프로시저를 호출해봐요
- 한 번 실행했을 때 y: 2, @x :2, @z: 5
- 두 번 실행했을 때 y: 2, @x: 3, @z: 6
- 세 번 실행했을 때 y: 2, @x: 4, @z: 7
@z 변수의 값만 초기화가 되지 않고 증가가 된게 보이시나요?
@x 변수의 경우도 @z 동일한 세션 변수이지만 DELIMITER // 아래 선언(DELIMITER ; -> //)을 하여 세션 변수까지 다시 초기화가 된 값으로 출력이 되는 것을 확인할 수 있습니다
세션 변수라도 해도 선언되는 위치에 따라 생각한 것과 다르게 초기화가 될 수 있으니 유의하여 선언하세요
@z 변수를 보면 프로시저 내에 선언된 변수(지역 변수)가 아니기 때문에 어느 프로시저 내에서 호출하더라도 초기화가 되지 않는걸 볼 수 있습니다
아래 새로운 프로시저를 생성해볼까요
DELIMITER //
CREATE PROCEDURE call1()
BEGIN
SELECT @z, @x;
END //
DELIMITER ;
CALL call1();
위에서 선언한 세션 변수가 잘 출력이 됐나요?
'DB > MySQL' 카테고리의 다른 글
MySQL View(뷰), Procedure(프로시저) 스크립트 내용 확인 (0) | 2020.12.10 |
---|---|
MySQL procedure 삭제 (0) | 2020.12.10 |
MySQL PL/SQL DELEMITER // (1) | 2020.12.10 |