카테고리 없음
[MySQL]사용자변수, 지역변수
찬란한
2023. 5. 3. 21:41
MySQL에서 변수를 사용할 수 있다.
변수는 사용자변수, 지역변수, 글로별 변수가 있다.
사용자 변수
사용자변수는 사용자가 편의에 맞게 변수를 선언할 수 있게 해준다.
사용자변수를 사용하고자 할 때는 접두사로 @를 붙이고 아래와 같이 사용하면 된다.
SET @name = 'Hong kil dong';
SET @name := 'Hong kil dong';
SELECT @name := 'Hong kil dong';
SET 명령문에서는 등호('=') 표시로 변수에 값을 할당할 수 있다.
그러나 MySQL에서 등호는 비교연산자로 사용되는 것이 기본 스펙이기 때문에 ":=" 를 사용하여 값을 할당하는 것이 기본 문법이다.
할당한 사용자변수를 쿼리에서 이용하는 것이 가능하다.
SET @fromDay = '20230503'
SET @toDay = '20240503'
SELECT * FROM user WHERE createdDate BETEEN @fromDay and @toDay
사용자변수의 특징
1. 선언하거나 초기화하지 않고 접근 가능하다.
2. 사용자 변수는 제한된 타입의 데이터만 할당할 수 있다.
- integer.decimal, floating-point, binary 또는 nonbinary-string
3.사용자 변수는 세션에 따라 다르다. 즉 다른 세션을 공유하고 있는 사용자A와 사용자B는 서로가 만든 변수를 이용할 수 없다.
지역변수
지역변수는 Stored Procedure내부에서 사용하는 변수이다.
프로시져 파라미터롤 사용하기도 하고, 아래 예시에서 변수명 앞에 언더스코어('_')가 붙은 것들이 지역변수 이다. (시각적인 구분을 쉽게 하기 위해서)
DELIMITER $$
DROP PROCEDURE IF EXISTS spUUser $$
CREATE PROCEDURE `handleUser`(
_job varchar(10),
_name varchar(20),
_id varchar(20),
_password varchar(50)
)
BEGIN
declare _row_count int(11);
declare _now varchar(8) default DATE_FORMAT(now(),'%Y%m%d');
if _job = 'SAVE' then
if (select 1 = 1 from user where id = _id) then
update user set
name = _name,
updated_ymd = now()
WHERE upk = _upk;
SELECT ROW_COUNT() as rowCount
else
INSERT INTO user( name, password, id useYNull, created_ymd)
VALUES(_name, password, _id, 'Y', now());
SELECT ROW_COUNT() as rowCount, LAST_INSERT_ID() userId;
end if;
end if;
END $$
DELIMITER ;
지역변수의 특징
1.지역변수의 유효한 범위는 프로시져내에서 BEGIN과 END의 사이에서만 유효하다.
2.만약 DEDAULT 값으로 DECLARE하지 않으면 기본 값은 NULL이다.