2017-04-04 6 views
1

私は、Oracle DBを使用していると私はサブタイプを持つこの型があります:私は今、私はテーブルとを持っているタイプIもt_fooOracle - サブタイプへの参照をキャストする方法

CREATE TABLE foo OF t_foo; 

INSERT INTO foo VALUES 
(t_foo1(1)); 

のサブタイプを格納することができt_fooのテーブルを持っている

CREATE TYPE t_foo AS OBJECT 
(id INTEGER) 
NOT FINAL; 

CREATE TYPE t_foo1 UNDER t_foo() NOT FINAL; 

t_foo1

CREATE TABLE bar(
myfoo1 REF t_foo1 SCOPE IS foo 
); 

の型参照の欄には、どのように私は、の参照を挿入することができますテーブルfooの?

私はこの試みた:私もTREAT機能を使用しようとしましたが、それは(ORA動作しない

(REF t_foo1を期待するが、t_fooを発見した)

INSERT INTO bar VALUES 
(select ref(f) from foo f where f.id = 1) 

をしかし、それは私のタイプのエラーが発生します-00904:無効な識別子)。

INSERT INTO bar VALUES 
(select ref(t_foo1) from foo f where t_foo1.id = 1 and TREAT(t_foo1 AS t_foo)); 

どうすればこのインサートを動作させることができますか?

答えて

2

いずれの挿入文も正しくありません。あなたは値を混合し、句を選択しますが、最初のビットがご覧エラーを与える変更している:

insert into bar 
select ref(f) 
from foo f 
where f.id = 1; 

ORA-00932: inconsistent datatypes: expected REF MY_SCHEMA.T_FOO1 got REF MY_SCHEMA.T_FOO 

私はあなたが本当にtreatを使用しようとしていたかはかなりわかりません。

insert into bar 
select ref(t_foo1) 
from foo f 
where t_foo1.id = 1 
and treat(t_foo1 as t_foo); 

が、それはORA-00920、ORA-00904ませんが、取得するので、それはあなたがまだやったかなりものではないのです。私が推測できる最も近いです。

とにかく、これは動作します:

insert into bar 
select treat(ref(f) as ref t_foo1) 
from foo f 
where f.id = 1; 

1 row inserted. 
+0

はどうもありがとうございました!出来た! – EstevaoLuis

関連する問題