sam*_*amg 3 sql oracle constraints
我正在创建一个表,我需要在USER_TABLES.TABLE_NAME上添加一个外键约束.
我不太清楚该怎么做?
我尝试了以下代码行:
CONSTRAINT FK_USR_TBLS FOREIGN KEY (TABLE_NAME) REFERENCES USER_TABLES(TABLE_NAME)
但是当我尝试创建表时出现以下错误:
ORA-00904: "TABLE_NAME": invalid identifier
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)
/