Una sugerencia general primero:genera tu variable l_sql
a su consola usando dbms_output.put_line
o use algún tipo de tabla de depuración donde pueda insertarlo. También tenga cuidado con el tipo de datos de esa variable. Si necesita expandir el SQL, puede llegar a un punto en el que necesita usar un CLOB
variable en lugar de varchar2
.
Deberá proporcionar estructuras de tablas y datos de prueba si desea que su problema se analice por completo, por lo tanto, primero le daré algunas explicaciones generales:
Use Generic Column Names
está bien si tiene una cantidad permanente e inmutable de columnas. Pero si el orden de sus columnas o incluso la cantidad puede cambiar, entonces esta es una mala idea, ya que su página mostrará un error si su consulta da como resultado más columnas que Generic Column Count
Opción 1:Usa alias de columna en tu consulta
Mejore su PL/SQL Function Body returning SQL Query
de una manera que genera nombres para mostrar detallados, como este:
return 'select 1 as "Your verbose column name", 2 as "Column #2", 3 as "Column #3" from dual';
Eso se ve así:
Tiene la desventaja de que los nombres de las columnas también aparecen de esta manera en el diseñador y APEX solo actualizará estos nombres de columnas si vuelve a validar la función. Tendrá dificultades para hacer referencia a una columna con el nombre interno de Your verbose column name
en un código de proceso o acción dinámica.
Sin embargo, aún funciona, incluso si cambia los nombres de las columnas sin decirle a APEX, por ejemplo, al externalizar el PL/SQL Function Body
en una función real.
Opción 2:usar encabezados de columna personalizados
Un poco oculto, pero también existe la opción de encabezados de columna completamente personalizados. Está casi al final de los atributos página de la región de su informe.
Aquí también puede proporcionar una función que devuelva los nombres de sus columnas. Tenga cuidado de que esta función no devuelva una consulta SQL que devuelva nombres de columnas, sino que devuelva nombres de columnas separados por dos puntos .
Con este método, es más fácil identificar y hacer referencia a sus columnas en el diseñador:
Opción 3:Ambos
Desactive los nombres de columna genéricos, permita que su consulta devuelva nombres de columna que se puedan identificar y referenciar fácilmente, y use los custom column headings
la función devuelve nombres detallados para sus usuarios.
Mi opinión personal
Estoy usando la tercera opción en una aplicación de producción donde las personas pueden cambiar la cantidad y el orden de las columnas usando elementos de transporte en la página del informe. Tomó algo de tiempo, pero ahora funciona de maravilla, como un PIVOT
dinámico sin PIVOT
.