2015-10-05 2 views
0

Как получить список триггеров со списками всех таблиц, которые используются внутри триггеров. Значения
1) триггер, созданный из таблицы
2) таблицы, используемые внутри логики триггера?
Пожалуйста, предоставьте решение в oracle, а также в sql-сервере?Как получить список триггеров со списками всех таблиц, которые используются внутри триггеров

+0

Надежда ссылка ниже поможет. http://stackoverflow.com/questions/12346914/how-to-find-all-trigger-associated-with-a-table-with-sql-server – Japongskie

ответ

2

Вы бы использовать ALL_TRIGGERS и ALL_DEPENDENCIES найти все триггеры их в зависимости таблиц. Это: все таблицы, которые СУБД видит зависимыми. Поэтому, когда используется динамический SQL, СУБД слепо, к каким таблицам будет содержаться динамический запрос, и вы их пропустите.

select 
    t.owner || '.' || t.trigger_name as trigger_name, 
    t.table_owner || '.' || t.table_name as table_name, 
    (
    select 
     listagg(d.referenced_owner || '.' || d.referenced_name, ', ') 
     within group (order by d.referenced_owner, d.referenced_name) 
    from all_dependencies d 
    where d.owner = t.owner 
    and d.name = t.trigger_name 
    and d.type = 'TRIGGER' 
    and d.referenced_type = 'TABLE' 
    and not (d.referenced_owner = t.table_owner and d.referenced_name = t.table_name) 
) as other_tables 
from all_triggers t; 

Это для Oracle (я не знаю, как же это делается в SQL Server. Я думаю, что это будет очень похоже. SQL Server тоже будет иметь системные таблицы, вы могли бы получить эту информацию от).

1

В Oracle попытаться ниже запрос, чтобы получить желаемый результат

SELECT TRIGGER_NAME,TABLE_NAME,TRIGGER_TYPE, TRIGGERING_EVENT, LINE, TEXT 
FROM USER_TRIGGERS UT, USER_SOURCE US 
WHERE UT.TRIGGER_NAME=US.NAME; 
Смежные вопросы