我在具有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中的OFFSET列为NUMBER
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;
能否请您为此提出建议,以便我可以相应地修改上述触发器。
提前感谢您的帮助。
问候 帕尼
答案 0 :(得分:2)
正如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)
这样,您就不必组成一个实际值永远不可能达到的幻数;假设这个数字甚至存在!