"cannot INSERT object view REF or user-defined REF"



我有一个C_table和M_table, C_table和M_table之间有一个m到1的关系,我也有L_table这是一个C_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

很抱歉,由于保密的权利,我不能加载完整的脚本。但我很乐意分享这个问题的解决方案。

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是- a 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中使用了name,这不是一个好方法,所以最后我把它改为M_name而不是name。

相关内容

最新更新