ORA-00918: columna definida de forma ambigua al crear el Informe Ampliado

En esta oportunidad, un alumno del curso de Oracle APEX le ocurrió este error, y como es muy posible que a otros les pase lo mismo, he decidido compartir aquí la solución.

Hice un demo, en el cual estoy usando el mismo modelo de datos del curso, pero aplica a cualquier situación.

Estoy usando la versión 19.2 de Oracle APEX.

La definición de mi tabla de Matriculas es:

Al crear una página Master Detail – Drill Down, se crea bien las dos páginas, pero cuando quiero editar un registro de la página maestra, haciendo click en el icono del lapicito, se muestra el siguiente error, “ORA-00918: columna definida de forma ambigua”.

Al revisar la depuración de la página puedo ver que APEX indica que la sentencia que genera el error es:

- error_statement: select i.*
 from (
select "MAT_ID","ALU_ID","FECHA","USUARIO","OBSERVACIONES","TOTAL",(lead("MAT_ID",1)over(order by null)) "NEXT_1",(lag("MAT_ID",1)over(order by null)) "PREV_1",(row_number()over(order by null)) "ROWN",(count(*)over()) "TOTAL"
from ((
select /*+ qb_name(apex$inner) */d."MAT_ID",d."ALU_ID",d."FECHA",d."USUARIO",d."OBSERVACIONES",d."TOTAL" from (
select x.* from "EDU_MATRICULAS" x 

) d

 )) i 

) i where 1=1 


 and "MAT_ID"=:apex$f1

Analizando la sentencia SQL, mi tabla de EDU_MATRICULAS tiene una columna llamada TOTAL, y al crear el maestro-detalle de tipo Drill Down o Ampliado como se muestra en español, genera tres columnas adiciones, el cual una de ellas es (count(*)over()) “TOTAL” que como vemos también se llama TOTAL.

Hay dos soluciones, una sería renombrar la columna de la tabla que no sea TOTAL sino por ejemplo TOTAL_MAT, pero eso implica cambios a nivel base de datos y si ya estamos usando la columna en otras páginas puede generar problemas y errores.

Nota: Es mejor de entrada, después de esto que vemos, no crear columnas en nuestra tabla que se llamen solo TOTAL, sino que sea algo más concreto, ya que APEX utiliza ese nombre para crear el conteo de registros.

Entonces para solucionar esto, lo que podemos hacer es darle un nombre de ALIAS a nuestra columna de TOTAL.

Para ello vamos a la página del detalle, seleccionamos la región de tipo Form, y luego en Origen en vez de que se muestre la tabla EDU_MATRICULAS, vamos a seleccionar Consulta SQL:

Se mostrará todas las columnas de la tabla:

select MAT_ID,
       ALU_ID,
       FECHA,
       TOTAL,
       USUARIO,
       OBSERVACIONES
  from EDU_MATRICULAS

Colocamos un alias a la columna “TOTAL” como “TOTAL_MAT”.

Guardamos los cambios, regresamos a la página maestra y hacemos clic en el ícono del lapicito y ahora sí podemos editar el registro sin problemas.

¡Espero sea de utilidad!

¡Hasta la próxima!

Publicado por Ing. Clarisa Maman Orfali

Clarisa es Oracle ACE Director, con más de 27 años de experiencia como desarrolladora, docente, autora y consultora en Tecnologías de la Información. Clarisa es de Argentina que vive y trabaja en Irvine, California, en los Estados Unidos. Ella es autora de los primeros tres libros de Oracle APEX. También es co-fundadora del Grupo de Usuarios de Oracle de Argentina (AROUG) y se ha especializado los últimos 13 años en el desarrollo de aplicaciones web con Oracle Application Express (APEX).

Deja un comentario

A %d blogueros les gusta esto: