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



我在具有MIH_TRIGGER的表上的 Web 方法适配器中出现以下错误。

(65000/6502) ORA-06502:PL/SQL:数字或值错误:字符到 数字转换错误 ORA-06512:在 "B2B_OPS_BUILD_ADMIN。MIH_TRIGGER",第 2 行 ORA-04088:期间出错 执行触发器"B2B_OPS_BUILD_ADMIN。MIH_TRIGGER'

下面是MIH_TRIGGER前引用,每当更新 OFFSET 列时,它都会将数据从OPS_BUILD_MIH表更新到OPS_BUILD_AUDITLOG表。

OPS_BUILD_MIH中的偏移量列是数字

OPS_BUILD_AUDITLOG中的OLD_VALUE列和NEW_VALUE列为 VARCHAR2(100)。

我正在尝试将 OFFSET 列中的数值插入 OLD_VALUE 并NEW_VALUE varchar2 列并收到此错误。

create or replace TRIGGER "B2B_OPS_BUILD_ADMIN"."MIH_TRIGGER" 
AFTER UPDATE OF OFFSET
ON OPS_BUILD_MIH
FOR EACH ROW
BEGIN
if ( nvl(:OLD.OFFSET,'xYz#@!0') != nvl(:NEW.OFFSET,'xYz#@!0')) then
INSERT INTO OPS_BUILD_AUDITLOG
(TABLE_NAME,
COLUMN_NAME,
OLD_VALUE,
NEW_VALUE,
UPDATED_BY,
UPDATED_DTM,
UUID)
VALUES  
('OPS_BUILD_MIH',
'OFFSET',
:OLD.OFFSET,
:NEW.OFFSET,
:NEW.LAST_UPDATED_BY,
:NEW.LAST_UPDATED_DTM,
:OLD.MIH_ID);
end if;
END; 

您能否对此提出修复建议,以便我可以相应地修改上述触发器。

提前感谢您的帮助。

问候 法尼

正如 Gaj 已经指出的那样,问题出在您的 NVL 上 - 您正在尝试将非数字字符串与数字进行比较,这是行不通的。

虽然您可以更改 NVL 以检查您永远不会遇到的数值,但最好将条件更改为:

:OLD.OFFSET != :NEW.OFFSET
or (:OLD.OFFSET is not null and :NEW.OFFSET is null)
or (:OLD.OFFSET is null and :NEW.OFFSET is not null)

这样,你就不必编造一个你的实际值永远不可能的神奇数字;假设这样的数字甚至存在!

最新更新