Какая таблица Oracle использует последовательность?

имеющий последовательность, мне нужно выяснить, какая таблица.столбец получает свои значения. Насколько я знаю, Oracle не отслеживает эти отношения. Таким образом, поиск последовательности в исходном коде был бы единственным способом. Это правда?

кто-нибудь знает какой-то способ узнать эту связь последовательности и таблицы?

5 ответов


в базе данных вы можете искать весь сохраненный код в вашей схеме следующим образом:

select type, name, line, text
from all_source
where owner = 'MYSCHEMA'
and upper(text) like '%MYSEQ.NEXTVAL%';

в SQL Developer есть отчет для этого.


проблема в том, что Oracle позволяет нам использовать одну последовательность для заполнения столбцов в нескольких таблицах. Сценарии, в которых это может быть желательно, включают реализации супер-типа/подтипа.

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

select ut.table_name
       , ud.referenced_name as sequence_name
from   user_dependencies ud
       join user_triggers ut on (ut.trigger_name = ud.name)
where ud.type='TRIGGER' 
and ud.referenced_type='SEQUENCE'
/

Если вы используете PL / SQL, то вы можете написать что-то подобное для TYPE in ('PACKAGE BODY', 'PROCEDURE', 'FUNCTION'), хотя вы все равно требуется некоторое траление исходного кода для назначения таблиц и последовательностей при наличии нескольких попаданий.


Если ваша последовательность используется в триггере, триггер будет указан в списке последовательности "referenced by".

Если ваша последовательность используется только в запросах исходного кода, чем да, Просмотр кода является единственным способом.


используйте GREP для сканирования всего источника для " myseq.NextVal " - myseq, который вы ищете....


Я хотел бы добавить фон информация о последовательности.