user_tables是Oracle数据字典中的视图.这里有两个复杂的问题.
我们无法在没有主键的对象上构建外键.由于user_tables是数据字典的一部分并由Oracle管理,因此我们无法以任何方式,形状或形式对其进行更改,而不会使支持无效.
但这并不重要,因为我们无法对视图强制执行约束.当然,我们可以构建主键,但必须将它们声明为DISABLE NOVALIDATE.这意味着我们无法在表的外键中引用约束.
您有一个稍微奇怪的要求,但如果您想构建一个强制与数据字典建立关系的表,您可以使用物化视图来完成.像这样的东西:
create materialized view my_tables
as
select table_name from user_tables
/
alter materialized view my_tables
add constraint my_tables_uk unique (table_name)
/
create table t42 (id number, table_name varchar2(30))
/
alter table t42
add constraint t42_tname_fk foreign key (table_name)
references my_tables(table_name)
/