Anonim

Vous voyez parfois une erreur ora-00942 lorsque vous exécutez une instruction SQL. Cela a plusieurs causes et, comme d'habitude, la syntaxe d'erreur n'est pas la plus descriptive. Si vous rencontrez ce problème et que vous souhaitez savoir comment corriger l'erreur ora-00942, lisez la suite.

Autant que je sache, il y a trois causes principales à l'erreur ora-00942:

  1. Droits d'utilisateur insuffisants
  2. La table ou la vue n'existe pas réellement
  3. La table ou la vue est dans un schéma différent

Je vais vous montrer comment vous adresser à chacun.

Corrige l'erreur ora-00942

Tout d'abord, un petit avertissement. Je ne suis pas administrateur de base de données, je suis un administrateur Windows et un technicien en matériel de bureau et serveur. Je sais comment utiliser SQL, mais pas à un degré d'expertise et certainement pas au niveau qui peut résoudre des problèmes. Je devais demander de l'aide à l'un de mes amis DBA Oracle. Ainsi, alors que j'écrivais cet article, les éléments intelligents sont les siens.

Cette liste de trois causes de l'erreur ora-00942 n'est pas exhaustive. Il y a apparemment d'autres causes aléatoires, mais ces trois-là sont apparemment les plus courantes.

Droits d'utilisateur insuffisants

L'une des principales causes de l'erreur ora-00942 est que l'utilisateur ne dispose pas des privilèges suffisants pour accéder à la table en question. Vous pouvez vérifier cela en exécutant deux requêtes.

- Répertorie les privilèges système pour l'utilisateur ou le rôle SELECT * FROM dba_sys_privs WHERE grantANT IN (& user_role, 'PUBLIC');

- liste les privilèges d'objet pour l'utilisateur ou le rôle

SELECT bénéficiaire, propriétaire || '.' || objet nom_table, privilège, attributable FROM dba_tab_privs WHERE bénéficiaire (dans le répertoire & user_role) ORDER BY, propriétaire || '.' || table_name, privilege;

Ces deux vous diront si l'utilisateur en question dispose des privilèges appropriés pour exécuter la commande. Si l'utilisateur dispose des privilèges appropriés, passez au suivant. Si l'utilisateur ne dispose pas des privilèges appropriés, accordez-lui ou demandez à votre administrateur de base de données de le faire.

L'erreur ora-00942 peut également se produire si l'utilisateur du schéma que vous utilisez a les privilèges INSERT, mais pas les privilèges SELECT. Encore une fois, vérifiez le niveau de privilège et ajoutez SELECT à la liste ou demandez à un administrateur de base de données de le faire. Apparemment, le privilège SELECT spécifique doit être accordé à chaque schéma. Dans le cas contraire, vous verrez toujours l'erreur ora-00942.

La table ou la vue n'existe pas réellement

Cette cause de l'erreur ora-00942 peut être provoquée par une syntaxe de requête incorrecte ou par l'absence de la table. Bien que cela semble être le premier endroit logique pour commencer, je suis assuré de manière fiable que le privilège de l'utilisateur est la première cause de l'erreur. La table absente ou la syntaxe de table incorrecte utilisée est la deuxième.

Pour vérifier si la table existe, vérifiez d'abord la syntaxe de la requête. Si la syntaxe est correcte, exécutez cette requête.

SELECT propriétaire, nom_objet, type_objet FROM tous_objets WHERE type_objet IN ('TABLE', 'VIEW') AND nom_objet = 'YOUR_TABLE_NAME';

Sur cette dernière ligne, insérez le nom de la table où vous voyez "YOUR_TABLE_NAME". Cela devrait vous indiquer si la table que vous essayez d'interroger existe ou non. S'il renvoie sans table, la table que vous interrogez n'existe pas dans le schéma ou la base de données.

Si le système que vous utilisez possède un menu Tables, vous pouvez rechercher manuellement la table si vous préférez, mais la requête ci-dessus permet d'exécuter le travail.

La table ou la vue est dans un schéma différent

Si l'utilisateur a des privilèges et que la table existe et que vous voyez toujours l'erreur ora-00942, il est probable que le schéma en soit la cause. Si vous gérez plusieurs schémas, il est facile d'exécuter une requête sur un schéma qui n'est pas le vôtre. Lorsque vous êtes occupé et que vous êtes à la hauteur, c’est une simple erreur à faire.

Vérifiez le schéma manuellement si vous le pouvez ou ajoutez le nom du schéma dans la ligne FROM de votre requête. Si vous ne disposez pas des privilèges appropriés pour le nouveau schéma, vous verrez l'erreur ora-00942 une fois de plus. Revenez au premier correctif de privilège utilisateur et vérifiez le schéma correspondant ou demandez à votre DBA de le faire pour vous.

Comme mentionné ci-dessus, j'ai consulté un de mes amis DBA Oracle pour cette pièce, donc tout le mérite de son travail acharné. Si vous trouvez des erreurs ou des omissions ici, elles sont à moi seul. Faites-moi savoir dans la section commentaires si j'ai oublié quelque chose ou si je me suis trompé et je le corrigerai.

Si vous connaissez un autre moyen de corriger l'erreur ora-00942, faites-nous en part ci-dessous!

Comment corriger l'erreur ora-00942