2012-05-24 5 views
1

Мне нужно выбрать 50 полей из таблицы. Но 20-е поле должно быть разделено на 100. Если бы это было не так, я мог бы просто написать select * из таблицы. В этом случае, как я мог выбрать без необходимости писать все столбцы.select statement in oracle

Это хорошая практика, чтобы перечислить все столбцы в явном виде, но когда я хочу, чтобы иметь быстрый просмотр данных в течение короткого анализа, я предпочел бы что-то вроде выберите * (1-19 полеев) , двадцатое поле/100 , * (21-50 полей) из таблица.

Возможно ли это в оракуле?

+0

Если есть разумный способ, может сделать процедуру «деление 20-го поля на 100» в другом месте, вероятно, вам нужно. – 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; 

Run, что в вашей IDE и результаты копировать/вставить в свой код. Модифицируйте, если необходимо, в соответствии с вашими потребностями.

Не ленитесь, я знаю, что его соблазн сказать select *, но гораздо лучше указать столбцы явно. Вышеприведенный код сделает это гораздо менее болезненным, чем запись каждого столбца вручную.