哪个Oracle表使用序列?

时间:2010-03-02 13:03:42

标签: sql database oracle sequence

有序列,我需要找出哪个table.column获取其值。据我所知,Oracle没有跟踪这种关系。因此,在源代码中查找序列是唯一的方法。是吗?

任何人都知道找出这种序列表关系的方法吗?

5 个答案:

答案 0 :(得分:8)

问题在于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')编写类似的内容,但是当您有多次点击时,仍然需要通过源代码进行拖网来分配表和序列​​。

答案 1 :(得分:2)

如果您的序列用于触发器,则触发器将列在序列的“引用者”列表中。

如果您的序列仅用于源代码查询,那么浏览代码是唯一的方法。

答案 2 :(得分:2)

在数据库中,您可以搜索架构中的所有存储代码,如下所示:

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

在SQL Developer中,有一个报告可以执行此操作。

答案 3 :(得分:1)

使用GREP扫描整个来源的“myseq.NextVal” - myseq是您正在寻找的那个....

答案 4 :(得分:0)

我想在序列中添加background信息。