0

我正在尝试将主键和外键添加到嵌套表中,很难知道如何操作。

这就是我所拥有的;

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 行开始出错:
alter table profile_storage_tbl add CONSTRAINT fk_userID FOREIGN KEY (userID) REFERENCES user(id)
错误报告:
SQL 错误:ORA-30730:嵌套表列 30730 上不允许引用约束。00000 -“引用约束嵌套表列上不允许”
*原因:试图在嵌套表列上定义引用约束。
行动:不要在嵌套表列上指定参考约束。

4

3 回答 3

1

您可以创建 2 个单独的表profile_storage_tbl并在它们之间user使用外键,或者在表中创建为嵌套表。尝试两者都做是没有意义的。(事实上​​,嵌套表对我来说毫无意义,句号 - 但那是另一回事!)profile_storage_tbluser

于 2012-01-26T14:31:35.860 回答
1

正如异常文本所说,不允许在嵌套表列上创建外键约束(Oracle 11)。

这里描述了一种解决方法:http: //ksun-oracle.blogspot.com/2011/05/foreign-key-on-nested-table.html。但是不能保证这将在下一个 oracle 版本中起作用。

于 2012-01-26T14:39:22.040 回答
0

在幕后 oracle 将创建两个表 profile_storage_tbl 和 user 而 profile_storage_tbl 在用户上有一个外键。您可以自己执行此操作,其优势是可以更好地控制关系(也可以控制其他表)。

于 2017-08-29T05:07:22.100 回答