sql >> Database >  >> RDS >> Oracle

Is er een manier om dynamische kolommen in Oracle apex weer te geven?

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 .




  1. kan ik het auto_increment-veld in mySql resetten?

  2. Hoe opgevraagde gegevens te splitsen op scheidingsteken in Oracle?

  3. De beste manier om vergelijkbare items uit een MySQL-database te halen

  4. MySQL Zoek veelhoek die het dichtst bij punt is