Question

J'essaie de sélectionner une vue stockée dans la vue dba_tab_cols. Cela ne fonctionne pas et je ne sais pas pourquoi.

Si j'exécute le code SQL suivant en tant que requête:

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

cela fonctionne bien. Cependant, si je le copie dans une procédure stockée comme ceci:

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

Je reçois le message d'erreur "PL / SQL: ORA-00942: la table ou la vue n'existe pas". et l'éditeur met en évidence dba_tab_cols lors de la compilation. Le même utilisateur de base de données est utilisé dans les deux cas.

type de données est déclaré comme:     dataType varchar2 (128);

PL / SQL (Oracle 9)

Quelqu'un connaît le problème?

Était-ce utile?

La solution

C'est probablement un problème de privilèges. La permission d'accéder à dba_tab_columns via un rôle ou s'agit-il d'un droit de sélection directe à votre utilisateur? Les privilèges accordés via des rôles ne sont pas disponibles dans SPROCS.

Un rapide coup d'œil sur Google suggère d'utiliser plutôt all_tab_cols et de voir si cette table contient les informations requises dont vous avez besoin.

Autres conseils

Pour ajouter à la réponse de Eoin:

  

Pour la plupart des gens, il s’agit d’un   surprise que l'utilisateur ne peut pas sélectionner   la table à l'intérieur d'une procédure si   il n'a pas obtenu le choix   directement (par opposition à travers   le rôle)

     

Si l'utilisateur de la table essaie de le compiler   procédure, il obtient un ORA-00942   bien que cette table existe certainement   et il a obtenu le droit de choisir   cette table. Le problème est que   les procédures ne respectent pas les rôles; seulement   les droits accordés directement sont respectés.   Donc, cela signifie que le propriétaire de la table doit   regrant le droit de choisir:

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

Oracle n'est pas installé sur mon ordinateur, mais peut-être que dataType est un mot réservé. J'essaierais autre chose.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top