我有一个C_table和M_table,C_table和M_table之间有一个m到1的关系,我也有一个C_table类型的L_table,我正在尝试使用oracle SQL Developer使用OODBMS。我有以下类型和表格:
create type C_table as object
(
se number(10),
sp number(10),
pr number(15),
me number(3),
ste S_type,
name ref M_type
)not final;
create type m_type as object
(
name varchar2(25),
add varchar(25)
);
type L_type under computer_type
(
w number(5)
);
我也创建了他们的表,现在我正在尝试插入L_table,如下所示,我收到以下错误:
insert into l_tab select 500,2,1600,4, S_type('Ms','Me'), REF(d),1.5 from m_tab d where
d.name= 'Int';
SQL Error: ORA-22979: cannot INSERT object view REF or user-defined REF
22979. 00000 - "cannot INSERT object view REF or user-defined REF"
*Cause: Attempt to insert an object view REF or user-defined REF in a
REF column created to store system generated REF values"
*Action: Make sure the REF to be inserted is not from an object view
or from a user-defined REF column
答案 0 :(得分:0)
很抱歉,由于保密权利,我无法加载完整的脚本。但我很乐意分享这个问题的解决方案。
create type C_table as object
(
se number(10),
sp number(10),
pr number(15),
me number(3),
ste S_type,
name ref M_type
)not final;
create type m_type as object
(
name varchar2(25),
add varchar(25)
);
type L_type under computer_type
(
w number(5)
);
基于ERD,我们已经知道L_type是一个C-type,我们知道C_type有一个对M_type的引用。当我用这些类型创建表时,我不知道我必须在L_table中定义M_table中的外键,而我正在考虑因为L_table派生自C_table,如果我在C_table中定义外键就足够了,但这还不够,我必须在L_table中定义一个来自M_table的外键,就像这样
create table C_table of C_type
(foreign key (name) references M_table)
object id primary key
还有:
create table l_table of l_type
(foreign key (name) references M_table)
object id primary key
现在,如果我使用此查询,我将不会有任何问题或错误:
insert into l_tab select 500,2,1600,4, S_type('Ms','Me'), REF(d),1.5 from m_tab d where
d.name= 'Int';
我也在一些博客中读到,我们必须小心不要使用系统名称,并将预定义名称作为表中的属性,就像在本例中我在M_table中使用名称一样,这不是一个好方法,所以最后我把它改为M_name而不是名字。