Oracle
 sql >> Database >  >> RDS >> Oracle

C'è un modo per visualizzare le colonne dinamiche in Oracle Apex

Prima un suggerimento generale:emetti la tua variabile l_sql alla tua console usando dbms_output.put_line oppure usa una sorta di tabella di debug in cui puoi inserirla. Fai attenzione anche al tipo di dati di quella variabile. Se hai bisogno di espandere l'SQL puoi raggiungere un punto in cui devi usare un CLOB variabile invece di varchar2 .

Dovrai fornire strutture di tabelle e dati di test se desideri che il tuo problema venga analizzato completamente, quindi inizialmente ti darò alcune spiegazioni generali:

Use Generic Column Names va bene se hai una quantità permanente e non modificabile di colonne. Ma se l'ordine delle colonne o anche l'importo può cambiare, questa è una cattiva idea, poiché la tua pagina mostrerà un errore se la tua query risulta in più colonne di Generic Column Count

Opzione 1:utilizza gli alias di colonna nella tua query

Migliora il tuo PL/SQL Function Body returning SQL Query in modo da generare nomi visualizzati dettagliati, come questo:

return 'select 1 as "Your verbose column name", 2 as "Column #2", 3 as "Column #3" from dual';

Sembra così:

Ha lo svantaggio che i nomi delle colonne vengono visualizzati in questo modo anche nella finestra di progettazione e APEX aggiornerà questi nomi delle colonne solo se si riconvalida la funzione. Avrai difficoltà a fare riferimento a una colonna con il nome interno di Your verbose column name in un codice di processo o in un'azione dinamica.

Tuttavia funziona ancora, anche se modifichi i nomi delle colonne senza dirlo ad APEX, ad esempio esternalizzando il PL/SQL Function Body in una funzione reale.

Opzione 2:utilizza intestazioni di colonna personalizzate

Un po' nascosto, ma c'è anche la possibilità di intestazioni di colonna completamente personalizzate. Siamo quasi alla fine degli attributi pagina della regione del tuo rapporto.

Qui puoi anche fornire una funzione che restituisce i nomi delle colonne. Fai attenzione che questa funzione non deve restituire una query SQL che restituisce a sua volta i nomi delle colonne, ma restituisce invece i nomi delle colonne separati da due punti .

Con questo metodo, è più facile identificare e fare riferimento alle tue colonne nel designer:

Opzione 3:entrambi

Disattiva i nomi di colonna generici, lascia che la tua query restituisca nomi di colonna che possono essere facilmente identificati e referenziati e utilizza le custom column headings funzione restituisce nomi dettagliati per i tuoi utenti.

La mia opinione personale

Sto utilizzando la terza opzione in un'applicazione di produzione in cui le persone possono modificare la quantità e l'ordine delle colonne utilizzando gli elementi navetta nella pagina del rapporto. Ci è voluto del tempo, ma ora funziona come un incantesimo, come un PIVOT dinamico senza PIVOT .