2013-03-05 12 views
0

C_table 및 M_table이 있고 C_table과 M_table 사이에 1 개의 관계가 있습니다. 또한 C_table 형식 인 L_table을 사용하고 있습니다. Oracle SQL Developer를 사용하는 OODBMS. 지금은 다음과 같이 thhe L_table에 삽입하기 위해 노력하고있어 나는 다음과 같은 오류 받고 있어요뿐만 아니라,"개체보기 REF 또는 사용자 정의 REF를 INSERT 할 수 없습니다"

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) 
); 

와 나는 그들의 테이블을 만들었습니다 :

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 
을 나는 다음과 같은 유형 및 테이블이
+2

오류의 원인이되는 전체 스크립트를 제공 할 수 있습니까? [this] (http://www.sqlfiddle.com/#!4/b9cb4/8)이 나를 위해 일하기 때문에 (11g에서) –

답변

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인가-A 것을 C_type 알고 있고, 우리는 C_type가 M_type에 대한 참조가 알고있다. 이러한 유형의 테이블을 만들었을 때, L_table의 M_table에서 외래 키를 정의해야한다는 것을 알지 못했습니다. C_table에서 외래 키를 정의하면 L_table이 C_table에서 파생 된 이후로 생각하고있었습니다. 하지만 충분하지 않았다 나는이

create table C_table of C_type 
(foreign key (name) references M_table) 
object id primary key 

과도 같은뿐만 아니라 L_table에서 M_table에서 외부 키를 정의했다 :이 쿼리를 사용하는 경우 내가 필요가 없습니다 지금

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으로 변경했습니다.