Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 запросец  [new]
TX
Member

Откуда:
Сообщений: 628
есть задачка делать индексы по всем табличкам которые заканчиваются на desc code

с ходу пришла такая идея

select
'create index', table_name || column_name,'on', table_name,
'(', column_name, ');' from (
select
table_name,column_name
from USER_TAB_COLUMNS where
table_name like '%MAP_%' and
column_name like ('%_DESC')
or column_name like ('%_CODE')
and table_name not like ('BIN$%')
minus
select table_name,column_name from USER_IND_COLUMNS
where column_name like ('%_DESC')
or column_name like ('%_CODE'));


но не нравится то что если в таблице сразу два поля то я делаю два разных индекса

есть идеи как бы по хитрее сделать ?
21 июл 08, 17:52    [5965425]     Ответить | Цитировать Сообщить модератору
 Re: запросец  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
А Вы скобки не забыли?

Ну так сгруппируйте по таблице, если нужен один.
21 июл 08, 18:00    [5965479]     Ответить | Цитировать Сообщить модератору
 Re: запросец  [new]
TX
Member

Откуда:
Сообщений: 628
Jannny
А Вы скобки не забыли?

Ну так сгруппируйте по таблице, если нужен один.


полей может быть два, а может одно , а может три
21 июл 08, 18:01    [5965486]     Ответить | Цитировать Сообщить модератору
 Re: запросец  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
TX
Jannny
А Вы скобки не забыли?

Ну так сгруппируйте по таблице, если нужен один.
полей может быть два, а может одно , а может три
Эта фраза к чему относится?
21 июл 08, 18:05    [5965498]     Ответить | Цитировать Сообщить модератору
 Re: запросец  [new]
TX
Member

Откуда:
Сообщений: 628
Jannny
TX
Jannny
А Вы скобки не забыли?

Ну так сгруппируйте по таблице, если нужен один.
полей может быть два, а может одно , а может три
Эта фраза к чему относится?


к тому что я не понял чем мне группировка поможет )
21 июл 08, 18:08    [5965518]     Ответить | Цитировать Сообщить модератору
 Re: запросец  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
TX
к тому что я не понял чем мне группировка поможет )
Объясните, что Вы хотите получить в случае "может быть два, а может одно , а может три"
21 июл 08, 18:09    [5965527]     Ответить | Цитировать Сообщить модератору
 Re: запросец  [new]
TX
Member

Откуда:
Сообщений: 628
Jannny
TX
к тому что я не понял чем мне группировка поможет )
Объясните, что Вы хотите получить в случае "может быть два, а может одно , а может три"


хочется одни индекс в не зависимости сколько полей , т.е. может он будет составной а может тока на одно поле
21 июл 08, 18:11    [5965533]     Ответить | Цитировать Сообщить модератору
 Re: запросец  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
анализируйте count() over (partition by table_name order by column_name) и row_number и собирайте начало, середину или конец DDL
21 июл 08, 18:21    [5965575]     Ответить | Цитировать Сообщить модератору
 Re: запросец  [new]
KlugCZ
Member

Откуда: Ostrava-CZ
Сообщений: 338
Ставте группировку по имени таблицы, там где поля для индекса перечисляете пользуйтесь
вот этим а имя индекса генерьте другим способом без использования имени поля
21 июл 08, 18:21    [5965576]     Ответить | Цитировать Сообщить модератору
 Re: запросец  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Или просто недокументированную wm_concat используйте
21 июл 08, 18:23    [5965583]     Ответить | Цитировать Сообщить модератору
 Re: запросец  [new]
Полночный
Member

Откуда:
Сообщений: 312
WITH Tab_Columns AS (SELECT 'A' Table_Name, 'X' Column_Name
                       FROM Dual
                      UNION ALL
                     SELECT 'A', 'Y'
                       FROM Dual
                      UNION ALL
                     SELECT 'A', 'Z'
                       FROM Dual
                      UNION ALL
                     SELECT 'B', '1'
                       FROM Dual
                      UNION ALL
                     SELECT 'B', '2'
                       FROM Dual
                      UNION ALL
                     SELECT 'C', 'C_Column'
                       FROM Dual
                    )
SELECT Table_Name, ltrim (max (sys_Connect_By_Path (Column_Name, ',')), ',')
  FROM (SELECT Table_Name, Column_Name, row_Number () OVER (PARTITION BY Table_Name ORDER BY Column_Name) Rn
          FROM Tab_Columns
       )
  START WITH Rn = 1
CONNECT BY PRIOR Table_Name = Table_Name AND PRIOR Rn = Rn - 1
  GROUP BY Table_Name;
21 июл 08, 18:28    [5965603]     Ответить | Цитировать Сообщить модератору
 Re: запросец  [new]
TX
Member

Откуда:
Сообщений: 628
to Полночный

Thanks, exactly that I need )
22 июл 08, 22:44    [5971473]     Ответить | Цитировать Сообщить модератору
 Re: запросец  [new]
stax..
Guest
Jannny
Или просто недокументированную wm_concat используйте

наконец сделали

неплохо былоб разделитель вторым параметром добавить и
третьим игнорирование обрезанием ORA-06502

спасибо
.....
stax
23 июл 08, 11:22    [5972861]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить