web-dev-qa-db-fra.com

Pourquoi ai-je ORA-00904 même lorsque la colonne est présente?

Je vois une erreur lors de l'exécution de la requête sql hibernate.

Java.sql.SQLException: ORA-00904: "nom_table". "Nom_colonne": identificateur non valide

Lorsque j'ouvre la table dans sqldeveloper, la colonne est présente.

L'erreur se produit uniquement dans PROD, pas dans DEV.

Que dois-je vérifier?

27
Victor

Ce pourrait être un problème de sensibilité à la casse. Les tableaux et les colonnes ne sont généralement pas sensibles à la casse, mais ils le seront si vous utilisez des guillemets. Par exemple:

create table bad_design("goodLuckSelectingThisColumn" number);
26
Jon Heller

Oracle lancera ORA-00904 si l'utilisateur en cours d'exécution ne dispose pas des autorisations appropriées sur les objets impliqués dans la requête.

7
vls

Cela m'est arrivé lorsque j'ai accidentellement défini deux entités avec la même table de base de données persistante. Dans l'un des tableaux, la colonne en question existait, dans l'autre non. Lorsque vous tentez de conserver un objet (du type faisant référence à la mauvaise table de base de données sous-jacente), cette erreur s'est produite.

6
johanwannheden

Écrivez le nom de la colonne entre les guillemets DOUBLES comme dans "nomColonne".

Si le message d'erreur affiche une casse de caractères différente de celle que vous avez écrite, il est très probable que votre client sql ait effectué une conversion de casse automatique pour vous. Utilisez des guillemets doubles pour contourner cela. (Cela fonctionne sur Squirrell Client 3.0).

4
Arc

C'est parce que l'un des DB avec lequel la colonne a été créée "rend son nom sensible à la casse.

Nom de colonne de table Oracle: GoodRec Hive ne peut pas reconnaître la distinction majuscules/minuscules: ERREUR levée était - Causée par: Java.sql.SQLSyntaxErrorException: ORA-00904: "GOODREC": identificateur non valide

Solution: Renommez le nom de la colonne Oracle en majuscules.

3
Piyush Ugale

vérifier la position de l'annotation de colonne dans Java pour le champ Par exemple, considérons une table avec le nom STUDENT avec 3 colonnes (Name, Roll_No, Marks).

Assurez-vous ensuite d'avoir ajouté l'annotation ci-dessous de la colonne avant la méthode Getter au lieu de la méthode Setter. Cela résoudra votre problème @ Colonne (nom = "Nom", longueur = 100)

**@Column(name = "NAME", length = 100)
public String getName() {**
    return name;
}

    public void setName(String name) {
    this.name= name;
}
2
yogi

Avez-vous comparé les définitions de tableaux dans Prod et Dev?

Et lorsque vous l'exécutez dans SQL Developer, exécutez-vous la requête dans Prod (même base de données que l'application) et avec le même utilisateur?

S'il y a des colonnes supplémentaires que vous ajoutez (à l'aide d'une commande alter) et que ces modifications ne sont pas encore promues en prod, ce problème est possible.

Pouvez-vous publier la définition de la table et votre requête réelle?

1
Rajesh Chamarthi

J'utilise Toad pour Oracle et si la table appartient à un autre nom d'utilisateur que celui auquel vous vous êtes connecté et que vous avez accès à la lecture de la table, vous devrez peut-être ajouter le propriétaire de la table d'origine au nom de la table.

Par exemple, supposons que le nom du propriétaire de la table est "OWNER1" et que vous êtes connecté en tant que "USER1". Cette requête peut vous donner une erreur ORA-00904:

select * from table_name where x='test';

Préfixer le nom_table avec le propriétaire de la table a éliminé l'erreur et donne des résultats:

select * from 
0
Robert Wiley II