티스토리 뷰
■ 에러 및 원인
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
링크
TAG
- REVOKE
- BEGIN절
- NLog
- PL/SQL 실행문
- in/out/ref 차이점
- commit
- in/out/ref 공통점
- 에러
- 참조전달
- in/out/ref
- DBA_SYS_PRIVS
- 유틸리티에러
- 초기화파라미터파일
- in/out/ref 예제
- C#
- grant
- USER_SYS_PRIVS
- 시간차이
- vba
- PL/SQL 예외처리문
- EXCEPTION절
- DECLARE절
- rollback
- Oracle
- VB.Net
- pl/sql
- 유틸리티
- 후나빙
- 동기통신
- TrimEnd
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함