Eerst een algemene hint:voer uw variabele l_sql
uit naar uw console met behulp van dbms_output.put_line
of gebruik een soort debugging-tabel waar je het in kunt invoegen. Wees ook voorzichtig met het gegevenstype van die variabele. Als u de SQL moet uitbreiden, kunt u een punt bereiken waarop u een CLOB
. moet gebruiken variabele in plaats van varchar2
.
U zult tabelstructuren en testgegevens moeten aanleveren als u uw probleem volledig wilt laten analyseren, daarom zal ik u eerst wat algemene uitleg geven:
Use Generic Column Names
is ok als je een permanent, onveranderlijk aantal kolommen hebt. Maar als de volgorde van uw kolommen of zelfs het aantal kan veranderen, dan is dit een slecht idee, omdat uw pagina een fout zal weergeven als uw zoekopdracht resulteert in meer kolommen dan Generic Column Count
Optie 1:gebruik kolomaliassen in uw zoekopdracht
Verbeter uw PL/SQL Function Body returning SQL Query
op een manier dat het uitgebreide weergavenamen uitvoert, zoals deze:
return 'select 1 as "Your verbose column name", 2 as "Column #2", 3 as "Column #3" from dual';
Dat ziet er zo uit:
Het heeft als nadeel dat de kolomnamen ook op deze manier verschijnen in de designer en APEX zal deze kolomnamen alleen updaten als je de functie opnieuw valideert. U zult moeite hebben om naar een kolom te verwijzen met de interne naam Your verbose column name
in een procescode of dynamische actie.
Het werkt echter nog steeds, zelfs als u de kolomnamen wijzigt zonder APEX te vertellen, bijvoorbeeld door de PL/SQL Function Body
te externaliseren in een echte functie.
Optie 2:Gebruik aangepaste kolomkoppen
Een beetje verborgen, maar er is ook de mogelijkheid van volledig aangepaste kolomkoppen. Het staat bijna aan het einde van de attributen pagina van uw rapportregio.
Hier kunt u ook een functie opgeven die uw kolomnamen retourneert. Wees voorzichtig dat deze functie geen SQL-query moet retourneren die zelf kolomnamen retourneert, maar in plaats daarvan kolomnamen retourneert, gescheiden door een dubbele punt .
Met deze methode is het gemakkelijker om uw kolommen in de ontwerper te identificeren en ernaar te verwijzen:
Optie 3:Beide
Schakel Algemene kolomnamen uit, laat uw zoekopdracht kolomnamen retourneren die gemakkelijk kunnen worden geïdentificeerd en waarnaar verwezen kan worden, en gebruik de custom column headings
functie geeft uitgebreide namen voor uw gebruikers.
Mijn persoonlijke mening
Ik gebruik de 3e optie in een productietoepassing waar mensen het aantal en de volgorde van kolommen kunnen wijzigen met behulp van shuttle-items op de rapportpagina zelf. Het heeft even geduurd, maar nu werkt het als een zonnetje, zoals een dynamische PIVOT
zonder PIVOT
.