【问题标题】:invalid number error when inserting a row in oracle在oracle中插入行时出现无效数字错误
【发布时间】:2017-10-30 17:28:06
【问题描述】:

我需要在 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
);

那么如何解决呢?

【问题讨论】:

    标签: oracle


    【解决方案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)));
    

    【讨论】:

    • @A.Wen 也发布您的表policy_tab 定义,并从claim_ntty 和您的select stament 获得结果
    • @A.Wen 请完整更新。我看不到完整的信息。前 4 个输入列表似乎是正确的,因此错误肯定在最后 2 个。
    • 哦。知道了。谢谢
    • @A.Wen '29-APR-1998' 不是日期 - 它是字符串文字。如果用户更改了他们的NLS_DATE_FORMAT 会话参数,那么插入将失败(没有修改您的 DML 语句)。使用日期文字 DATE '1998-04-29' 或使用 TO_DATE( '29-APR-1998', 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=English' ) 将字符串文字显式转换为日期
    猜你喜欢
    • 2020-09-01
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2021-01-23
    • 1970-01-01
    相关资源
    最近更新 更多