簡體   English   中英

使用Oracle SQL Developer中的表達式對多個列進行別名

[英]Aliasing multiple columns using an expression in Oracle SQL Developer

在Oracle SQL Developer中,是否可以使用表達式將多個列名作為SELECT語句的一部分(而不是手動指定每列的別名)?

具體來說,我有一個映射表,用於存儲大型數據表中與任務相關的列子集。 映射表中的每個條目都將數據表列名稱與人類可讀的描述相關聯。 我想選擇映射表中列出的數據表列,並將它們與映射表描述一起顯示為列標題,但是無需手動逐一鍵入列名及其易於理解的別名。 這可能嗎?

我在網上找到答案的最接近的是這個問題,它表明我想做的事情是不可能的: Oracle會自動重命名列中的列?

但是,這個問題是從2010年開始的。我希望情況有所改變。 謝謝您的幫助。

使用100%本機SQL仍然無法做到這一點。 通常最好避免這些過度動態的情況; 一點額外打字通常比添加復雜的代碼更好。

如果你真的有一個特殊的情況,並願意支付的價格有辦法做到這一點。 它不使用100%自然SQL,但它可以被認為是“純”SQL,因為它使用Oracle Data Cartridge框架來擴展數據庫。

您可以使用我的開源項目Method4在SQL中運行動態SQL。 按照Github步驟下載並安裝對象。 代碼非常復雜,但幸運的是,您不需要了解其中的大部分內容。 只有以下簡單的更改才可以開始自定義列名稱。

方法4的變化

創建一個變量來保存新的列名。 將其添加到函數ODCITableDescribe的聲明部分,位於文件METHOD4_OT.TPB的第12行。

  v_new_column_name varchar2(32);

創建一個SQL語句以將舊列映射到新列。 將其添加到第31行,將在每列運行該行。

     --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;

更改第42行以引用新變量名稱:

                      substr(v_new_column_name, 1, 30),

映射表

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.');

查詢范例

現在,任何查詢的列名稱都可以神奇地更改為所需的任何值。 這不僅僅是使用文本替換; a *的列也會改變。

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

警告

Oracle SQL非常復雜,如果有很多潛在的問題,那么任何嘗試構建一個層都是最重要的。 例如,性能肯定會變慢。 雖然我已經創建了許多單元測試,但我確信有些奇怪的數據類型無法正常工作。 (但如果你發現任何問題,請創建一個Github問題,以便我可以修復它。)

根據我的經驗,當人們要求這種動態行為時,通常不值得花費。 有時,進行一些額外的輸入是最好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM