как узнать, к какому столбцу применяется последовательность? - PullRequest
3 голосов
/ 17 июня 2010

Мне нужно выбрать все последовательности с именами таблиц вместе с именем столбца, к которому применяется последовательность . Как мне удалось получить имя таблицы, соответствующее последовательности, потому что в моей базе данных последовательность хранится с именем в качестве имени таблицы из словаря данных (all_sequence и all_tables).

Пожалуйста, дайте мне знать, как получить имя соответствующего столбца, если это возможно !!

Ответы [ 3 ]

6 голосов
/ 17 июня 2010

В Oracle последовательность является независимым объектом, она не связана с определенной таблицей или столбцом.Например, вы можете выполнить этот запрос, чтобы получить список последовательностей:

SELECT * FROM all_sequences

И когда вы создадите последовательность, вы заметите, что в синтаксисе CREATE SEQUENCE нет ничего, что указывало бы на то, что вы хотитесвяжите его с таблицей или столбцом.

Последовательность - это просто генератор уникальных чисел, ее не волнует, что вы делаете с сгенерированным из нее числом (т.е. вставляете ли вы значение последовательности в таблицу и т. д..., это просто для того, чтобы предоставить этот уникальный номер.

Так что для данного столбца невозможно сказать, какая последовательность использовалась (если есть) для генерации значения этого столбца.

2 голосов
/ 18 июня 2010

Часто вы можете «угадать» корреляцию, посмотрев на LAST_NUMBER в all_sequence и на следующий SQL (который смотрит на наибольшее число для числовых столбцов, определенных как часть первичного ключа).

select table_name, column_name, utl_raw.cast_to_number(high_value) 
from dba_tab_columns
where owner = '...'
and data_type = 'NUMBER'
and (owner, table_name, column_name) in 
  (select cc.owner, cc.table_name, cc.column_name
  from dba_cons_columns cc 
     join dba_constraints c 
       on cc.owner = c.owner and cc.constraint_name = c.constraint_name
  where c.constraint_type = 'P')
order by 3;

Но хорошая идея - принять стандарт именования, который указывает корреляцию (например, то же самое, что table_name с _SEQ в конце).

0 голосов
/ 17 июня 2010

См. Ответ dcp.

Однако последовательность обычно используется для генерации уникального ключа для таблицы, которой она соответствует - попробуйте найти первичные ключи и / или уникальные индексы в соответствующей таблице.

...