흔히 다들 알다시피, variable(변수)란 값을 담아두는 것
SQL에서도 variable(변수)화 시켜서 특정값을 담아두고 사용이 가능
변수를 담는 방법은 크게 3가지
사용자 정의 변수, 지역 변수, 시스템 변수
사용자가 직접 정의하는 변수로써, 정수, 10진수, 부동 소수점, 2진수 또는 이진문자열 또는 NULL 값과 같은 제한된 데이터 유형 세트에서 값을 지정할 수 있다.
그리고 변수는 세션(Session)단위로 실행이 되기 때문에, 한 클라이언트에서 정의한 사용자 변수는 다른 클라이언트에서 보거나 사용할 수 없다.
SELECT @var;
SET @start = 1, @finish = 10;
SELECT @start := 1, @finish := 10;
SET @변수명
을 사용시 =
대입연산자를 사용한다SELECT @변수명
을 사용시 :=
과 같은 대입연산자를 사용한다.SELECT * FROM tb_code WHERE code_cd BETWEEN @start AND @finish;
tb_code
테이블에서 code_cd
가 1 부터 10까지 해당하는 데이터를 조회사용자 정의 변수 참고
지역(로컬)변수는 프로시저(Procedure) 또는 트리거(Trigger) 내에서 로컬 변수 및 입력 매개 변수로 사용할 수 있다.
즉, Declares 내 지역(로컬)변수를 사용함을 의미 한다.
DELIMITER ;;
CREATE FUNCTION MySQL.`fn_get_seq_8`(`p_seq_name` VARCHAR(4))
RETURNS varchar(8) CHARSET utf8
BEGIN
DECLARE RTN_VAL VARCHAR(8);
INSERT INTO MySQL.tb_sequence (seq_name, seq_no)
values (p_seq_name, LAST_INSERT_ID(1))
ON DUPLICATE KEY UPDATE seq_no=LAST_INSERT_ID(seq_no+1);
set @ret = row_count();
if @ret = 0 then
set RTN_VAL = '0';
else
SET RTN_VAL = (SELECT CONCAT(p_seq_name, LPAD(LAST_INSERT_ID(),4,'0')));
end if;
RETURN RTN_VAL;
END ;;
DELIMITER ;
지역 변수 참고:
MySQL은 기본적으로 선언된 변수들이 존재한다. 이를 시스템 변수라 한다.
시스템 변수는 GLOBAL 또는 세션단위로 사용가능하다.
즉, 서버의 전체 작업과 클라이언트 연결 후 작업등 모든 부분에 영향을 준다.
-- Syntax to Set value to a Global variable:
SET GLOBAL sort_buffer_size=1000000;
SET @@global.sort_buffer_size=1000000;
-- Syntax to Set value to a Session variable:
SET sort_buffer_size=1000000;
SET SESSION sort_buffer_size=1000000;
SET @@sort_buffer_size=1000000;
SET @@local.sort_buffer_size=10000;
-- 모든 변수 확인
SHOW VARIABLES;
-- 특정 변수 확인
SELECT @@sort_buffer_size;
시스템 변수 참고:
유익한 글 감사드립니다.
혹시, 사용자 정의변수 일괄 해제(무효화) 처리는 어떻게 하는지 알고 계신가요?
일일히 null 따위로 값을 재할당 해야 하나 싶어서