테이블명이 소문자 영문명으로 지정이 되는가?
오라클 DICTIONARY 테이블에서 조회 할 경우에 테이블명은 모두 대문자로 조회합니다.
테이블 생성시 소문자를 하더라도, 대문자로 데이터 처리가 되기 때문입니다.
그래서 DBA들이 내부적으로 조회, 스크립트를 만들때 UPPER( 테이블명 ) 함수를 사용할일이 없습니다.
그런데 프로젝트에서 우연히 발견된 "소문자 테이블"!
어림짐작해 보니 쌍따옴표를 붙여 "테이블명소문자"로 테스트 해보니 소문자로 테이블이 만들어지네요.
테스트를 위해 TEST_UPPER, LOWER, "lower" 문자열로 테이블을 생성해봅니다.
[ 실 습 ]
1. 테이블 생성
CREATE TABLE TEST_UPPER ( col1 varchar2(100) );
CREATE TABLE LOWER ( col1 varchar2(100) );
CREATE TABLE "lower" ( col1 varchar2(100) );
2. TABLE DICTIONARY VIEW 조회
select * from dba_tables where table_naME in ( 'TEST_UPPER','LOWER','lower' ) ;

3. TABLE DROP 하기
DROP TABLE TEST_UPPER PURGE;
DROP TABLE LOWER PURGE;
DROP TABLE lower PURGE; -- 테이블이 존재하지 않는다고함( LOWER = lower 동일하게 봄)
DROP TABLE "lower" PURGE; -- " " 쌍따옴표를 이용하여 소문자 테이블 삭제

4. 소문자 테이블로 인한 문제점
: 원하는 결과에서 소문자 테이블이 제외되는 사항이 발생될 수 있으므로 소문자 테이블 사용은 금지!
1) ALTER, DROP 등 DDL 구문으로 처리하는 스크립트를 만들경우
- 소유자."테이블명" 으로 해야하기 때문에 비효율.
- DROP TABLE 소유자."소문자테이블"로 처리해야함.
2) 대,소문자로 구분되지만 같은 테이블명 존재 가능성.
3) 소문자 테이블 조회 "" 필수
- SELECT * FROM 소유자."소문자테이블";
'ORACLE > DBA' 카테고리의 다른 글
ASH(ACTIVE SESSION HISTORY) 보고서 출력 (0) | 2025.03.10 |
---|---|
OBJECT INVALID 체크 (0) | 2024.11.26 |
계정 프로파일 ( PROFILE ) (1) | 2024.11.19 |
GLOBAL INDEX가 있는 PARTITION 삭제 or TRUNCATE 방법 (0) | 2024.11.17 |
FUNCTION BASED(함수기반) INDEX 컬럼명 조회 (0) | 2024.10.24 |