在oracle中插入行时出现无效数字错误

时间:2017-10-30 09:11:54

标签: oracle

我需要在oracle中向表中插入一行。

insert into policy_tab values ('4325','29-APR-98','29-APR-2007',32424,(select ref(a) from agent_tab a where a.nic='242424v'),claim_ntty(
claim_t('25-APR-2005','25-JUN-2005'),
claim_t('26-APR-2005','26-JUN-2005')
));

但是当我执行它时会显示此错误。 “ORA-01722:无效编号ORA-06512:在”SYS.DBMS_SQL“,第1721行”

create type policy_ty as object(
 pid char(5),
 sDate date,
 eDate date,
 premium number(10,2),
 agent ref agent_ty,
 claims claim_ntty
);

create table policy_tab of policy_ty(
 pid primary key,
 agent SCOPE IS agent_tab
)
nested table claims store as claim_nttab;

create type claim_t AS OBJECT(
 eDate date,
 amount number(10,2)
);
create type claim_ntty as table of claim_t;

create type agent_ty as object(
 nic char(10),
 name varchar(50),
 address varchar(50),
 contactNo contactNo_vaty
) NOT FINAL;

create table agent_tab of agent_ty(
 nic primary key
);

那么如何解决呢?

1 个答案:

答案 0 :(得分:1)

从第一眼开始,您需要使用如下所示。但是,所提供的信息不足以解决问题。相关对象定义也是必需的。

必须将此更改为'29-APR-98''29-APR-1998'

INSERT INTO policy_tab
        VALUES (
                  '4325',
                  '29-APR-1998',
                  '29-APR-2007',
                  32424,
                  (SELECT REF (a)
                     FROM agent_tab a
                    WHERE a.nic = '242424v'),
                  claim_ntty (claim_t ('25-APR-2005', '25-JUN-2005'),
                              claim_t ('26-APR-2005', '26-JUN-2005')));

编辑:

第二次观察。您创建了以下对象:

create type claim_t AS OBJECT(
eDate date,
amount number(10,2)
);

使用它像:

claim_ntty (claim_t ('25-APR-2005', '25-JUN-2005'),
                                  claim_t ('26-APR-2005', '26-JUN-2005')));

第二个论点应该是number而不是date

所以你的插入应该是:

INSERT INTO policy_tab
        VALUES (
                  '4325',
                  '29-APR-1998',
                  '29-APR-2007',
                  32424,
                  (SELECT REF (a)
                     FROM agent_tab a
                    WHERE a.nic = '242424v'),
                  claim_ntty (claim_t ('25-APR-2005', 123), claim_t ('26-APR-2005', 456)));