Para su información, en este caso se encontró que la causa era un nombre de columna de caso mixto en el DDL para la creación de la tabla.
Sin embargo, si está mezclando "estilo antiguo" y combinaciones ANSI, podría obtener el mismo mensaje de error incluso cuando el DDL se realizó correctamente con el nombre de la tabla en mayúsculas. Esto me pasó a mí, y Google me envió a esta página de stackoverflow, así que pensé en compartir desde que estaba aquí.
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
/
Las dos declaraciones SQL anteriores son equivalentes y no producen ningún error.
Cuando intentas mezclarlos, puedes tener suerte, o puedes obtener un error de Oracle con ORA-00904.
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
/
Y el mensaje de error inútil que realmente no describe el problema en absoluto:
>[Error] Script lines: 1-12
ORA-00904: "A"."EMPLID": invalid identifier Script line 6, statement line 6,
column 51
Pude encontrar algo de investigación sobre esto en la siguiente publicación del blog:
En mi caso, estaba intentando convertir manualmente de un estilo antiguo a uniones de estilo ANSI, y lo estaba haciendo de forma incremental, una tabla a la vez. Esto parece haber sido una mala idea. En cambio, probablemente sea mejor convertir todas las tablas a la vez, o comentar una tabla y sus condiciones en la consulta original para compararla con la nueva consulta ANSI que está escribiendo.