티스토리 뷰

■ 에러

ORA-00942 : 테이블 또는 뷰가 존재하지 않습니다.

 

이 에러는 해당 테이블이나 뷰가 존재하지 않거나 테이블이나 뷰에 대한 액세스 권한이 부족할 때 발생한다.

 

<에러 예제>

SQL> SELECT * FROM scott.emp2;
SELECT * FROM scott.emp2
*
오류 행: 1: 오류가 발생했습니다.
ORA-00942 : 테이블 또는 뷰가 존재하지 않습니다.

 

■ 원인

- 테이블 또는 뷰가 존재하지 않을 때

- 액세스에 필요한 권한 부족

 

■ 대응방법1. 테이블 또는 뷰가 존재하지 않을 때

해당 테이블 또는 뷰가 존재하는지, FROM 절에 지정된 테이블 이름, 뷰 이름의 지정이 잘 되어있는지 확인해보자.

아래의 SQL문을 이용해 사용자 SCOTT이 소유하는 오브젝트 EMP2가 존재하는지 확인 가능

-- 사용자 이름, 객체 이름은 대문자로 지정
SQL> SELECT owner, object_name, object_type FROM dba_objects
2> WHERE owner='SCOTT' AND object_name='EMP2' ORDER BY 1;
no rows selected

위의 SQL문을 실행했을 때, no rows selected가 나온다면 해당 오브젝트가 존재하지 않아서 에러가 발생한 것이다.

 

■ 대응방법2. 액세스에 필요한 권한이 부족할 때

사용자는 자신이 소유한 오브젝트에 대해서는 모든 오브젝트 권한이 자동으로 부여되어 있어서

오브젝트 권한을 명시적으로 할당할 필요가 없다.

하지만 다른 사용자가 소유한 오브젝트에 접근하려면 실행하는 처리에 따라서 적절한 오브젝트 권한을 할당해야한다.

따라서 다른 사용자의 오브젝트에 액세스할 때 ORA-00942 오류가 발생한다면

SQL을 수행한 사용자에게 해당 테이블이나 뷰에 접근 권한이 있는지 확인할 필요가 있다.

권한이 없는 경우 SELECT 권한 등 SQL 종류에 따라 적절한 오브젝트 권한을 할당하면 참조할 수 있다.

 

아래 SQL문은 사용자 SCOTT2에 할당된 오브젝트 권한을 확인하는 것이다.

-- ※ 사용자명은 대문자로 지정할 것!!
SQL> SELECT grantee, table_name, privilege FROM dba_tab_privs
WHERE grantee = 'SCOTT2';
no rows selected

위의 결과가 no rows selected로 나온다면 오브젝트 권한이 없어서 에러가 발생한 것이다.

오브젝트 권한을 할당하려면 GRANT문을 사용하면 된다.

 

예를 들어 사용자 SCOTT이 가지고 있는 EMP 테이블에 SELECT 권한을 할당하고싶다.

그러면 아래의 SQL문을 써서 하면된다.

SQL> GRANT SELECT ON scott.emp TO scott2;
Grant succeeded.
SQL> CONN scott2/scott2
Connected.
SQL> SHOW USER
USER is "SCOTT2"
SQL> SELECT COUNT(*) FROM scott.emp;
COUNT(*)
----------
10000

 

 

이렇게 SELECT 권한을 할당해주면 해당 에러는 사라질 거임!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함