2017-04-04 62 views
1

我使用Oracle數據庫和我有這種類型的亞型有:Oracle - 如何投入子類型的引用?

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

CREATE TYPE t_foo1 UNDER t_foo() NOT FINAL; 

我有t_foo在那裏我還可以存儲的t_foo

CREATE TABLE foo OF t_foo; 

INSERT INTO foo VALUES 
(t_foo1(1)); 

亞型類型的表現在我有一個表的t_foo1

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

型參考專欄中,我如何可以插入參考表foo

我嘗試這樣做:

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

但它給了我一個類型的錯誤(希望裁判t_foo1卻發現t_foo)

我也嘗試使用TREAT功能,但它不工作(ORA -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