首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“无法插入对象视图引用或用户定义的引用”

“无法插入对象视图引用或用户定义的引用”
EN

Stack Overflow用户
提问于 2013-03-06 07:52:19
回答 1查看 715关注 0票数 0

我有一个C_table和M_table,在C_table和M_table之间是m对1的关系,我还有L_table,它是一个C_table类型,我正在尝试使用oracle SQL Developer来使用面向对象的数据库管理系统。我有以下类型和表:

代码语言:javascript
复制
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中,如下所示,我得到了以下错误:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2013-03-15 04:51:39

很抱歉,由于保密权限的原因,我无法加载完整的脚本。但我很乐意分享这个问题的解决方案。

代码语言:javascript
复制
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的外键,如下所示

代码语言:javascript
复制
create table C_table of C_type
(foreign key (name) references M_table) 
object id primary key 

还有:

代码语言:javascript
复制
create table l_table of l_type
(foreign key (name) references M_table) 
object id primary key 

现在,如果我使用这个查询,我将不会有任何问题或错误:

代码语言:javascript
复制
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而不是名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15236415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档