Sql 哪个Oracle表使用序列?

Sql 哪个Oracle表使用序列?,sql,database,oracle,sequence,Sql,Database,Oracle,Sequence,有一个序列,我需要找出哪个table.column获得它的值。据我所知,甲骨文并没有跟踪这种关系。因此,在源代码中查找序列将是唯一的方法。是这样吗 有人知道找到这个序列表关系的方法吗?如果您的序列在触发器中使用,触发器将列在序列的“引用者”列表中 如果您的序列仅用于源代码查询,那么“是”,浏览代码是唯一的方法。使用GREP扫描整个源代码以查找“myseq.NextVal”-myseq是您要查找的源代码….在数据库中,您可以按如下方式搜索模式中存储的所有代码: select type, name,

有一个序列,我需要找出哪个table.column获得它的值。据我所知,甲骨文并没有跟踪这种关系。因此,在源代码中查找序列将是唯一的方法。是这样吗


有人知道找到这个序列表关系的方法吗?

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


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

使用GREP扫描整个源代码以查找“myseq.NextVal”-myseq是您要查找的源代码….

在数据库中,您可以按如下方式搜索模式中存储的所有代码:

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,那么您可以为
键入('PACKAGE BODY'、'PROCEDURE'、'FUNCTION')编写类似的代码。
,尽管当您有多个点击时,您仍然需要对源代码进行一些搜索以分配表和序列。

我想添加有关序列的信息。

这一直是我的方法
grep-Prine“myseq\”
在整个代码库上。问题是,人们并没有将所有代码都置于版本控制之下。我认为有很多代码(过程)只存储在数据库中。如果您只能在DB中引用存储的代码,请尝试
ALL\u SOURCE
。如果您使用的是10g,请使用
REGEXP\u LIKE
函数进行搜索。@Guru它是9i。但不管怎样,了解
REGEX\u之类的
是件好事。谢谢。如果存储过程
sp_something
引用序列
seq_something
,那么
sp_something
肯定会出现在
seq_something
的“referenced by”列表中?这将不考虑“SELECT MYSEQ.NEXTVAL FROM dual”之类的情况;这是真的,文本搜索总是存在问题。您可以使用“%MYSEQ%。%NEXTVAL%”,但这样可能会对“MYSEQ2.NEXTVAL”之类的内容产生误报。没有简单的答案!甲骨文不跟踪它,因为除了按惯例之外,没有这种关系。这就是为什么您通常使用某种命名约定的原因,例如,表XYZ具有sequence SEQ_XYZ。如果您具有sequence_名称,并且希望通过触发器检查使用它的表,则可以使用上述查询,并使用一个“和”条件指定序列名称:选择ut.table_名称,ud.referenced_name as sequence_name from user_dependencies ud join user_triggers ut on(ut.trigger_name=ud.name),其中ud.type='trigger'和ud.referenced_type='sequence'以及ud.referenced_name='YOUR_SEQ_name';