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; |
这解决了问题。