2012-04-11 6 views
3

Ich habe eine Prozedur erstellt und die folgende Anweisung darin verwendet.

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

Ich erhalte die folgenden Fehler PL/SQL: ORA-00942: table or view does not exist

ich das Synonym seines Besitzer PUBLIC ist überprüft haben, so sollte es in diesem Fall laufen, aber seine Arbeit nicht.

Eine andere Sache, die ich kann select sql_id from v_$sql where sql_text =v_sql; dies in einfachen Editor .Kann jemand mir dabei helfen.

+0

Auf meinem System heißt die Ansicht 'v $ sql', nicht' v_ $ sql'. – Codo

+0

@Codo: Auf meinem ist es nur V $ sql, sein unter 'sys' Schema –

Antwort

6

Datenbankwörterbuch- oder Systemtabellen (v_ $ sql in diesem Fall) sind Eigentum von Oracle sys Benutzer und benötigen spezielle Berechtigungen, um auf sie zuzugreifen. Sie müssen sich in der Oracle-Datenbank als sysdba user anmelden oder diese Privilegien erhalten (Ihr DBA könnte Ihnen dabei helfen), um Zugriff auf die Datenwörterbuchansichten zu erhalten.

Wie in this article erwähnt

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 

Also, versuchen Sie die folgenden die SELECT auf alle Dictionay Ansicht zu gewähren, so dass Sie es in Ihrem PL/SQL-Blöcke verwenden können.

+0

: Es funktioniert mit' Grant wählen Sie auf v $ sql ', danke –

1

Sehr wahrscheinlich hat der Benutzer, den Sie verwenden, Zugriff auf die Ansicht über eine Rolle und nicht direkt über die Auswahlberechtigung erhalten.

Leider sind Privilegien, die durch eine Rolle erhalten werden, nicht aktiv, wenn PL/SQL ausgeführt wird.

Sie müssen Ihren Datenbankadministrator bitten, dem Benutzer die Berechtigung SELECT direkt zu erteilen.

+0

Ok werde ich meine DBA für das gleiche fragen. –

0

Siehe meine Antwort here. Es könnte sein, weil Sie eine bestimmte Großschreibung irgendwo verwenden