wake-up-neo.com

Warum habe ich ORA-00904, obwohl die Spalte vorhanden ist?

Beim Ausführen der SQL-Abfrage im Ruhezustand wird ein Fehler angezeigt.

Java.sql.SQLException: ORA-00904: "Tabellenname". "Spaltenname": Ungültiger Bezeichner

Wenn ich die Tabelle in sqldeveloper öffne, ist die Spalte vorhanden.

Der Fehler tritt nur in PROD auf, nicht in DEV.

Was soll ich überprüfen?

27
Victor

Es könnte sich um ein Problem mit der Groß- und Kleinschreibung handeln. Normalerweise wird bei Tabellen und Spalten nicht zwischen Groß- und Kleinschreibung unterschieden, bei Verwendung von Anführungszeichen jedoch. Beispielsweise:

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

Oracle gibt ORA-00904 Aus, wenn der ausführende Benutzer nicht über die erforderlichen Berechtigungen für die an der Abfrage beteiligten Objekte verfügt.

7
vls

Dies ist mir passiert, als ich versehentlich zwei Entitäten mit derselben persistenten Datenbanktabelle definiert habe. In einer der Tabellen war die betreffende Spalte vorhanden, in der anderen nicht. Beim Versuch, ein Objekt (vom Typ, der auf die falsche zugrunde liegende Datenbanktabelle verweist) beizubehalten, ist dieser Fehler aufgetreten.

6
johanwannheden

Schreiben Sie den Spaltennamen zwischen das DOUBLE-Anführungszeichen wie in "columnName".

Wenn die Fehlermeldung eine andere Groß-/Kleinschreibung als die von Ihnen geschriebene anzeigt, hat Ihr SQL-Client höchstwahrscheinlich eine automatische Groß-/Kleinschreibung für Sie durchgeführt. Verwenden Sie doppelte Anführungszeichen, um das zu umgehen. (Dies funktioniert auf Squirrell Client 3.0).

4
Arc

Dies liegt daran, dass in einer der DBs, mit denen die Spalte erstellt wurde, die Groß- und Kleinschreibung beachtet wird.

Name der Oracle-Tabellenspalte: GoodRec Hive kann Groß-/Kleinschreibung nicht erkennen: FEHLER wurde ausgelöst - Auslöser: Java.sql.SQLSyntaxErrorException: ORA-00904: "GOODREC": Ungültiger Bezeichner

Lösung: Benennen Sie den Oracle-Spaltennamen in Großbuchstaben um.

3
Piyush Ugale

überprüfen Sie die Position der Spaltenanmerkung in Java class für das Feld. Betrachten Sie beispielsweise eine Tabelle mit dem Namen STUDENT mit 3 Spalten (Name, Roll_No, Marks).

Stellen Sie dann sicher, dass Sie anstelle der Setter-Methode die Anmerkung der Spalte vor der Getter-Methode hinzugefügt haben. Es wird Ihr Problem lösen @ Column (name = "Name", length = 100)

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

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

Haben Sie die Tabellendefinitionen in Prod und Dev verglichen?

Und wenn Sie es in SQL Developer ausführen, führen Sie die Abfrage in Prod (dieselbe Datenbank wie die Anwendung) und mit demselben Benutzer aus?

Wenn Sie (mithilfe eines Änderungsbefehls) einige zusätzliche Spalten hinzufügen und diese Änderungen noch nicht in Prod übernommen wurden, ist dieses Problem möglich.

Können Sie die Definition der Tabelle und Ihre tatsächliche Abfrage veröffentlichen?

1

Ich verwende Toad für Oracle. Wenn die Tabelle einem anderen Benutzernamen gehört als dem, unter dem Sie angemeldet sind, und Sie zum Lesen der Tabelle berechtigt sind, müssen Sie möglicherweise den ursprünglichen Tabellenbesitzer zum Tabellennamen hinzufügen.

Nehmen wir zum Beispiel an, der Name des Tabellenbesitzers ist "EIGENTÜMER1" und Sie sind als "BENUTZER1" angemeldet. Diese Abfrage kann zu einem ORA-00904-Fehler führen:

select * from table_name where x='test';

Das Präfixieren des Tabellennamens mit dem Tabelleneigentümer behebt den Fehler und führt zu folgenden Ergebnissen:

select * from 
0
Robert Wiley II