Zu Ihrer Information, in diesem Fall wurde festgestellt, dass die Ursache ein gemischter Fallspaltenname in der DDL für die Tabellenerstellung ist.
Wenn Sie jedoch "Old Style" - und ANSI-Joins mischen, wird möglicherweise dieselbe Fehlermeldung angezeigt, auch wenn die DDL ordnungsgemäß mit dem Namen der Großbuchstabentabelle ausgeführt wurde. Dies ist mir passiert und Google hat mich auf diese Stackoverflow-Seite geschickt, sodass ich dachte, ich würde sie teilen, seit ich hier bin.
SELECT A.EMPLID, B.FIRST_NAME, C.LAST_NAME
FROM PS_PERSON A
INNER JOIN PS_NAME_PWD_VW B ON B.EMPLID = A.EMPLID
INNER JOIN PS_HCR_PERSON_NM_I C ON C.EMPLID = A.EMPLID
WHERE
LENGTH(A.EMPLID) = 9
AND LENGTH(B.LAST_NAME) > 5
AND LENGTH(C.LAST_NAME) > 5
ORDER BY 1, 2, 3
/
SELECT A.EMPLID, B.FIRST_NAME, C.LAST_NAME
FROM PS_PERSON A
, PS_NAME_PWD_VW B
, PS_HCR_PERSON_NM_I C
WHERE
B.EMPLID = A.EMPLID
and C.EMPLID = A.EMPLID
and LENGTH(A.EMPLID) = 9
AND LENGTH(B.LAST_NAME) > 5
AND LENGTH(C.LAST_NAME) > 5
ORDER BY 1, 2, 3
/
Die beiden obigen SQL-Anweisungen sind äquivalent und erzeugen keinen Fehler.
Wenn Sie versuchen, sie zu mischen, können Sie Glück haben, oder Sie können ein Oracle mit einem ORA-00904-Fehler erhalten.
SELECT A.EMPLID, B.FIRST_NAME, C.LAST_NAME
FROM
PS_PERSON A
inner join PS_HCR_PERSON_NM_I C on C.EMPLID = A.EMPLID
, PS_NAME_PWD_VW B
WHERE
B.EMPLID = A.EMPLID
and LENGTH(A.EMPLID) = 9
AND LENGTH(B.FIRST_NAME) > 5
AND LENGTH(C.LAST_NAME) > 5
/
SELECT A.EMPLID, B.FIRST_NAME, C.LAST_NAME
FROM
PS_PERSON A
, PS_NAME_PWD_VW B
inner join PS_HCR_PERSON_NM_I C on C.EMPLID = A.EMPLID
WHERE
B.EMPLID = A.EMPLID
and LENGTH(A.EMPLID) = 9
AND LENGTH(B.FIRST_NAME) > 5
AND LENGTH(C.LAST_NAME) > 5
/
Und die nicht hilfreiche Fehlermeldung, die das Problem überhaupt nicht wirklich beschreibt:
>[Error] Script lines: 1-12
ORA-00904: "A"."EMPLID": invalid identifier Script line 6, statement line 6,
column 51
Ich konnte diesbezüglich im folgenden Blog-Beitrag Nachforschungen anstellen:
In meinem Fall habe ich versucht, manuell Joins im alten Stil in ANSI-Style-Joins zu konvertieren, und zwar schrittweise, jeweils eine Tabelle nach der anderen. Dies scheint eine schlechte Idee gewesen zu sein. Stattdessen ist es wahrscheinlich besser, alle Tabellen gleichzeitig zu konvertieren oder eine Tabelle und ihre Where-Bedingungen in der ursprünglichen Abfrage auskommentieren, um sie mit der neuen ANSI-Abfrage zu vergleichen, die Sie schreiben.