programing

ORA-00942: 테이블 또는 뷰가 존재하지 않음(별도의 SQL에서는 동작하지만 Oracle 함수에서는 동작하지 않음)

topblog 2023. 3. 19. 17:49
반응형

ORA-00942: 테이블 또는 뷰가 존재하지 않음(별도의 SQL에서는 동작하지만 Oracle 함수에서는 동작하지 않음)

다음과 같은 sql 문이 있는 경우select * from table1이 기능은 훌륭하지만, 기능에 넣자마자 다음과 같은 것을 얻을 수 있습니다.

ORA-00942: table or view does not exist 

어떻게 해결할까요?

table1에서 선택할 수 있는 권한이 역할에 부여되고 역할이 사용자에게 부여되었을 가능성이 높습니다.역할에 부여된 권한은 사용자에게 역할이 부여된 경우에도 사용자가 작성한 PL/SQL에 사용할 수 없습니다.

이는 sys가 소유한 개체에 대해 dba 역할이 부여된 사용자에게 많이 나타납니다.dba 역할을 가진 사용자는 다음과 같은 작업을 수행할 수 있습니다.SELECT * from V$SESSION다음 함수를 쓸 수 없습니다.SELECT * FROM V$SESSION.

수정은 문제의 오브젝트에 대한 명시적 권한을 사용자에게 직접 부여하는 것입니다.예를 들어 위의 경우 SYS 사용자는 다음 작업을 수행해야 합니다.GRANT SELECT ON V_$SESSION TO MyUser;

당신이 볼 수 있는 몇 가지가 있습니다.질문하신 내용에 따르면 함수 소유자와 테이블 소유자가 다른 것 같습니다.

1) 역할에 의한 권한 부여 : 다른 사용자의 오브젝트에 저장 프로시저 및 기능을 작성하려면 (역할을 통한 액세스가 아닌) 오브젝트에 직접 액세스해야 합니다.

2)

기본적으로 스토어드 프로시저 및 SQL 메서드는 현재 사용자가 아닌 소유자의 권한으로 실행됩니다.

스키마 A에서 테이블을 만들고 스키마 B에서 함수를 작성한 경우 Oracle의 Invoker/Definer Rights 개념을 살펴보고 문제의 원인을 파악해야 합니다.

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

함수가 테이블과 동일한 DB 스키마에 있는지 확인합니다.

해당 스키마/테이블에 대한 권한이 없거나 테이블이 존재합니다.이 문제는 주로 저장 프로시저에서 다른 스키마 테이블을 사용하는 경우에 발생합니다.예를 들어, 사용자/스케마 ABC에서 스토어드 프로시저를 실행하고 있고 동일한 PL/SQL에 사용자/스케마 XYZ에서 가져온 테이블이 있습니다.이 경우 ABC는 GRANT(XYZ 테이블의 권한)를 가져야 합니다.

ABC에 모든 것을 부여한다.

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

매우 간단한 해결책은 DB 이름이 다음과 같이 테이블 이름과 함께 데이터베이스 이름을 추가하는 것입니다.DBMS은 「」입니다.info 된다DBMS.info모든 쿼리에 사용할 수 있습니다.

쿼리가 다음과 같은 경우

select * from STUDENTREC where ROLL_NO=1;

에러가 날 수도 있지만

select * from DBMS.STUDENTREC where ROLL_NO=1; 

지금은 실제로 테이블이 발견됐기 때문에 그렇지 않아요

언급URL : https://stackoverflow.com/questions/6669575/ora-00942-table-or-view-does-not-exist-works-when-a-separate-sql-but-does-not

반응형