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

时间:2018-07-10 12:19:30

标签: sql oracle

我在具有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; 

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

提前感谢您的帮助。

问候 帕尼

1 个答案:

答案 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)

这样,您就不必组成一个实际值永远不可能达到的幻数;假设这个数字甚至存在!