MySQL 프로시저에서 테이블 이름 변경하기
네, 가능합니다. ALTER 명령어와 RENAME을 함께 사용하면 저장 프로시저 안에서도 간단하게 테이블 이름을 변경할 수 있습니다. 먼저 예제용 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1859 ( Id int ); Query OK, 0 rows affected (0.00 sec)
insert 명령어를 사용해 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable1859 values(101); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1859 values(102); Query OK, 1 row affected (0.00 sec)
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1859;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------+ | Id | +------+ | 101 | | 102 | +------+ 2 rows in set (0.00 sec)
다음은 저장 프로시저를 생성하고 그 안에서 테이블 이름을 변경하는 쿼리입니다.
mysql> delimiter // mysql> create procedure alter_table_name_sp() begin alter table DemoTable1859 rename exampleTable; end // Query OK, 0 rows affected (0.00 sec) mysql> delimiter ;
call 명령어로 저장 프로시저를 호출합니다.
mysql> call alter_table_name_sp(); Query OK, 0 rows affected (0.00 sec)
select 명령어로 테이블 이름이 실제로 변경되었는지 확인합니다.
mysql> select * from exampleTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------+ | Id | +------+ | 101 | | 102 | +------+ 2 rows in set (0.00 sec)
정리
이처럼 MySQL에서는 저장 프로시저 내부에서도 ALTER TABLE ... RENAME 구문을 사용해 손쉽게 테이블 이름을 변경할 수 있습니다. 프로시저 실행 후에는 기존 테이블명(DemoTable1859)이 더 이상 존재하지 않으며, 새 테이블명(exampleTable)으로 데이터가 그대로 유지되는 것을 확인할 수 있습니다. 참고로 프로시저 작성 시 delimiter //로 구분자를 변경한 뒤, 작성이 끝나면 반드시 delimiter ;로 원래 상태로 되돌려 주어야 이후 SQL 문장이 정상적으로 실행됩니다.