我在具有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)
这样,你就不必编造一个你的实际值永远不可能的神奇数字;假设这样的数字甚至存在!