Sql Oracle-如何强制转换对子类型的引用?
我使用的是Oracle DB,我有以下类型的子类型:Sql Oracle-如何强制转换对子类型的引用?,sql,oracle,oracle11g,ref,subtype,Sql,Oracle,Oracle11g,Ref,Subtype,我使用的是Oracle DB,我有以下类型的子类型: CREATE TYPE t_foo AS OBJECT (id INTEGER) NOT FINAL; CREATE TYPE t_foo1 UNDER t_foo() NOT FINAL; 我有一个类型为t\u-foo的表,在那里我还可以存储t\u-foo CREATE TABLE foo OF t_foo; INSERT INTO foo VALUES (t_foo1(1)); 现在我有了一个表,其中一列类型引用为t\u foo1
CREATE TYPE t_foo AS OBJECT
(id INTEGER)
NOT FINAL;
CREATE TYPE t_foo1 UNDER t_foo() NOT FINAL;
我有一个类型为t\u-foo
的表,在那里我还可以存储t\u-foo
CREATE TABLE foo OF t_foo;
INSERT INTO foo VALUES
(t_foo1(1));
现在我有了一个表,其中一列类型引用为t\u foo1
CREATE TABLE bar(
myfoo1 REF t_foo1 SCOPE IS foo
);
如何从表foo
插入对t\u foo1
的引用
我试过这个:
INSERT INTO bar VALUES
(select ref(f) from foo f where f.id = 1)
但是它给了我一个类型错误(除了ref t_foo1,但是找到了t_foo)
我还尝试使用TREAT函数,但它不起作用(ORA-00904:无效标识符)
我怎样才能让这个insert工作?您的insert语句都不正确;您正在混合值和select子句,但将前一位修改一点会出现错误:
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.
insert into bar
select treat(ref(f) as ref t_foo1)
from foo f
where f.id = 1;
1 row inserted.