본문 바로가기
프로그래밍/MySQL

[Stored Procedure] 3. MySQL Stored Procedure 변수

by 듀빈 2016. 7. 25.
반응형

요약 : 이번 강좌에서는 저장 프로시저의 변수에 관해서 어떻게 선언하고, 변수를 사용하는지 배울 것이다. 덧 붙여서 변수의 범위에 관해서도 배울 것이다.

변수는 데이터 객체에 의해서 이름이 지어진다. 데이터 객체의 값은 저장 프로시저가 실행되는 동안 값이 바뀔 수 있다. 우리는 전형적으로 실행결과를 저장(hold)하기 위해 저장 프로시저에서 변수를 사용한다. 이러한 변수들은 저장 프로시저의 로컬에 있다.

변수를 사용하기 전에는 변수를 선언해야 한다.


변수 선언

저장 프로시저 내부에서 변수를 선언하기 위해서는 아래와 같은 DECLARE 문을 사용해야 한다.

1
DECLARE variable_name datatype(size) DEFAULT default_value;
cs

예시로 든 위의 명령문에 대해서 세부적으로 알아보자:

첫번째, DECLARE 키워드 뒤에 변수 이름을 지정 할 수 있다. 변수 이름은 MySQL table column names의 naming규칙을 따라야 한다.

두번째, 변수의 데이터 타입과 크기를 지정 할 수 있다. 변수는 INT, VARCHAR, DATETIME, 등 과 같은 MySQL 데이터 타입을 가질 수 있다.

세번째, 변수를 선언했을 때 초기값은 NULL 이다. DEFAULT 키워드를 사용해서 변수의 기본 값을 지정해 줄 수 있다.

예를들어, 아래와 같이 데이터 타입이 INT 이고, 기본 값이 0인 total_sale의 이름을 가진 변수를 선언할 수 있다.

1
DECLARE total_sale INT DEFAULT 0;
cs

MySQL은 아래와 같이 하나의 DECLARE 문으로  같은 데이터 타입을 사용하는 두개 또는 그 이상의 변수들을 선언하는 것을 허용한다.

1
DECLARE x, y INT DEFAULT 0;
cs

기본 값으로 0을 가지는 두개의 정수값 변수 x 와 y를 선언 했다.


변수 대입

변수를 선언 했으면, 이제 변수를 사용할 수 있다. 변수에 다른 값을 대입하고 싶다면, SET 문을 사용할 수 있다. 예를들어,

1
2
DECLARE total_count INT DEFAULT 0;
SET total_count = 10;
cs

total_count를 선언 한 후에 변수의 값은 10이다.

게다가, SET 문으로 Scalar 값(1개의 값)을 반환하는 질의의 결과 를 SELECT INTO 문을 사용해서 변수에 대입 할 수 있다.  아래의 예시를 보자:

1
2
3
4
DECLARE total_products INT DEFAULT 0
 
SELECT COUNT(*) INTO total_products
FROM products
cs

예시를 살펴보면,

첫번째로, 초기값을 0으로 가지는 total_products 를 선언한다.

그리고, SELECT INTO 문을 사용하여 샘플 데이터베이스 안에 있는 products 테이블을 선택하고 products 의 레코드 수를 total_products 변수에 대입하는 것을 볼 수 있다.


변수 범위

변수는 변수의 수명주기를 정의한 범위를 가지고 잇다. 만약 저장 프로시저 내부에 변수를 선언한다면 저장 프로시저의 END 문에 도달했을 때 변수는 사라진다.

만약 BEGIN END 영역 내부에 변수를 선언한다면, END에 도달하면 변수는 사라지게 된다. 다른 범위에서 같은 이름을 가진 두개 또는 그 이상의 변수를 선언 할 수 있다. 왜냐하면 변수는 오직 하나의 영역에서만 영향을 받기 때문이다. 하지만 다른 영역에 간튼 이름을 가진 변수를 선언하는 것은 프로그래밍적으로는 좋지 않다.

@ 기호로 시작하는 변수는 세션 변수이다. 이러한 변수는 세션이 종료 될 때까지 이용 및 접근이 가능하다.


이번 강좌에서는, 저장 프로시저 내부에 변수를 어떻게 선언하는지 보여주었고, 변수의 범위에 대해서 논해보았다.


출처 : http://www.mysqltutorial.org/variables-in-stored-procedures.aspx

이전 강좌 : [Stored Procedure] 2. MySQL Stored Procedure 시작하기

다음 강좌 : [Stored Procedure] 4. MySQL Stored Procedure 매개변수(parameter)

반응형