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)
/