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

MySQL 저장 프로시저로 테이블에 접근하는 방법

MySQL 저장 프로시저를 활용하면 데이터베이스 내 하나 또는 여러 개의 테이블에 자유롭게 접근할 수 있습니다. 아래 예제에서는 테이블 이름을 매개변수로 전달받고, 프로시저를 호출하면 해당 테이블의 모든 데이터를 담은 결과 집합을 출력하는 저장 프로시저를 만들어 보겠습니다.

예제

mysql> Delimiter //
mysql> Create procedure access(tablename varchar(30))
   -> BEGIN
   -> SET @X := CONCAT('Select * from',' ',tablename);
   -> Prepare statement from @X;
   -> Execute statement;
   -> END//
Query OK, 0 rows affected (0.16 sec)

먼저 DELIMITER // 명령으로 구분 기호를 변경한 뒤, access라는 이름의 프로시저를 생성했습니다. 이 프로시저는 varchar(30) 타입의 tablename 매개변수를 받으며, CONCAT 함수로 SELECT 쿼리 문자열을 동적으로 조합한 후 PREPARE와 EXECUTE 문을 통해 실행합니다. 이 방식이 가능한 이유는 MySQL이 저장 프로시저 내에서 준비된 문(prepared statement)을 지원하기 때문입니다.

프로시저 생성이 완료되면, 접근하고자 하는 테이블 이름을 매개변수로 전달하여 프로시저를 호출합니다.

mysql> Delimiter ;

mysql> Call access('student_info');
+------+---------+----------+------------+
| id   | Name    | Address  | Subject    |
+------+---------+----------+------------+
| 101  | YashPal | Amritsar | History    |
| 105  | Gaurav  | Jaipur   | Literature |
| 125  | Raman   | Shimla   | Computers  |
+------+---------+----------+------------+
3 rows in set (0.02 sec)
Query OK, 0 rows affected (0.04 sec)

실행 결과, student_info 테이블의 전체 레코드 3건이 정상적으로 조회된 것을 확인할 수 있습니다. 이처럼 PREPARE와 EXECUTE 문을 조합하면 저장 프로시저 안에서 동적 SQL(dynamic SQL)을 구현할 수 있어, 테이블 이름처럼 쿼리 작성 시점에 고정할 수 없는 객체도 유연하게 다룰 수 있다는 장점이 있습니다.