2016-03-25 8 views
1

In Oracle SQL Entwickler verwendet wird, ist es möglich, mehrere Spaltennamen als Teil einer SELECT-Anweisung, einen Ausdruck Alias ​​(im Gegensatz zu manuell die Aliasnamen für jede Spalte spezifiziert)?mehrere Spalten Aliasing einen Ausdruck in SQL Developer

Insbesondere habe ich eine Zuordnungstabelle, die die Aufgabe relevanten Teilmenge von Spalten aus einer großen Datentabelle speichert. Jeder Eintrag in der Zuordnungstabelle verbindet den Namen einer Datentabelle mit einer lesbaren Beschreibung. Ich mag die Daten von Tabellenspalten in der Mapping-Tabelle aufgelistet auszuwählen und sie mit der Zuordnungstabelle Beschreibungen wie die Spaltenüberschriften angezeigt, aber ohne die in den Spaltennamen und ihre Menschen lesbarer Aliase one-by-one manuell eingeben. Ist das möglich?

Der nächstgelegene ich auf eine Antwort online gefunden haben, ist diese Frage SO was darauf schließen lässt, was ich tun möchte, ist nicht möglich: Oracle rename columns from select automatically?

Aber diese Frage ab 2010 ist ich die Situation bin der Hoffnung hat sich geändert . Danke für Ihre Hilfe.

Antwort

0

Dies kann noch nicht mit 100% nativen SQL erfolgen. Diese übermäßig dynamischen Situationen werden normalerweise am besten vermieden; ein wenig mehr Typisierung ist in der Regel besser als komplizierten Code hinzufügen.

Wenn Sie wirklich einen Ausnahmefall haben und bereit sind, den Preis dort zu zahlen, ist ein Weg, dies zu tun. Es verwendet nicht 100% natürliches SQL, aber es könnte als "reines" SQL betrachtet werden, da es das Oracle Data Cartridge-Framework zur Erweiterung der Datenbank verwendet.

Sie können meine Open-Source-Projekt Method4 laufen dynamische SQL in SQL verwenden. Befolgen Sie die Github-Schritte, um die Objekte herunterzuladen und zu installieren. Der Code ist schmerzhaft kompliziert, aber glücklicherweise müssen Sie das meiste nicht verstehen. Nur die folgenden einfachen Änderungen sind erforderlich, um mit der Anpassung von Spaltennamen zu beginnen.

method4 Änderungen

Erstellen Sie eine Variable den neuen Spaltennamen zu halten. Fügen Sie es dem Deklarationsteil der Funktion ODCITableDescribe in Zeile 12 der Datei METHOD4_OT.TPB hinzu.

Erstellen Sie eine SQL-Anweisung, um die alte Spalte der neuen Spalte zuzuordnen. Fügen Sie dies zu Zeile 31 hinzu, wo es für jede Spalte ausgeführt wird.

 --Get mapped column name if it exists. If none, use the existing name. 
    select nvl(max(target_column_name), r_sql.description(i).col_name) 
    into v_new_column_name 
    from column_names 
    where source_column_name = r_sql.description(i).col_name; 

ändern Linie 42 auf den neuen Variablennamen zu verweisen:

     substr(v_new_column_name, 1, 30), 

Mapping Tabelle

drop table column_names; 
create table column_names 
(
    source_column_name varchar2(30), 
    target_column_name varchar2(30), 
    constraint column_names_pk primary key(source_column_name) 
); 
insert into column_names values('A1234', 'BETTER_COLUMN_NAME'); 
insert into column_names values('B4321', 'Case sensitive column name.'); 

Abfrage Beispiel

Jetzt die Spaltennamen von jedem que Sie können sich magisch auf die von Ihnen gewünschten Werte einstellen. Und das verwendet nicht einfach Textersetzung; Die Spalten von * werden ebenfalls geändert.

SQL> select * from table(method4.query('select 1 a1234, 2 b4321, 3 c from dual')); 

BETTER_COLUMN_NAME Case sensitive column name.   C 
------------------ --------------------------- ---------- 
       1       2   3 

Warnungen

Oracle SQL ist horrend kompliziert und jeder Versuch, eine Schicht auf zu bauen, wenn es viele potenzielle Probleme hat. Zum Beispiel wird die Leistung sicherlich langsamer sein. Obwohl ich viele Komponententests erstellt habe, bin ich sicher, dass es einige seltsame Datentypen gibt, die nicht korrekt funktionieren. (Aber wenn Sie irgendwelche finden, erstellen Sie bitte ein Github-Problem, damit ich es beheben kann.)

Meiner Erfahrung nach, wenn Menschen nach dieser Art von dynamischem Verhalten fragen, ist es in der Regel nicht die Kosten wert. Manchmal ist ein bisschen Extra-Tippen die beste Lösung.

+0

Danke Jon! Ich schätze es, dass du dir die Zeit genommen hast, zu antworten und werde dies versuchen. Der Grund, warum ich nach einer dynamischen Lösung suche, ist, dass jedes Mal, wenn ich diese Abfrage ausführen muss - und das ist oft der Fall - gegen neue Tabellen mit neuen Spaltennamen. –