【问题标题】:SQL Error: ORA-06502: PL/SQL: numeric or value errorSQL 错误:ORA-06502:PL/SQL:数字或值错误
【发布时间】:2013-10-15 09:35:31
【问题描述】:

我在执行触发器时遇到以下错误:

SQL Error: ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "Test.ADD_DUMMY_RULE", line 13


create or replace
TRIGGER "ADD_DUMMY_RULE" 
BEFORE DELETE ON testTable
   FOR EACH ROW
WHEN (
old.product_id != 0
      )
DECLARE
 pcnt  NUMBER(14);

BEGIN
 pcnt := 0;

trig_pkg.rowIndex := trig_pkg.rowIndex + 1;

 -- STORING IMAGE_ID
 trig_pkg.old_image_id := :OLD.image_id;

 IF (trig_pkg.rimage_id IS NOT NULL) THEN
  FOR i IN 1..(trig_pkg.hold_imid_tablsize) LOOP
   IF (trig_pkg.old_image_id = trig_pkg.rimage_id(i)) THEN
    pcnt := pcnt + 1;
   END IF;
  END LOOP;
 END IF;

END;

请提出问题的原因。

编辑

数据类型:

trig_pkg.rowIndex - Number
trig_pkg.rimage_id - IS TABLE OF INTEGER INDEX BY binary_integer;
trig_pkg.hold_imid_tablsize- NUMBER(14)

【问题讨论】:

  • rimage_id 有什么类型?
  • @schurik,rimage_id 类型为数字
  • trig_pkg.hold_imid_tablsize 是什么类型?更重要的是,您是否有多个触发器 - 代码是针对 ADD_DUMMY_RULE_,错误是针对 ADD_DUMMY_RULE(没有尾随下划线) - 是您在问题中介绍的内容,还是您的内容?真的看到了吗?
  • @AlexPoole,是的,这是一个错字..trig_pkg.hold_imid_tablsize 是数字
  • trig_pkg.hold_imid_tablsize 是否总是有一个值,或者在某些时候它可以是null? (不确定 1..null 是否会导致 ORA-06502?)

标签: sql oracle


【解决方案1】:

尝试删除以下 IF 部分字符串

IF (trig_pkg.rimage_id IS NOT NULL) THEN

INDEX BY - 表不需要初始化

【讨论】:

  • rimage_id 类型不是数字...我已经用类型编辑了问题,请查看并提出建议..
  • 我已经查看了我的答案
  • 感谢您指引我正确的方向,trig_pkg.hold_imid_tablsize 没有任何价值(甚至为空)...
猜你喜欢
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 2016-12-18
  • 2021-12-26
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多