Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 저장 프로시저에서 @ 기호의 사용법과 역할

MySQL의 저장 프로시저(stored procedure)에서 @ 기호사용자 정의 세션 변수(user-defined session variables)를 선언하고 활용할 때 사용됩니다. 세션 변수는 현재 데이터베이스 연결이 유지되는 동안 값을 보관할 수 있기 때문에, 프로시저 내부에서 계산한 결과를 저장하거나 프로시저 실행 후 외부에서 그 값을 다시 조회할 때 매우 유용합니다.

실제 예제를 통해 @ 기호의 사용법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
(
    StudentName varchar(50)
);
Query OK, 0 rows affected (1.30 sec)

2. 데이터 삽입하기

INSERT 명령어를 사용해 테이블에 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable values('John Smith');
Query OK, 1 row affected (1.00 sec)
mysql> insert into DemoTable values('John Doe');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Chris Brown');
Query OK, 1 row affected (0.53 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-------------+
| StudentName |
+-------------+
| John Smith  |
| John Doe    |
| Chris Brown |
+-------------+
3 rows in set (0.00 sec)

4. 저장 프로시저 생성하기

이제 DemoTable의 레코드 개수를 계산하여 세션 변수에 저장하는 저장 프로시저를 만들어 보겠습니다.

mysql> DELIMITER //
mysql> create procedure `Demo_Of_@Symbol`()
   BEGIN
   select count(*) into @numberOfRecords from DemoTable;
   END
//
Query OK, 0 rows affected (0.33 sec)
mysql> DELIMITER ;

여기서 핵심은 select count(*) into @numberOfRecords 부분입니다. 조회된 레코드 개수가 @ 기호가 붙은 세션 변수 @numberOfRecords에 저장됩니다.

5. 저장 프로시저 호출하기

CALL 명령어를 사용해 저장 프로시저를 실행합니다.

mysql> call `Demo_Of_@Symbol`();
Query OK, 1 row affected (0.00 sec)

6. @ 기호로 선언된 세션 변수 확인하기

프로시저가 실행된 후, @ 기호가 붙은 변수를 직접 SELECT 하면 저장된 값을 확인할 수 있습니다.

mysql> select @numberOfRecords;

실행 결과는 다음과 같습니다.

+------------------+
| @numberOfRecords |
+------------------+
|                3 |
+------------------+
1 row in set (0.00 sec)

정리

이처럼 저장 프로시저 내에서 @ 기호를 사용하면 별도의 OUT 파라미터 없이도 계산 결과를 세션 변수에 담아둘 수 있습니다. 세션 변수는 해당 연결이 끊어질 때까지 값을 유지하므로, 프로시저 실행 직후 바로 값을 조회하거나 이후 쿼리에서 재활용할 수 있다는 장점이 있습니다. 다만 세션마다 독립적으로 존재하므로, 다른 연결(세션)에서는 동일한 변수 값을 공유하지 않는다는 점을 유의해야 합니다.