Frage

Ich versuche, aus der dba_tab_cols innerhalb einer gespeicherten Prozedur Ansicht auszuwählen. Es funktioniert nicht, und ich weiß nicht, warum.

Wenn ich die folgende SQL als eine Abfrage ausführen:

SELECT t.data_type FROM dba_tab_cols t
WHERE 
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';

es funktioniert gut. Allerdings, wenn ich es in eine gespeicherte Prozedur kopieren etwa so:

SELECT t.data_type INTO dataType FROM dba_tab_cols t
WHERE
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';

Ich erhalte die Fehlermeldung „PL / SQL: ORA-00942: Tabelle oder Sicht nicht existiert“ und das Editor-Highlights dba_tab_cols während zu kompilieren versuchen. Der gleiche db Benutzer wird in beiden Fällen verwendet wird.

Datentyp deklariert als:     datatype varchar2 (128);

PL / SQL (Oracle 9)

Jeder weiß um das Problem?

War es hilfreich?

Lösung

Es ist sehr wahrscheinlich ein priviledges Problem. Ist die Erlaubnis dba_tab_columns über eine Rolle für den Zugriff auf oder ist es ein direkter wählen Zuschuss für Ihre Benutzer? Priviledges über Rollen gewährt ist in sprocs nicht zur Verfügung.

Ein kurzer Blick auf Google schlägt vor, mit all_tab_cols statt und sehen, ob die Tabelle, die die erforderlichen Informationen, die Sie benötigen.

Andere Tipps

Um zu Eoin Antwort hinzufügen:

  

Für die meisten Menschen, es kommt als ein   Überraschung, dass der Benutzer nicht auswählen kann   die Tabelle aus einer Prozedur, wenn   er hat nicht die Auswahl erteilt   direkt rechts (im Gegensatz zu durch   die Rolle)

     

Wenn Tabellen Benutzer versuchen, dies zu kompilieren   Verfahren, erhält er eine ORA-00942   obwohl diese Tabelle existiert sicherlich   und er wurde das Recht eingeräumt, zu wählen   dieser Tisch. Das Problem ist, dass   Verfahren Rollen nicht respektieren; nur   direkt gewährten Rechte respektiert werden.   Also, das bedeutet, dass der Tabelleneigentümer muss   regrant das Recht zu wählen:

http://www.adp-gmbh.ch/ora/err /ora_00942.html

Ich habe kein Orakel installiert, aber vielleicht datatype ist ein reserviertes Wort. Ich würde versuchen, etwas anderes.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top