【问题标题】:Which Oracle table uses a sequence?哪个 Oracle 表使用序列?
【发布时间】:2011-01-22 17:19:39
【问题描述】:

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

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

【问题讨论】:

  • Oracle 不跟踪它,因为没有这样的关系,除非按照惯例。这就是为什么您通常使用某种命名约定的原因,例如表 XYZ 有序列 SEQ_XYZ。

标签: sql database oracle sequence


【解决方案1】:

问题在于 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') 编写类似的内容,尽管当您有多次点击时,您仍需要对源代码进行一些搜索以分配表和序列​​。

【讨论】:

  • 如果你有 sequence_name 并且你想通过触发器检查它正在使用的表,你可以使用上面的查询,再加一个“and”条件指定序列的名称:选择 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' and ud.referenced_name = 'YOUR_SEQ_NAME';
【解决方案2】:

在数据库中,您可以像这样搜索架构中存储的所有代码:

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

在 SQL Developer 中,有一个报告可以做到这一点。

【讨论】:

  • 这不会处理像“SELECT MYSEQ . NEXTVAL FROM dual;”这样的情况
  • 是的,这始终是文本搜索的问题。您可以使用“%MYSEQ%.%NEXTVAL%”,但这可能会为“MYSEQ2.NEXTVAL”之类的内容产生误报。没有简单的答案!
【解决方案3】:

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

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

【讨论】:

  • 如果存储过程sp_something引用序列seq_something,那么sp_something肯定会出现在seq_something的“引用者”列表中?
【解决方案4】:

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

【讨论】:

  • 这就是我的方法。 grep -Prine "myseq\." . 在整个代码库上。问题是,人们并没有将所有代码都置于版本控制之下。我认为有很多代码(过程)只存储在数据库中。
  • 如果只能引用 DB 中存储的代码,请尝试ALL_SOURCE。如果你是10g,使用REGEXP_LIKE函数搜索。
  • @Guru 这是 9i。但无论如何,很高兴了解REGEX_LIKE。谢谢。
【解决方案5】:

我想添加关于序列的background 信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多