티스토리 뷰



데이터베이스를 사용하는 솔루션 프로그램들은 프로그램의 정상 가동을 위해서 필요한 스키마가 미리 준비되어 있는 상태로 프로그램을 시작하는 것이 일반적인 방법입니다. 그러나, 최근의 프로그램들은 데이터베이스 연결까지만 사용자가 설정해 놓으면 테이블이나 뷰 생성과 초기 데이터 준비를 프로그램이 알아서 진행하여 프로그램 수행 환경 준비를 자체 해결하는 경우가 많습니다. 

이 과정에서 연결한 데이터베이스에 특정 테이블이나 컬럼의 존재 여부를 검사하는 과정은 필수적이라 할 수 있습니다. 테이블 존재 여부를 검사해서 테이블이 존재하지 않는 경우 자동으로 테이블을 생성하는 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으로 컬럼을 확인합니다.


댓글
댓글쓰기 폼