ORA-06502: PL/SQL: 数字或值错误: 数字精度太大

Posted

技术标签:

【中文标题】ORA-06502: PL/SQL: 数字或值错误: 数字精度太大【英文标题】:ORA-06502: PL/SQL: numeric or value error: number precision too large 【发布时间】:2014-02-18 23:15:52 【问题描述】:

我正在尝试在 Oracle SQL Developer 中运行以下插入命令:

insert into work_comp_rates (company_id, work_comp_rt)
values ('101', 0.11);

这给了我这个错误:“ORA-06502: PL/SQL: numeric or value error: number precision too large”

附加了一个触发器:

create or replace 
TRIGGER APPS.work_codes_trig
before insert or update ON APPS.WORK_COMP_RATES for each row
begin
  if inserting then
    if :NEW.RID is null then
      :NEW.RID := it_api.gen_pk;
    end if;
    :NEW.CREATED_ON := sysdate;
  end if;
  if updating then
    :NEW.MODIFIED_ON := sysdate;
  end if;
end;

如果我替换

:NEW.RID := it_api.gen_pk; 

:NEW.RID := 599;

插入语句有效。

IT_API 正文:

create or replace
package body it_api
as
-- generates and returns unique number used for primary key values
function gen_pk
return number
is
l_pk number := 0;
begin
for c1 in (
select to_number(sys_guid(),'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') pk
from dual )
loop
l_pk := c1.pk;
exit;
end loop;
return l_pk;
end gen_pk;
end it_api;

我不太了解 Oracle,而且那个脚本是别人写的。因此,感谢您的帮助!

【问题讨论】:

work_comp_rates 表中的列的数据类型是什么?您可以使用 SQLDeveloper 中的 DESC work_comp_rates 获得此信息。 此错误是因为您尝试将 '101' 周围的引号插入到 company_id 中。尝试不带引号,例如 insert into work_comp_rates (company_id, work_comp_rt) values (101, 0.11); RID 列的精度是多少?错误可能是因为,to_number(sys_guid(),'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') 产生的数字大于 RID 可以容纳的数字。 【参考方案1】:

我创建了一个序列 rate_seq,将值递增 1 并替换

:NEW.RID := it_api.gen_pk; 

select rate_seq.nextval
into :new.rid
from dual;

这解决了问题。

【讨论】:

以上是关于ORA-06502: PL/SQL: 数字或值错误: 数字精度太大的主要内容,如果未能解决你的问题,请参考以下文章

ORA-06502: PL/SQL: 数字或值错误: 字符到数字的转换错误

ORA-06502: PL/SQL: 数字或值错误: NULL 索引表键值

ORA-06502: PL/SQL: 数字或值错误: 数字精度太大

获取 ORA-06502:PL/SQL:数字或值错误:SQL 触发器中的字符到数字转换错误

oracle ORA-06502:PL/SQL:数字或值错误:批量绑定:截断绑定

ORA - 06502:PL/SQL:数字或值错误:批量绑定:截断绑定