테이블/컬럼 존재 여부 확인하기 - MySQL, SQL Server, Oracle
데이터베이스를 사용하는 솔루션 프로그램들은 프로그램의 정상 가동을 위해서 필요한 스키마가 미리 준비되어 있는 상태로 프로그램을 시작하는 것이 일반적인 방법입니다. 그러나, 최근의 프로그램들은 데이터베이스 연결까지만 사용자가 설정해 놓으면 테이블이나 뷰 생성과 초기 데이터 준비를 프로그램이 알아서 진행하여 프로그램 수행 환경 준비를 자체 해결하는 경우가 많습니다.
이 과정에서 연결한 데이터베이스에 특정 테이블이나 컬럼의 존재 여부를 검사하는 과정은 필수적이라 할 수 있습니다. 테이블 존재 여부를 검사해서 테이블이 존재하지 않는 경우 자동으로 테이블을 생성하는 DDL(Data Definition Language) 문장을 실행할 수 있을 것입니다. 프로그램 버전 업그레이드 과정에서 특정 컬럼이 존재하지 않는 하위 버전인 경우라면 컬럼을 추가 또는 변경하는 DML(Data Manipulation Language) 문장을 자동으로 실행할 수 있을 것입니다. 이처럼 테이블 및 컬럼 존재 여부 확인은 매우 유용한 기능인데 재미있는 것은 세계적으로 상당한 점유율을 차지하고 있는 DBMS인 MySQL, SQL Server이 information_schema라는 동일한 이름의 스키마를 통해서 유사한 방법으로 기능을 제공하고 있다는 점입니다. 오라클(Oracle)의 경우에는 다른 형태를 가지고 있지만 차례대로 그 기능을 살펴보겠습니다.
■ MySQL
MySQL은 위의 그림에서 보듯이 information_schema가 하나의 데이터베이스로 관리되고 테이블 정보를 담고 있는 "TABLES" 테이블도 실제적인 자세한 정보를 담고 있습니다.
SELECT COUNT(*) cnt FROM information_schema.tables
WHERE table_schema = 'DB명' AND table_name = '테이블명'
위의 예제 쿼리처럼 table_schema에 데이터베이스 이름을 지정하고 그 가운데서 테이블 이름(table_name)이 일치하는 내역이 있는지 검사하는 방식입니다.
컬럼 확인은 information_schema.COLUMNS 테이블에서 table_schema과 table_name로 데이터베이스와 테이블을 필터링하고 column_name으로 해당 컬럼을 찾는 방식을 사용하면 됩니다.
■ SQL Server
SQL Server의 경우에는 각 개별 데이터베이스별로 시스템 뷰가 존재하기 때문에 테이블 확인 과정에 데이터베이스명으로 필터링할 필요 없이 아래와 같이 테이블명을 직접 확인하면 됩니다.
SELECT COUNT(*) cnt FROM information_schema.tables WHERE table_name = '테이블명'
컬럼 확인의 경우에도 INFORMATION_SCHEMA.COLUMNS 뷰를 사용하면 되고 테이블명만 필터링해서 컬럼을 확인할 수 있습니다.
■ Oracle
오라클의 경우에는 "ALL_TABLES" 테이블에 대한 쿼리로 테이블 존재 여부를 확인할 수 있습니다. SQL Server 처럼 테이블명으로 검색하면 됩니다. 주의할 점은 테이블명을 대문자로 입력하셔야 정상적으로 검색할 수 있습니다.
SELECT COUNT(*) cnt FROM ALL_TABLES WHERE TABLE_NAME = '테이블명'
컬럼 확인의 경우에는 "ALL_TAB_COLUMNS" 테이블에 대한 쿼리로 확인할 수 있습니다.
SELECT COUNT(*) cnt FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = '테이블명'
컬럼 조회시 위의 예제 코드처럼 테이블명으로 필터링해서 COLUMN_NAME으로 컬럼을 확인합니다.