Как Вы обнаруживаете, если существует индекс для определенного столбца на таблице в Oracle?

Если вы хотите проверить, определен ли метод crop_x для model, тогда стандартным способом является использование respond_to?. Поэтому замените ваше состояние следующим:

if model.respond_to? :crop_x
5
задан EvilTeach 20 November 2008 в 21:14
поделиться

2 ответа

Можно запросить DBA_/ALL_/USER_IND_COLUMNS, т.е.

SQL> SELECT index_name
  2    FROM dba_ind_columns
  3   WHERE table_owner = 'SCOTT'
  4     AND table_name  = 'EMP'
  5     AND column_name = 'EMPNO';

INDEX_NAME
------------------------------
PK_EMP

Конечно, можно хотеть развернуть запрос немного. Это возьмет любой индекс, в котором появляется столбец EMPNO. Можно хотеть ограничить себя индексами, где столбец является ведущим столбцом индекса (COLUMN_POSITION = 1). Или можно хотеть ограничить себя индексами только на том конкретном столбце (так, чтобы не было никакого столбца в COLUMN_POSITION 2), т.е.

SQL> ed
Wrote file afiedt.buf

  1  SELECT index_name
  2    FROM dba_ind_columns a
  3   WHERE table_owner = 'SCOTT'
  4     AND table_name  = 'EMP'
  5     AND column_name = 'EMPNO'
  6     AND column_position = 1
  7     AND NOT EXISTS( SELECT 1
  8                       FROM dba_ind_columns b
  9                      WHERE a.index_owner = b.index_owner
 10                        AND a.index_name  = b.index_name
 11*                       AND b.column_position = 2)
SQL> /

INDEX_NAME
------------------------------
PK_EMP
7
ответ дан 14 December 2019 в 04:50
поделиться

Познакомьтесь с запросами схемы SYS:

Select * from sys.all_ind_columns where table_name=:TabName and table_owner=:TabOwner;
1
ответ дан 14 December 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: