Pourquoi dois-je ORA-00904 même lorsque la colonne est-elle présente?
Je vois une erreur lors de l'exécution d'hibernate requête sql.
java.sql.SQLException: ORA-00904: "table_name"."column_name": identifiant invalide
Quand j'ouvre la table dans sqldeveloper, la colonne est présente.
L'erreur est seulement dans la PROD, pas de DEV.
Que dois-je vérifier?
- Vous pouvez poster la requête?
- Je crois que le plus gros problème pourrait être des colonnes n'est pas dans la base de données de production
- avez-vous trouver la cause du problème?
- Pas de. Je ne le trouve pas
- dans mon cas, après beaucoup de débogage d'une colonne a été miss orthographié
- même ce fut le cas pour moi en tant que @shareef dit
- J'ai eu le même problème, cette erreur ne se produit que dans le système Prod.
Vous devez vous connecter pour publier un commentaire.
Il pourrait être un cas de sensibilité à la question. Normalement, les tables et les colonnes ne sont pas sensibles à la casse, mais ils seront si vous utilisez des guillemets. Par exemple:
Oracle va jeter
ORA-00904
si l'utilisateur ne dispose pas des autorisations appropriées sur les objets impliqués dans la requête.Ce qui m'est arrivé lorsque j'ai accidentellement défini deux entités avec la même base de données persistante de la table. Dans l'une des tables de la colonne en question n'existe pas, dans l'autre pas. Lors de la tentative de persistance d'un objet (le type se référant à la mauvaise table sous-jacente), cette erreur s'est produite.
Écrire le nom de la colonne dans entre guillemets DOUBLES, comme dans "nomcolonne".
Si le message d'erreur indique un caractère différent que ce que vous avez écrit, il est très probable que votre client sql effectué une automatique en cas de conversion pour vous. L'utilisation des guillemets pour contourner la que les. (Cela fonctionne sur Squirrell Client 3.0).
C'est parce que l'un de la DBs, la colonne a été créé avec ", ce qui rend son nom sensibles à la casse.
Oracle De La Table Nom De La Colonne : GoodRec
La ruche ne peut pas reconnaître la sensibilité de cas : ERREUR renvoyé a -
Causés par: java.sql.SQLSyntaxErrorException: ORA-00904: "GOODREC": identifiant invalide
Solution : Renommer Oracle nom de la colonne à toutes les casquettes.
vérifier la position de la Colonne d'annotation dans la classe java pour le champ
Par Exemple,considérons un tableau avec le nom de l'ÉTUDIANT avec 3 colonnes(Nom,Roll_No,Marques).
Alors assurez-vous d'avoir ajouté annotation ci-dessous de la colonne avant la Méthode de lecture au lieu de la méthode d'initialisation. Il permettra de résoudre ur problème
@Column(name = "Nom", length = 100)
Avez-vous comparé les définitions de table en Prod et Dev?
Et lorsque vous l'exécutez dans SQL Developer, vous exécutez la requête en Prod (même base de données que l'application) et avec le même utilisateur?
Si il y a quelques colonnes supplémentaires que vous ajoutez (à l'aide d'une commande alter) et ces changements ne sont pas encore promu à la prod, ce problème est possible.
Vous pouvez poster à la définition de la table et de votre Requête?
- Je utiliser Toad pour Oracle et si la table est détenue par un autre nom d'utilisateur que celui que vous avez connecté et que vous avez accès en lecture à la table, vous pouvez avoir besoin d'ajouter de la table d'origine du propriétaire du nom de table.
Par exemple, disons que le propriétaire de la table est le nom de 'OWNER1 et que vous êtes connecté en tant que 'USER1'. Cette requête peut vous donner un ORA-00904 erreur:
En préfixant le table_name avec le propriétaire de la table éliminé l'erreur et donne des résultats:
Vérifier les informations d'identification nom d'utilisateur utilisé pour se connecter à la base de données. (persistence.xml ??). Le problème est la plupart du temps, le nom d'utilisateur\mot de passe utilisés pour la connexion à la base de données, n'a pas visiblity à l'objet (table_name dans ce cas). ( essayez de vous connecter à sql developer, en utilisant le même nom d'utilisateur\mot de passe disponible dans votre source de données)