Warm tip: This article is reproduced from serverfault.com, please click

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

(oracle - ORA-06502: PL/SQL: numeric or value error: character to number conversion error)

发布于 2020-12-08 08:01:24

我有一个触发器语句,在这里我想比较两个日期值并减去它们。当我尝试执行此操作时,出现错误ORA-06502:PL / SQL:数字或值错误:字符到数字的转换错误

这是触发代码以及我尝试执行的插入操作。

CREATE OR REPLACE TRIGGER BALANCE_FEE
AFTER INSERT OR UPDATE OR DELETE ON CHARTERS
FOR EACH ROW 
DECLARE
FEE NUMBER;
ACL_DATE DATE;
EXP_DATE DATE;
GRP_ID NUMBER;

BEGIN

ACL_DATE := :NEW.ACL_RETURN_DATE;
EXP_DATE := :NEW.EXP_RETURN_DATE;
GRP_ID := :NEW.GRP_ID;


IF ACL_DATE > EXP_DATE
THEN
FEE := (ACL_DATE - EXP_DATE) * 75;

IF ACL_DATE < EXP_DATE
THEN
FEE := (ACL_DATE - EXP_DATE)* -20;

ELSE
FEE := 0;
END IF;
END IF;
UPDATE CUSTOMER
     SET CUSTOMER.BALANCE = CUSTOMER.BALANCE + FEE
     WHERE CUSTOMER.GRP_ID = GRP_ID;
END;
/
SHOW ERROR;

这是我要执行的插入语句。

INSERT INTO CHARTERS (CHARTER_ID,BOAT_ID,EXP_RETURN_DATE,ACL_RETURN_DATE,GRP_ID) VALUES ('T001','B001',TO_DATE ('2019/01/20', 'yyyy/mm/dd'),TO_DATE ('2019/01/20', 'yyyy/mm/dd'),'G002');
INSERT INTO CHARTERS (CHARTER_ID,BOAT_ID,EXP_RETURN_DATE,ACL_RETURN_DATE,GRP_ID) VALUES ('T002','B002',TO_DATE ('2019/03/10', 'yyyy/mm/dd'),TO_DATE ('2019-03/08', 'yyyy/mm/dd'),'G001');
INSERT INTO CHARTERS (CHARTER_ID,BOAT_ID,EXP_RETURN_DATE,ACL_RETURN_DATE,GRP_ID) VALUES ('T003','B003',TO_DATE ('2019/05/05', 'yyyy/mm/dd'),TO_DATE ('2019/05/07', 'yyyy/mm/dd'),'G003');

如果你认为有帮助的话,可以在这里找到租船合同表。

CREATE TABLE CHARTERS (
    CHARTER_ID VARCHAR(20),
    BOAT_ID VARCHAR(20) REFERENCES BOAT(BOAT_ID),
    GRP_ID VARCHAR(20) REFERENCES CUSTOMER(GRP_ID),
    EXP_RETURN_DATE DATE,
    ACL_RETURN_DATE DATE);

这是我尝试运行所有三个插入语句时得到的错误代码

INSERT INTO CHARTERS (CHARTER_ID,BOAT_ID,EXP_RETURN_DATE,ACL_RETURN_DATE,GRP_ID) VALUES ('T003','B003',TO_DATE ('2019/05/05', 'yyyy/mm/dd'),TO_DATE ('2019/05/07', 'yyyy/mm/dd'),'G003')
Error report -
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at "ADMIN_BF.BALANCE_FEE", line 11
ORA-04088: error during execution of trigger 'ADMIN_BF.BALANCE_FEE'
Questioner
Boooo402
Viewed
0
Popeye 2020-12-08 16:09:18

在表中,数据类型为GRP_IDis VARCHAR(20),在触发器中,你将其分配给Number变量。

你需要更新触发器以更改变量的数据类型 GRP_ID

代替

GRP_ID     NUMBER;

GRP_ID     VARCHAR2(20);