Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle-如何强制转换对子类型的引用?_Sql_Oracle_Oracle11g_Ref_Subtype - Fatal编程技术网

Sql Oracle-如何强制转换对子类型的引用?

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

我使用的是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 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.