我必须获取所有序列及其表名以及应用序列的列名 。我是如何设法获取对应序列的表名,因为 在我的数据库序列中以名字作为表名存储 来自数据字典(all_sequences和all_tables)。
如果可能,请告诉我如何获取相应的列名!
答案 0 :(得分:6)
在Oracle中,序列是一个独立的对象,它与特定的表或列无关。例如,您可以运行此查询以获取序列列表:
SELECT * FROM all_sequences
当你创建一个序列时,你会注意到CREATE SEQUENCE语法中没有任何内容表明你想要将它与一个表或列相关联。
一个序列只是一个唯一的数字生成器,它不关心你用它生成的数字做什么(即你是否将序列值插入表中等),它只是提供那个唯一的数字
因此,不可能告诉给定的列使用了什么序列(如果有的话)来生成该列的值。
答案 1 :(得分:2)
您可以通过查看all_sequences中的LAST_NUMBER和以下SQL(查看定义为主键一部分的数字列的最大数字)来“猜测”相关性。
select table_name, column_name, utl_raw.cast_to_number(high_value)
from dba_tab_columns
where owner = '...'
and data_type = 'NUMBER'
and (owner, table_name, column_name) in
(select cc.owner, cc.table_name, cc.column_name
from dba_cons_columns cc
join dba_constraints c
on cc.owner = c.owner and cc.constraint_name = c.constraint_name
where c.constraint_type = 'P')
order by 3;
但是采用指示相关性的命名标准是个好主意(例如,与最后一个_SEQ的table_name相同)。
答案 2 :(得分:0)
请参阅dcp的回答。
但是,序列通常用于为其对应的表生成唯一键 - 尝试在匹配表上查找主键和/或唯一索引。