有序列,我需要找出哪个table.column获取其值。据我所知,Oracle没有跟踪这种关系。因此,在源代码中查找序列是唯一的方法。是吗?
任何人都知道找出这种序列表关系的方法吗?
答案 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信息。