카테고리 없음

[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이다.