La première étape du diagnostic d'un problème lors de la création d'une vue consiste à essayer la commande select
partie à elle seule. Dans ce cas, vous obtiendrez toujours l'erreur ORA-00942, mais le problème n'est plus qu'un problème de requête et d'accès et ne concerne pas spécifiquement la vue.
Lorsque vous obtenez ORA-00942 :la table ou la vue n'existe pas , c'est parce que :
-
Le nom de la table ou de la vue que vous avez tapé n'existe pas vraiment.
-
Vérifiez l'orthographe - il y a peut-être une faute de frappe.
-
Êtes-vous connecté à une base de données là où elle existe ? Vous êtes peut-être sur un système de test qui ne l'a pas.
-
Requête
dba_objects
pour voir si la table existe dans un autre schéma. (Si vous n'avez pas les privilèges pour interroger dba_objects,all_objects
répertorie tout ce que vous êtes autorisé à afficher, ce qui peut être utile.)
-
-
Cela existe vraiment, mais c'est dans un autre schéma.
Dans ce cas, il y a deux problèmes possibles :-
Vous n'êtes pas autorisé à l'interroger. Le propriétaire de la table doit
grant read on xyz
(remplacez le nom réel de la table parxyz
) soit-
vous
-
public
(si vous voulez que tout le monde puisse voir les données, ce n'est pas toujours conseillé) -
un rôle que vous avez (mais les rôles ne sont pas utilisés par le PL/SQL stocké ou vues , cependant, il est donc possible que vous puissiez interroger une table dans un autre schéma grâce à un rôle que vous avez, mais que vous ne puissiez toujours pas créer une vue ou une procédure qui l'utilise.)
-
-
Vous devez spécifier le schéma. Supposons que vous souhaitiez interroger les
REGIONS
table enHR
mais vous êtes connecté en tant queSCOTT
. Si vous ne faites queselect * from regions
il rechercheraSCOTT.REGIONS
, qui n'existe pas. Pour résoudre ce problème, effectuez l'une des actions suivantes :-
utilisez
hr.regions
explicitement dans votre requête. -
dans votre schéma,
create or replace synonym regions for hr.regions;
Maintenant, chaque fois que vous faites référence à desregions
, la base de données redirigera automatiquement vershr.regions
. -
dans n'importe quel schéma avec l'autorisation de créer des synonymes publics :
create or replace public synonym regions for hr.regions;
Désormais, toute personne se connectant à la base de données aura des références auxregions
redirigé vershr.regions
, ce qui n'est pas toujours une bonne idée, mais c'est quand même une option. -
alter session set current_schema = hr;
Désormais, le schéma par défaut pour résoudre les noms d'objets estHR
et non celui auquel vous vous êtes connecté. Pour les applications qui se connectent toujours en tant qu'utilisateur différent de celui qui possède les tables, vous pouvez créer un après le déclencheur de connexion donc c'est toujours réglé. Ensuite, ils peuvent simplement se référer auxregions
etc sans avoir besoin de spécifier de schéma et sans synonymes.
-
-