2012-05-24 76 views
1

我需要從表中選擇50個字段。但是第20場必須除以100.如果情況並非如此,我可以簡單地從表中選擇*。在這種情況下,我可以如何選擇而不必寫出所有列。oracle中的select語句

這是一個很好的做法,明確提到的所有列,但是當我想爲一個短期分析的數據的快速瀏覽,我寧願像 SELECT *的東西(1-19場) ,20場/ 100 ,*(21-50字段) 。

這在oracle中可能嗎?

+0

如果你有任何合理的方法可以在別的地方做「分20場」程序,你可能應該這樣做。 – zebediah49

+0

你關心保留列的順序嗎? –

+0

@Bo。不,我不需要保存訂單。 – chemicalkt

回答

1

你肯定不想在生產代碼中這樣做,你希望顯式列出列名。你可能想要把計算放在一個函數中,或者把整個查詢放在一個視圖中。但是,如果你只是做了一些分析,你可以很容易地把計算列放在列表的開頭(或結尾),像這樣

SELECT column20/100 computed_col20, a.* 
    FROM table_name a 
0

你可以寫每列的名字,在第20列寫「column/20」。可能看起來很多工作,但我沒有看到任何其他方式。

1

不,如果輸入所有列的工作太多,可以使用SQLDEVELOPER這樣的工具,這樣可以將表格拖入編輯區域,併爲您提供完整的select語句。

另外,最好明確指定列名。如果由於某種原因表格發生變化並且某列丟失,則您的查詢將停止工作。

+1

關於顯式列名的需求的好處。 – APC

2

您可以在開發SQL時使用的最佳工具之一是具有列編輯模式的正派文本編輯器。 SQL Developer提供了一個增強請求,但同時Notepad ++是一個不錯的選擇。

對於這樣的任務,您可以通過表或視圖的DESC獲取列名,使用基於列的編輯器添加對齊的逗號,然後修改需要的列。

例如,如果您需要,還可以方便地應用大多數列的計數並添加列名稱。下面

的例子花了約45秒:

select 
      OWNER              , 
      count(TABLE_NAME    ) c_TABLE_NAME    , 
      count(TABLESPACE_NAME   ) c_TABLESPACE_NAME   , 
      count(CLUSTER_NAME   ) c_CLUSTER_NAME    , 
      count(IOT_NAME    ) c_IOT_NAME     , 
      count(STATUS     ) c_STATUS     , 
      count(PCT_FREE    ) c_PCT_FREE     , 
      count(PCT_USED    ) c_PCT_USED     , 
      count(INI_TRANS    ) c_INI_TRANS     , 
      count(MAX_TRANS    ) c_MAX_TRANS     , 
      count(INITIAL_EXTENT   ) c_INITIAL_EXTENT   , 
      count(NEXT_EXTENT    ) c_NEXT_EXTENT    , 
      count(MIN_EXTENTS    ) c_MIN_EXTENTS    , 
      count(MAX_EXTENTS    ) c_MAX_EXTENTS    , 
      count(PCT_INCREASE   ) c_PCT_INCREASE    , 
      count(FREELISTS    ) c_FREELISTS     , 
      count(FREELIST_GROUPS   ) c_FREELIST_GROUPS   , 
      count(LOGGING     ) c_LOGGING     , 
      count(BACKED_UP    ) c_BACKED_UP     , 
      count(NUM_ROWS    ) c_NUM_ROWS     , 
      count(BLOCKS     ) c_BLOCKS     , 
      count(EMPTY_BLOCKS   ) c_EMPTY_BLOCKS    , 
      count(AVG_SPACE    ) c_AVG_SPACE     , 
      count(CHAIN_CNT    ) c_CHAIN_CNT     , 
      count(AVG_ROW_LEN    ) c_AVG_ROW_LEN    , 
      count(AVG_SPACE_FREELIST_BLOCKS) c_AVG_SPACE_FREELIST_BLOCKS , 
      count(NUM_FREELIST_BLOCKS  ) c_NUM_FREELIST_BLOCKS  , 
      count(DEGREE     ) c_DEGREE     , 
      count(INSTANCES    ) c_INSTANCES     , 
      count(CACHE     ) c_CACHE      , 
      count(TABLE_LOCK    ) c_TABLE_LOCK    , 
      count(SAMPLE_SIZE    ) c_SAMPLE_SIZE    , 
      count(LAST_ANALYZED   ) c_LAST_ANALYZED    , 
      count(PARTITIONED    ) c_PARTITIONED    , 
      count(IOT_TYPE    ) c_IOT_TYPE     , 
      count(TEMPORARY    ) c_TEMPORARY     , 
      count(SECONDARY    ) c_SECONDARY     , 
      count(NESTED     ) c_NESTED     , 
      count(BUFFER_POOL    ) c_BUFFER_POOL    , 
      count(ROW_MOVEMENT   ) c_ROW_MOVEMENT    , 
      count(GLOBAL_STATS   ) c_GLOBAL_STATS    , 
      count(USER_STATS    ) c_USER_STATS    , 
      count(DURATION    ) c_DURATION     , 
      count(SKIP_CORRUPT   ) c_SKIP_CORRUPT    , 
      count(MONITORING    ) c_MONITORING    , 
      count(CLUSTER_OWNER   ) c_CLUSTER_OWNER    , 
      count(DEPENDENCIES   ) c_DEPENDENCIES    , 
      count(COMPRESSION    ) c_COMPRESSION    , 
      count(DROPPED     ) c_DROPPED 
from  dba_tables 
group by owner 
1

數據字典是你的朋友:

select column_name || ',' 
from all_tab_columns 
where table_name = 'SOME_TABLE' 
and owner = 'SOME_OWNER' 
order by column_id; 

運行在你的IDE和複製/粘貼結果到你的代碼。根據需要進行修改以滿足您的輸出需求。

不要懶惰,我知道它傾向於說select *,但它明顯更好地指定列。上面的代碼會比用手寫出每一列更不痛苦。