Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Gibt es eine Möglichkeit, dynamische Spalten in Oracle Apex anzuzeigen

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 .