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
'programing' 카테고리의 다른 글
react native에서 View 구성 요소를 비활성화할 수 있습니까? (0) | 2023.03.19 |
---|---|
Json에게 말해.Net: 개체를 직렬화할 때 큰따옴표가 아닌 작은따옴표를 씁니다. (0) | 2023.03.19 |
리액션이 있는 루프에는 어떻게 사용합니까? (0) | 2023.03.19 |
단일 SQL에 여러 "WITH AS"를 포함할 수 있습니까? - Oracle SQL (0) | 2023.03.19 |
웹 팩: 각도 자동 검출 jQuery를 만들고 jqLite 대신 angular.element로 사용하는 방법 (0) | 2023.03.19 |