2017-04-04 42 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

相关问题