118 Stimmen

ORA-00904: Ungültiger Bezeichner

Ich habe versucht, die folgende Inner-Join-Abfrage mit einer Oracle-Datenbank zu schreiben:

 SELECT Employee.EMPLID as EmpID, 
        Employee.FIRST_NAME AS Name,
        Team.DEPARTMENT_CODE AS TeamID, 
        Team.Department_Name AS teamname
 FROM PS_TBL_EMPLOYEE_DETAILS Employee
 INNER JOIN PS_TBL_DEPARTMENT_DETAILS Team 
 ON Team.DEPARTMENT_CODE = Employee.DEPTID

Dies führt zu der folgenden Fehlermeldung:

 INNER JOIN PS_TBL_DEPARTMENT_DETAILS Team ON Team.DEPARTMENT_CODE = Employee.DEPTID
                                              *
ERROR at line 4:
ORA-00904: "TEAM"."DEPARTMENT_CODE": invalid identifier

Die DDL einer Tabelle lautet:

CREATE TABLE "HRMS"."PS_TBL_DEPARTMENT_DETAILS"
(
  "Company Code" VARCHAR2(255),
  "Company Name" VARCHAR2(255),
  "Sector_Code" VARCHAR2(255),
  "Sector_Name" VARCHAR2(255),
  "Business_Unit_Code" VARCHAR2(255),
  "Business_Unit_Name" VARCHAR2(255),
  "Department_Code" VARCHAR2(255),
  "Department_Name" VARCHAR2(255),
  "HR_ORG_ID" VARCHAR2(255),
  "HR_ORG_Name" VARCHAR2(255),
  "Cost_Center_Number" VARCHAR2(255),
  " " VARCHAR2(255)
)
SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS

0 Stimmen

Sind Sie sicher, dass der Spaltenname Department_Code richtig geschrieben ist?

0 Stimmen

Ja, es gibt eine Spalte Department_Code

16 Stimmen

TL;DR: einfache Anführungszeichen verwenden '' .

3voto

mcha Punkte 2858

Sind Sie sicher, dass Sie eine Spalte haben DEPARTEMENT_CODE auf Ihrem Tisch PS_TBL_ABTEILUNGS_DETAILS

Mehr Informationen über Ihren ERROR

ORA-00904: String: Ungültiger Bezeichner Die Ursache: Der eingegebene Spaltenname fehlt entweder oder ist ungültig. Maßnahme: Geben Sie einen gültigen Spaltennamen ein. Ein gültiger Spaltenname muß mit einem Buchstaben beginnen, nicht länger als 30 Zeichen sein und nur aus folgenden Zeichen bestehen alphanumerischen Zeichen und den Sonderzeichen $, _ und # bestehen. Enthält er andere Zeichen, so muss er in doppelte Anführungszeichen d Anführungszeichen eingeschlossen sein. Es darf sich nicht um ein reserviertes Wort handeln.

3voto

alseddiq Punkte 61

Ich hatte diesen Fehler beim Versuch, eine Entität über JPA zu speichern.

Es war, weil ich eine Kolumne hatte mit @JoinColumn Anmerkung, die nicht über @ManyToOne Bemerkung.

Hinzufügen von @ManyToOne Das Problem wurde behoben.

1voto

voccoeisuoi Punkte 175

Vergewissern Sie sich außerdem, dass der Benutzer, der die Abfrage stellt, über die erforderlichen Berechtigungen verfügt.

Für Abfragen auf Tabellen müssen Sie das Recht SELECT erteilen.
Für Abfragen auf andere Objekttypen (z. B. gespeicherte Prozeduren) müssen Sie das Recht EXECUTE erteilen.

1voto

Ich hatte die gleiche Ausnahme und das Problem in meinem Fall war aufgrund der Spalte nicht in der Unterabfrage vorhanden - obwohl ich weiß, dass die "fehlende" Spalte/der Bezeichner zu der Tabelle mit dem Alias gehört, auf den ich mich beziehe.

Beispiel. _erzeugt diese Abfrage die ORA-00904 - Ungültiger Bezeichner an der Säule MC.SIT_TYPE_ :

SELECT MC.ID_CODE,
       MC.EMP_NAME
FROM (SELECT MC.ID_CODE, 
             MC.EMP_NAME
      FROM EMP_WORKER MC) MC
INNER JOIN TEM_SHEETS FR ON MC.SIT_TYPE = FR.ID_CODE -- This line has the ORA-00904 error.
LEFT JOIN WRK_TYPE RAS ON MC.ID_CODE = RAS.ID_CODE;

Nachdem Sie nun die Unterabfrage geändert haben - durch Hinzufügen der MC.SIT_TYPE Spalte - , die ORA-00904 verschwindet.

Ergebnis:

SELECT MC.ID_CODE,
       MC.EMP_NAME
FROM (SELECT MC.ID_CODE, 
             MC.EMP_NAME, 
             -- Here, the "missing invalid identifier, in this case (MC.SIT_TYPE)" is added: 
             MC.SIT_TYPE
      FROM EMP_WORKER MC) MC
INNER JOIN TEM_SHEETS FR ON MC.SIT_TYPE = FR.ID_CODE 
LEFT JOIN WRK_TYPE RAS ON MC.ID_CODE = RAS.ID_CODE;

Hier sind einige Tipps:

  • Prüfen Sie die Tabulierung/Einrückung Ihres Codes sehr genau - ( abhängig von Ihren Einstellungen ), behandelt SQL Developer die Einrückung Ihres Codes anders.
  • Der Code, an dem Sie arbeiten, ist möglicherweise nicht tabelliert/eingerückt, was die Fehlersuche erschwert und zeitaufwändig macht.
  • Ändern Sie die Aliase Ihrer Spalten/Unterabfragen - Code im Allgemeinen - um eindeutige Aliase zu erzeugen - damit meine ich: verwenden Sie nicht dieselben Aliase für Unterabfragen und verwandte Tabellen.

0voto

C.L.S Punkte 1257

Ich hatte die gleiche Ausnahme in JPA 2 mit Eclipse Link. Ich hatte eine @embedded Klasse mit einer eins zu eins Beziehung zu einer Entität. Aus Versehen hatte ich in der eingebetteten Klasse auch die Annotation @Table("TRADER"). Als die DB von der JPA aus den Entitäten erstellt wurde, wurde auch eine Tabelle TRADER erstellt (was falsch war, da die Entität Trader in die Hauptentität eingebettet war), und die Existenz dieser Tabelle verursachte jedes Mal die oben genannte Ausnahme, wenn ich versuchte, meine Entität zu erhalten. Nach dem Löschen der TRADER-Tabelle verschwand die Ausnahme.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X