关于oracle:ORA-06502: PL/SQL: numeric or value error: number precision too large

ORA-06502: PL/SQL: numeric or value error: number precision too large

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

1
2
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"

附加了一个触发器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;

如果我替换

1
:NEW.RID := it_api.gen_pk;

1
:NEW.RID := 599;

插入语句有效。

IT_API 正文:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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,而且那个脚本是别人写的。因此,感谢您的帮助!


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

1
:NEW.RID := it_api.gen_pk;

1
2
3
SELECT rate_seq.nextval
INTO :NEW.rid
FROM dual;

这解决了问题。