oracle - ORA-06502:PL/SQL:数字或值错误:字符到数字的转换错误 - TO_DATE 错误?
问题描述
我有一个触发语句,我想比较两个日期值并减去它们。当我尝试这样做时,我收到错误ORA-06502: PL/SQL: numeric or value error: character to number conversion error
这是触发代码以及我尝试执行的插入操作。
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'
解决方案
在您的表中,数据类型GRP_ID
是VARCHAR(20)
,在您的触发器中,您将其分配给Number
变量。
您需要更新触发器以更改变量的数据类型GRP_ID
代替
GRP_ID NUMBER;
和
GRP_ID VARCHAR2(20);
推荐阅读
- html - 将表头固定为带有三个点的两行
- javascript - 将尺寸线从多边形上移开
- mysql - 使用带有 SQL 的特定标签查找最活跃的用户
- c++ - static_cast 转换为错误的数据类型,但结果仍然正确?
- firebase - 通过电子邮件地址的一部分查找 firebase 用户?
- javascript - 在我使用 .html() 更新后,浏览器对新行数的响应速度较慢。你能帮我看看我的错误吗?
- python - 获取在脚本本身内部执行 python 脚本的命令
- angular - Ionic 从另一个组件打开 Popover
- javascript - 在 Node.js 应用程序中存储 Active Directory 凭据的位置
- bash - 如果名称:xxx 用 bash 替换 yaml 中的值