2012-04-11 6 views
3

프로 시저를 작성하고 그 안에 아래의 명령문을 사용했습니다.

select sql_id into v_sql_id from v_$sql where sql_text =v_sql; 

내가 주인이 PUBLIC 인 동의어를 확인하신 후 다음과 같은 오류 PL/SQL: ORA-00942: table or view does not exist

을 얻고있다, 그래서이 경우에 실행해야합니다,하지만 작동하지 않습니다.

간단한 편집자로 select sql_id from v_$sql where sql_text =v_sql;을 사용할 수 있습니다. 누구나이 도움을 줄 수 있습니까?

+0

내 시스템에서는 뷰를'v_ $ sql'이 아니라'v $ sql'이라고합니다. – Codo

+0

@Codo : 광산에서 V $ sql 만,'sys' 스키마 아래 –

답변

6

데이터베이스 사전 또는 시스템 테이블 (이 경우 v_ $ sql)은 Oracle sys 사용자가 소유하며 액세스하려면 특별한 권한이 필요합니다. sysdba user으로 오라클 데이터베이스에 로그인하거나 데이터 사전보기에 대한 액세스 권한을 얻으려면 해당 권한을 얻으십시오 (DBA가 도움이 될 수 있음).

그래서

The problem is that procedures don't respect roles; only directly granted rights 
are respected. So, that means that table_owner has to regrant the right to select 

this article에서 언급 한 바와 같이, 당신은 당신의 PL/SQL 블록에서 사용할 수 있도록 모든 dictionay보기에 SELECT 권한을 부여하려면 다음을 시도하십시오.

grant select any dictionary to USERNAME 
+0

:'grant select on v $ sql to '와 함께 작동합니다. 감사합니다. –

1

아마도 사용중인 사용자에게 선택 권한이 아닌 역할을 통해보기에 대한 액세스 권한이 부여되었을 것입니다.

불행히도 역할을 통해 얻은 권한은 PL/SQL을 실행할 때 활성화되지 않습니다.

사용자에게 SELECT 권한을 직접 부여하도록 DBA에 요청해야합니다.

+0

그래도 DBA에게 물어볼 것입니다. –

0

내 대답을 참조하십시오. here. 어딘가에서 특정 대문자를 사용하고 있기 때문일 수 있습니다.

관련 문제