【发布时间】:2010-06-18 06:54:51
【问题描述】:
我必须获取所有序列及其表名以及应用序列的列名 .我如何设法获取与序列相对应的表名,因为 在我的数据库序列中以名字作为表名存储 来自数据字典(all_sequences 和 all_tables)。
如果可能的话,请告诉我如何获取相应的列名!!
【问题讨论】:
-
查看我对此主题上一个问题的回答:stackoverflow.com/questions/2363210/…
我必须获取所有序列及其表名以及应用序列的列名 .我如何设法获取与序列相对应的表名,因为 在我的数据库序列中以名字作为表名存储 来自数据字典(all_sequences 和 all_tables)。
如果可能的话,请告诉我如何获取相应的列名!!
【问题讨论】:
在 Oracle 中,序列是一个独立的对象,它不与特定的表或列相关联。例如,您可以运行此查询来获取序列列表:
SELECT * FROM all_sequences
当您创建序列时,您会注意到 CREATE SEQUENCE 语法中没有任何内容表明您要将其与表或列相关联。
序列只是一个唯一的数字生成器,它不关心你如何处理从它生成的数字(即是否将序列值插入到表中等),它只是提供唯一的数字.
因此,不可能告诉给定列使用什么序列(如果有)来生成该列的值。
【讨论】:
您通常可以通过查看 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 相同)。
【讨论】:
查看 dcp 的回答。
但是,通常会使用序列为其对应的表生成唯一键 - 尝试在匹配表上查找主键和/或唯一索引。
【讨论】: