我想要获取我的数据库用户的表列表的查询以及表中使用的序列和触发器
您可以从user_triggers 视图中获取与您的表关联的触发器。然后,您可以在 user_dependencies 中查找为这些触发器记录的任何依赖项,其中可能包括序列以外的对象(包等),因此将这些依赖项加入 user_sequences 视图只会显示您感兴趣的那些。
类似这样,假设您正在查看自己的架构,并且您只对引用序列的触发器感兴趣(不一定会执行“自动递增”,但很可能会这样做):
select tabs.table_name,
trigs.trigger_name,
seqs.sequence_name
from user_tables tabs
join user_triggers trigs
on trigs.table_name = tabs.table_name
join user_dependencies deps
on deps.name = trigs.trigger_name
join user_sequences seqs
on seqs.sequence_name = deps.referenced_name;
SQL Fiddle demo.
如果您实际上正在查看不同的架构,那么您需要使用all_tables 等,并为您正在寻找的用户过滤并加入所有者列。如果你想包含没有触发器的表,或者不引用序列的触发器,你可以使用外连接。
寻找不同架构的版本,尽管这假设您具有访问数据字典信息所需的权限 - 表等对您可见,但它们可能不可见:
select tabs.table_name,
trigs.trigger_name,
seqs.sequence_name
from all_tables tabs
join all_triggers trigs
on trigs.table_owner = tabs.owner
and trigs.table_name = tabs.table_name
join all_dependencies deps
on deps.owner = trigs.owner
and deps.name = trigs.trigger_name
join all_sequences seqs
on seqs.sequence_owner = deps.referenced_owner
and seqs.sequence_name = deps.referenced_name
where tabs.owner = '<owner>';
如果看不到它们,那么您可能需要查看 DBA 视图,如果您有足够的权限:
select tabs.table_name,
trigs.trigger_name,
seqs.sequence_name
from dba_tables tabs
join dba_triggers trigs
on trigs.table_owner = tabs.owner
and trigs.table_name = tabs.table_name
join dba_dependencies deps
on deps.owner = trigs.owner
and deps.name = trigs.trigger_name
join dba_sequences seqs
on seqs.sequence_owner = deps.referenced_owner
and seqs.sequence_name = deps.referenced_name
where tabs.owner = '<owner>';