복붙노트

[SQL] ORA-00942 : 테이블 또는 뷰 (때 별도의 SQL 작업을하지만, 오라클 함수 내에서 작업을하지 않는) 존재하지 않습니다

SQL

ORA-00942 : 테이블 또는 뷰 (때 별도의 SQL 작업을하지만, 오라클 함수 내에서 작업을하지 않는) 존재하지 않습니다

내가 표에서 선택 * 같은 SQL 문이있을 때, 그것은 잘 작동하지만, 최대한 빨리 함수에 넣어, 나는 얻을 :

ORA-00942: table or view does not exist 

이 문제를 어떻게 해결?

해결법

  1. ==============================

    1.당신이 볼 수있는 몇 가지가있다. 함수 소유자가 테이블 소유자는 다른 같은 질문을 바탕으로, 그것은 보인다.

    당신이 볼 수있는 몇 가지가있다. 함수 소유자가 테이블 소유자는 다른 같은 질문을 바탕으로, 그것은 보인다.

    1) 역할을 통해 부여 : 다른 사용자의 객체에 저장 프로 시저 및 함수를 만들려면이 역할을 통해 대신 액세스 개체 (에 직접 액세스 할 수 있어야합니다).

    2)

    당신이 스키마 A의 테이블 및 스키마 B에서 함수를 만든 경우 문제가 생길 수 있습니다 이해하는 오라클의 호출자 / 디파 권리 개념을 살펴해야한다.

    http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#LNPLS00809

  2. ==============================

    2.표 1은 역할에 부여 된, 그리고 역할이 당신에게 부여 된로부터 권한을 선택할 수 있다는 강력한 가능성이있다. 역할에 부여 된 권한은 사용자가 역할이 부여 된 경우에도 사용자가 작성한 PL / SQL을 사용할 수 없습니다.

    표 1은 역할에 부여 된, 그리고 역할이 당신에게 부여 된로부터 권한을 선택할 수 있다는 강력한 가능성이있다. 역할에 부여 된 권한은 사용자가 역할이 부여 된 경우에도 사용자가 작성한 PL / SQL을 사용할 수 없습니다.

    당신은 SYS 소유의 개체에 대한 DBA 역할이 부여 된 사용자에 대해이 많은입니다를 참조하십시오. DBA의 역할이있는 사용자는, 말하자면, V $ SESSION SELECT * FROM 할 수 있지만 V $ SESSION SELECT * FROM을 포함하는 함수를 작성할 수 없습니다.

    수정은 위의 경우, 예를 들어, 직접 사용자에게 해당 개체에 명시 적 권한을 부여하는 것입니다, SYS 사용자는 GRANT SELECT ON V_ $ SESSION TO 참고 MyUser에있다;

  3. ==============================

    3.확인 함수는 테이블과 동일한 DB 스키마입니다.

    확인 함수는 테이블과 동일한 DB 스키마입니다.

  4. ==============================

    4.어느 u는 해당 스키마 / 테이블에 권한이 해달라고 또는 테이블이 존재 않습니다. 당신이 당신의 저장 프로 시저에서 다른 스키마 테이블을 사용하는 경우 대부분이 문제가 발생했습니다. 예. 당신은 사용자 / 스키마 ABC에서와 같은 PL / SQL에서 저장 프로 시저를 실행하는 경우 사용자 / 스키마 XYZ에서이다 테이블이 있습니다. 이 경우 ABC는 XYZ 테이블 GRANT 즉 권한이 있어야

    어느 u는 해당 스키마 / 테이블에 권한이 해달라고 또는 테이블이 존재 않습니다. 당신이 당신의 저장 프로 시저에서 다른 스키마 테이블을 사용하는 경우 대부분이 문제가 발생했습니다. 예. 당신은 사용자 / 스키마 ABC에서와 같은 PL / SQL에서 저장 프로 시저를 실행하는 경우 사용자 / 스키마 XYZ에서이다 테이블이 있습니다. 이 경우 ABC는 XYZ 테이블 GRANT 즉 권한이 있어야

    그랜트 모든 온으로 ABC;

    Select * From Dba_Tab_Privs Where Owner = 'XYZ'and Table_Name = <Table_Name>;
    
  5. ==============================

    5.아주 간단한 솔루션은 DB 이름 DBMS과 테이블 정보는 다음 어떤 쿼리에 대한 DBMS.info 될 것입니다 경우처럼 테이블 이름으로 데이터베이스 이름을 추가하는 것입니다.

    아주 간단한 솔루션은 DB 이름 DBMS과 테이블 정보는 다음 어떤 쿼리에 대한 DBMS.info 될 것입니다 경우처럼 테이블 이름으로 데이터베이스 이름을 추가하는 것입니다.

    쿼리 인 경우

    select * from STUDENTREC where ROLL_NO=1;
    

    이 오류가 표시 될 수 있지만,

    select * from DBMS.STUDENTREC where ROLL_NO=1; 
    

    그것은 지금 실제로 표는 발견되지 않기 때문입니다.

  6. from https://stackoverflow.com/questions/6669575/ora-00942-table-or-view-does-not-exist-works-when-a-separate-sql-but-does-not by cc-by-sa and MIT license