0

私はC_tableとM_tableを持っており、C_tableとM_tableの間には1つの関係があります。また、C_tableタイプであるL_tableがあり、OracleSQLDeveloperを使用して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
4

1 に答える 1

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で名前を使用しましたが、これは良い方法ではありません。 nameではなくM_nameに変更しました。

于 2013-03-14T20:51:39.053 に答える