Вложенная таблица первичного и внешнего ключа в Oracle - PullRequest
0 голосов
/ 26 января 2012

Я пытаюсь добавить первичный и внешний ключ во вложенную таблицу, пытаясь понять, как это сделать.

Это то, что у меня есть;

create or replace type profile as object 
(
id VARCHAR2(10), --- Suppose to be Primary Key
userID VARCHAR2(10) --- Suppose to be Foreign Key for user table
);

create or replace type profile_nest as table of profile;

CREATE OR REPLACE TYPE user_t UNDER group_T
(profile profile_nest_ty,);


CREATE TABLE user OF user_t
(id NOT NULL,
PRIMARY KEY (id), 
nested table profile store as profile_storage_tbl;

Теперь проблема в этой части, пытающейся сделать внешний ключ -

alter table profile_storage_tbl add CONSTRAINT fk_userID FOREIGN KEY (userID)
REFERENCES user(id);

выдает эту ошибку -

* Ошибка запуска в строке 3 в команде:
изменить таблицу profile_storage_tbl добавить CONSTRAINT fk_userID FOREIGN KEY (userID) Ссылки пользователя (id)
Отчет об ошибке:
Ошибка SQL: ORA-30730: ссылочное ограничение не разрешено для столбца вложенной таблицы 30730. 00000 - «Ссылочное ограничение не разрешено для столбца вложенной таблицы»
* Причина: была сделана попытка определить ссылочное ограничение для вложенного столбец таблицы.
Действие: не указывать ссылочные ограничения для столбцов вложенной таблицы.

Ответы [ 3 ]

1 голос
/ 26 января 2012

Как и в тексте исключения, создание ограничения внешнего ключа для столбцов вложенной таблицы недопустимо (Oracle 11).

Здесь описан способ обхода: http://ksun -oracle.blogspot.com / 2011/05 / foreign-key-on-nested-table.html . Но нет никакой гарантии, что это сработает в следующем выпуске Oracle.

1 голос
/ 26 января 2012

Либо вы создаете 2 отдельные таблицы profile_storage_tbl и user с внешним ключом между ними или , вы создаете profile_storage_tbl как вложенную таблицу в таблице user,Нет смысла пытаться делать оба.(На самом деле вложенные таблицы для меня мало что значат, точка - но это другой вопрос!)

0 голосов
/ 29 августа 2017

За сценой оракул создаст две таблицы profile_storage_tbl и user, тогда как profile_storage_tbl имеет внешний ключ для пользователя.Вы можете сделать это самостоятельно, с помощью советника, чтобы лучше контролировать выпуски (также к другим таблицам).

...