티스토리 뷰

■ 에러 및 원인

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

PL/SQL 사용시 발생하는 경우 PL/SQL과 역할의 관계에 대해 올바른 인식과 설정을 하고 있는지 확인한다.

예를 들어 사용자 hoo(DBA역할), 사용자 scott이 있다면

#sqlplus hoo/xxx
SQL> SELECT empno FROM scott.emp;
...

위의 SQL문은 정상적으로 실행된다.(DBA 역할의 SELECT ANY TABLE 권한)

하지만 아래의 PL/SQL은 컴파일 에러가 발생한다.

아래와 같은 시노님을 선언하고 hoo.emp 시노님에 접속하는 경우에도 마찬가지로 컴파일 에러가 발생.

CREATE SYNONYM hoo.emp FOR scott.emp;

 

SQL> CREATE OR REPLACE  FUNCTION HOO.GET_EMPNO
  2 RETURN NUMBER IS
  4 vEmpNo NUMBER;
  5 BEGIN
  6      SELECT  empno INTO vEmpNo FROM scott.emp WHERE ROWNUM  <=1;
  7 RETURN vEmpNo;
  8 END;
  9/
...
LINE/COL ERROR
-------- ------------------------------------------ -----------------------
6/2 PL/SQL: SQL Statement ignored
6/37 PL/SQL: ORA-00942: 테이블 또는 뷰가 존재하지 않습니다.

 

■ 대응방법 1

 PL/SQL에서 정의자 권한과 실행자 권한을 이해하고 AUTHID CURRENT_USER를 설치한다.

 

■ 대응방법 2

GRANT SELECT ON scott.emp TO hoo;

에 의한 SELECT (+ UPDATE, DELETE, etc) 권한을 개별적으로 부여한다.

실행할 때 권한확인은 비용0이 아니기때문에 일반적으로 필요한 권한을 개별적으로 부여한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함