Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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_Sql_Oracle_Oracle11g - Fatal编程技术网

插入到具有子类型列的表中:类型继承,面向对象SQL

插入到具有子类型列的表中:类型继承,面向对象SQL,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,当我尝试将数据插入下表时 create table Policies of policy_t( pid primary key, inscar references Cars )nested table claims store as claims_ntable; 使用以下查询 insert into policies select policy_t ('PLC1234','12 Mar 2017','12 Mar 2018',REF(C),175000,claim_t('C

当我尝试将数据插入下表时

create table Policies of policy_t(
pid primary key,
inscar references Cars
)nested table claims store as  claims_ntable;
使用以下查询

insert into policies
        select policy_t ('PLC1234','12 Mar 2017','12 Mar 2018',REF(C),175000,claim_t('CLAIM1234567','12 Feb 2017','56000',REF(T)))
        from cars C,customer T
        where C.regno = 'CAB3233' and T.cid = '123ABC'
我得到以下错误

Error starting at line : 1 in command -
insert into policies
select policy_t ('PLC1234','12 Mar 2017','12 Mar    2018',REF(C),175000,claim_t('CLAIM1234567','12 Feb 2017','56000',REF(T)))
from cars C,customer T
where C.regno = 'CAB3233' and T.cid = '123ABC'
Error at Command Line : 3 Column : 25
Error report -
SQL Error: ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"
*Cause:    
*Action:
如何将数据插入此表

其他相关对象类型和表

客户对象类型

create type Customer_t as object(
cid char(6),
cusname varchar(15),
birthdate date,
phone char(10),
address varchar(50)
);
create type claim_t as object(
claimno char(12),
cdate date,
amount number(8,2),
claimant ref customer_t
);
create type Car_t as object(
regno char(9),
make varchar(12),
model varchar(10),
mdate date,
owner ref customer_t,
value number(8,2)
);
create type policy_t as object(
pid char(7),      
sdate date,
edate date,
inscar ref car_t,
premium number(6,2),
claims claim_ntab
)
客户表

create table Customers of customer_t(
cid primary key
);
索赔对象类型

create type Customer_t as object(
cid char(6),
cusname varchar(15),
birthdate date,
phone char(10),
address varchar(50)
);
create type claim_t as object(
claimno char(12),
cdate date,
amount number(8,2),
claimant ref customer_t
);
create type Car_t as object(
regno char(9),
make varchar(12),
model varchar(10),
mdate date,
owner ref customer_t,
value number(8,2)
);
create type policy_t as object(
pid char(7),      
sdate date,
edate date,
inscar ref car_t,
premium number(6,2),
claims claim_ntab
)
索赔嵌套表

create type Claim_ntab is table of claim_t;
汽车对象类型

create type Customer_t as object(
cid char(6),
cusname varchar(15),
birthdate date,
phone char(10),
address varchar(50)
);
create type claim_t as object(
claimno char(12),
cdate date,
amount number(8,2),
claimant ref customer_t
);
create type Car_t as object(
regno char(9),
make varchar(12),
model varchar(10),
mdate date,
owner ref customer_t,
value number(8,2)
);
create type policy_t as object(
pid char(7),      
sdate date,
edate date,
inscar ref car_t,
premium number(6,2),
claims claim_ntab
)
车桌

create table Cars of car_t(
regno primary key,
owner references Customers
);
策略对象类型

create type Customer_t as object(
cid char(6),
cusname varchar(15),
birthdate date,
phone char(10),
address varchar(50)
);
create type claim_t as object(
claimno char(12),
cdate date,
amount number(8,2),
claimant ref customer_t
);
create type Car_t as object(
regno char(9),
make varchar(12),
model varchar(10),
mdate date,
owner ref customer_t,
value number(8,2)
);
create type policy_t as object(
pid char(7),      
sdate date,
edate date,
inscar ref car_t,
premium number(6,2),
claims claim_ntab
)
策略表

create table Policies of policy_t(
pid primary key,
inscar references Cars
)nested table claims store as  claims_ntable;

您将表格命名为客户,请注意复数形式

所以改变

from cars C,customer T


或者更好的方法是,在编写时,使用显式的
JOIN
语法重写它。

插入到\u table1中(\u field1\u,\u field2\u,\u field3\u)
字段名称,而不是值
从表2中选择字段1、字段2、字段3,其中


插入到表1中(字段1、字段2、字段3)

值(“一些文本”、“一些文本”、“一些文本”)
如果您想在更正表名(
customer
/
customers
)后添加一些值,下一个问题是
customers。claims
是一个
claim\u ntab
,但您正试图在其中插入一个
claim\u t
。试试这个:

insert into policies
select policy_t
       ( 'PLC1234'
       , date '2017-03-12'
       , date '2018-03-12'
       , ref(ca)
       , 175000
       , claim_ntab(claim_t
         ( 'CLAIM1234567'
         , date '2017-02-12'
         , '56000'
         , ref(cu) ) )
         )
from   cars ca
       join customers cu
            on ref(cu) = ca.owner
where  ca.regno = 'CAB3233'
and    cu.cid = '123ABC'

编辑:我使用对象引用将您的
where
子句join更改为ANSI样式。老实说,我以前没有使用过这种语法,我怀疑很少有人使用过,所以它需要一些测试。

嘿,Sticky bit,感谢您宝贵的回复。如何使用REF-type而不是连接表来执行相同的操作?如何定义
Cars
?对于字符串,最好使用标准的
varchar2
类型,因为
char
只会浪费空间并产生错误。此外,日期文字应写成
日期“12017-03-12”
,而不是
日期“2017年3月12日”
。您可能会侥幸逃脱,但这是自找麻烦。CAR对象类型创建类型CAR_t as OBJECT(regno char(9),make varchar(12),model varchar(10),mdate date,owner ref customer_t,value number(8,2));CAR TABLE创建CAR\u t的Cars表(regno主键,所有者引用客户);请在您的问题中包含所有必要的代码。如回答中所述,
insert
语句指的是
customer
,我认为应该是
customers
。然后,当您尝试将
claim\u t
插入
claim\u ntab
列时,就会出现真正的错误。对于给您带来的不便,我已将所有必要的代码添加到一个问题中。我通过将customer\u t更改为customers\u t再次尝试查询。但是我还是遇到了同样的错误hey William,非常感谢。我已经编辑了我的答案以使用object ref join,它运行时没有错误,但如果没有测试数据和预期结果,我不知道它是否正确。hey William,我使用了你的代码。它是使用“插入0行”消息编译的。