[오라클] 테이블 또는 뷰가 존재하지 않는다고 뜰 때
개인 프로젝트를 위해 오라클에 DB를 구축하면서 겪은 황당한 이슈에 관한 이야기이다.
erdcloud를 통해 프로젝트에 관한 ERD 설계를 하고
sql 문을 export하여 오라클에서 테이블을 생성했는데,
이후 id auto_increment를 위해 시퀀스를 생성하고 트리거 구문을 실행할 때
테이블이 존재하지 않는다는 오류가 발생했다😣
혹시 테이블이 제대로 생성되지 않은 것인가 싶어 확인을 해보았지만
SELECT * FROM all_tables WHERE table_name = 'address';
너무나 잘 생성되어 있었다,,,
구글링을 했을 때 나온 해당 오류의 원인은 아래와 같았다.
1. 해당하는 뷰나 테이블이 없을 때
2. 뷰나 테이블에 관한 권한이 없을 때
3. 테이블명 앞에 소유자를 명시해주어야 할 때
4. 데이터베이스 연결이 되어 있지 않을 때
나의 경우 모두 해당하지 않았다. 애당초 테이블을 생성한 사용자 계정으로 접속해 있었고,
GRANT로 권한 부여를 시도했을 때에도 같은 에러가 발생했다.
또 DB 연결이 종료되었나 싶어 SQL developer를 종료했다가 다시 사용자 계정에 연결해 보았지만,
문제는 해결되지 않았다.
그렇게 머리를 싸매고 있던 순간, user 테이블에 대한 SELECT를 했는데
select * from user;
당연하게도 user는 예약어이기 때문에 오류가 발생했다. 그래서 테이블명에 따옴표를 붙여 다시 SELECT를 했더니
정상적으로 테이블이 보였다.
이에 혹시나 싶어 다른 테이블도 따옴표를 붙였더니 오류가 발생하지 않았다.
사실 이전에도 user 테이블에는 따옴표를 붙여 SELECT 한 적이 몇 번 있었지만
예약어와 중복되어 특수한 경우라고 생각했지, 모든 테이블에 적용되는 것이라고 생각하지 못했다.
그리고 이 문제의 근본적 원인을 찾아보니.........
erdcloud에서 export한 sql 안에 테이블의 모든 이름에 따옴표가 있었다는 사실을 뒤늦게 발견했다.
오라클에서는 테이블을 생성할 때 따옴표를 붙이면 테이블명의 대소문자를 구분한다고 한다.
나는 모든 테이블을 소문자로 생성했는데, 따옴표를 붙이지 않고 그냥 접근하려고 하면
오라클에서는 이를 대문자로 인식하기 때문에 당연히 테이블을 찾지 못한 것이다.
막상 해결하고 나니 너무 사소한 부분이어서 좀 허무하기도 하면서
그만큼 사소하더라도 대수롭게 여기면 안 된다는 걸 깨닫게 되었다..😢