Zunächst ein allgemeiner Hinweis:Geben Sie Ihre Variable l_sql
aus zu Ihrer Konsole mit dbms_output.put_line
oder verwenden Sie eine Art Debugging-Tabelle, in die Sie sie einfügen können. Achten Sie auch auf den Datentyp dieser Variablen. Wenn Sie das SQL erweitern müssen, können Sie einen Punkt erreichen, an dem Sie ein CLOB
verwenden müssen Variable anstelle von varchar2
.
Sie müssen Tabellenstrukturen und Testdaten liefern, wenn Sie Ihr Problem vollständig analysieren lassen möchten, daher gebe ich Ihnen zunächst einige allgemeine Erklärungen:
Use Generic Column Names
ist ok, wenn Sie eine feste, unveränderliche Anzahl von Spalten haben. Aber wenn sich die Reihenfolge Ihrer Spalten oder sogar die Menge ändern kann, dann ist dies keine gute Idee, da Ihre Seite einen Fehler anzeigt, wenn Ihre Abfrage mehr Spalten als Generic Column Count
ergibt
Option 1:Verwenden Sie Spaltenaliase in Ihrer Abfrage
Erweitern Sie Ihren PL/SQL Function Body returning SQL Query
so, dass ausführliche Anzeigenamen wie folgt ausgegeben werden:
return 'select 1 as "Your verbose column name", 2 as "Column #2", 3 as "Column #3" from dual';
Das sieht so aus:
Es hat den Nachteil, dass die Spaltennamen auch so im Designer erscheinen und APEX diese Spaltennamen nur aktualisiert, wenn Sie die Funktion erneut validieren. Es wird Ihnen schwer fallen, auf eine Spalte mit dem internen Namen Your verbose column name
zu verweisen in einem Vorgangscode oder einer dynamischen Aktion.
Es funktioniert jedoch immer noch, selbst wenn Sie die Spaltennamen ändern, ohne APEX mitzuteilen, zum Beispiel durch Externalisieren des PL/SQL Function Body
in eine reelle Funktion.
Option 2:Benutzerdefinierte Spaltenüberschriften verwenden
Etwas versteckt, aber es gibt auch die Möglichkeit komplett individueller Spaltenüberschriften. Es steht fast am Ende der Attribute Seite Ihrer Berichtsregion.
Hier können Sie auch eine Funktion angeben, die Ihre Spaltennamen zurückgibt. Beachten Sie, dass diese Funktion keine SQL-Abfrage zurückgeben soll, die selbst Spaltennamen zurückgibt, sondern stattdessen durch einen Doppelpunkt getrennte Spaltennamen zurückgibt .
Mit dieser Methode ist es einfacher, Ihre Spalten im Designer zu identifizieren und zu referenzieren:
Option 3:Beides
Deaktivieren Sie generische Spaltennamen, lassen Sie Ihre Abfrage Spaltennamen zurückgeben, die leicht identifiziert und referenziert werden können, und verwenden Sie die custom column headings
Funktion gibt ausführliche Namen für Ihre Benutzer zurück.
Meine persönliche Meinung
Ich verwende die dritte Option in einer Produktionsanwendung, in der Benutzer die Anzahl und Reihenfolge der Spalten mithilfe von Shuttle-Elementen auf der Berichtsseite selbst ändern können. Es hat einige Zeit gedauert, aber jetzt funktioniert es wie ein Zauber, wie ein dynamischer PIVOT
ohne PIVOT
.