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!