Oracle
 sql >> Base de données >  >> RDS >> Oracle

Existe-t-il un moyen d'afficher des colonnes dynamiques dans Oracle apex

Un conseil général d'abord :affichez votre variable l_sql à votre console en utilisant dbms_output.put_line ou utilisez une sorte de table de débogage dans laquelle vous pouvez l'insérer. Faites également attention au type de données de cette variable. Si vous avez besoin d'étendre le SQL, vous pouvez atteindre un point où vous devez utiliser un CLOB variable au lieu de varchar2 .

Vous devrez fournir des structures de table et des données de test si vous souhaitez que votre problème soit analysé complètement, donc je vais d'abord vous donner quelques explications générales :

Use Generic Column Names est correct si vous avez un nombre permanent et immuable de colonnes. Mais si l'ordre de vos colonnes ou même le montant peut changer, alors c'est une mauvaise idée, car votre page affichera une erreur si votre requête aboutit à plus de colonnes que Generic Column Count

Option 1 :Utiliser des alias de colonne dans votre requête

Améliorez votre PL/SQL Function Body returning SQL Query de manière à afficher des noms d'affichage détaillés, comme ceci :

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

Cela ressemble à ceci :

Il présente l'inconvénient que les noms de colonne apparaissent également de cette manière dans le concepteur et APEX ne mettra à jour ces noms de colonne que si vous revalidez la fonction. Vous aurez du mal à référencer une colonne avec le nom interne de Your verbose column name dans un code de processus ou une action dynamique.

Cependant, cela fonctionne toujours, même si vous modifiez les noms de colonne sans le dire à APEX, par exemple en externalisant le PL/SQL Function Body en une fonction réelle.

Option 2 :Utiliser des en-têtes de colonne personnalisés

Un peu caché, mais il y a aussi la possibilité d'en-têtes de colonne entièrement personnalisés. C'est presque à la fin des attributs page de votre région de rapport.

Ici, vous pouvez également fournir une fonction qui renvoie les noms de vos colonnes. Attention, cette fonction n'est pas censée renvoyer une requête SQL qui elle-même renvoie des noms de colonnes, mais renvoie à la place des noms de colonnes séparés par un deux-points .

Avec cette méthode, il est plus facile d'identifier et de référencer vos colonnes dans le designer :

Option 3 :les deux

Désactivez les noms de colonne génériques, laissez votre requête renvoyer des noms de colonne qui peuvent être facilement identifiés et référencés, et utilisez les custom column headings la fonction renvoie des noms détaillés pour vos utilisateurs.

Mon avis personnel

J'utilise la 3ème option dans une application de production où les utilisateurs peuvent modifier eux-mêmes le nombre et l'ordre des colonnes à l'aide d'éléments de navette sur la page de rapport. Cela a pris du temps, mais maintenant cela fonctionne comme un charme, comme un PIVOT dynamique sans PIVOT .