En allmän ledtråd först:Mata ut din variabel l_sql
till din konsol med dbms_output.put_line
eller använd någon form av felsökningstabell där du kan infoga den i. Var också försiktig med datatypen för den variabeln. Om du behöver utöka SQL kan du nå en punkt där du behöver använda en CLOB
variabel istället för varchar2
.
Du kommer att behöva tillhandahålla tabellstrukturer och testdata om du vill att ditt problem ska analyseras fullständigt, därför kommer jag först att ge dig några allmänna förklaringar:
Use Generic Column Names
är ok om du har en permanent, oföränderlig mängd kolumner. Men om ordningen på dina kolumner eller till och med beloppet kan ändras är detta en dålig idé, eftersom din sida kommer att visa ett fel om din fråga resulterar i fler kolumner än Generic Column Count
Alternativ 1:Använd kolumnalias i din fråga
Förbättra din PL/SQL Function Body returning SQL Query
på ett sätt att den matar ut omfattande visningsnamn, så här:
return 'select 1 as "Your verbose column name", 2 as "Column #2", 3 as "Column #3" from dual';
Det ser ut så här:
Det har nackdelen att kolumnnamnen också dyker upp på detta sätt i designern och APEX kommer bara att uppdatera dessa kolumnnamn om du omvaliderar funktionen. Du kommer att ha svårt att referera till en kolumn med det interna namnet Your verbose column name
i en processkod eller dynamisk handling.
Men det fungerar fortfarande, även om du ändrar kolumnnamnen utan att berätta för APEX, till exempel genom att externisera PL/SQL Function Body
till en riktig funktion.
Alternativ 2:Använd anpassade kolumnrubriker
Lite dolt, men det finns också möjlighet till helt anpassade kolumnrubriker. Det är nästan i slutet av attributen sida i din rapportregion.
Här kan du även tillhandahålla en funktion som returnerar dina kolumnnamn. Var försiktig så att den här funktionen inte är tänkt att returnera en SQL-fråga som själv returnerar kolumnnamn, utan istället returnera kolumnnamn avgränsade med ett kolon .
Med den här metoden är det lättare att identifiera och referera till dina kolumner i designern:
Alternativ 3:Både och
Stäng av allmänna kolumnnamn, låt din fråga returnera kolumnnamn som lätt kan identifieras och refereras till, och använd de custom column headings
funktion returnerar utförliga namn för dina användare.
Min personliga åsikt
Jag använder det tredje alternativet i en produktionsapplikation där människor själva kan ändra mängden och ordningen på kolumner med hjälp av skyttelobjekt på rapportsidan. Det tog lite tid, men nu fungerar det som en charm, som någon dynamisk PIVOT
utan PIVOT
.