“ora-06512 错误” 储存过程DEBUG状态错误不发生,更新表调用触发器报错表C_COMMONORDER2的触发器TGPATORDERSTATUS2    IF INSERTING OR UPDATING THEN
        CRPATORDERSTATUS(NEW.ORDERSTATUS1);
  END IF;存储过程 CRPATORDERSTATUS
CREATE OR REPLACE PROCEDURE ORDER97.CRPATORDERSTATUS(
CORDERSTATUS        IN C_COMMONORDER2.ORDERSTATUS1%TYPE
)is
CURSOR MR IS
        SELECT ORDERSTATUS1
        FROM C_COMMONORDER2
        WHERE PATIENTNO=CPATIENTNO ;
    IF CORDERSTATUS = 'Z' THEN
               FOR LCMR IN MR LOOP
               IF LCMR.ORDERSTATUS1<>'Z' then
                      lsKIND:=LCMR.ORDERSTATUS1;
                       COMMIT;
                       EXIT;
                END IF;
         END LOOP;
     END IF;
以上只是储存过程认为跟错误相关的部分
更新表的时候,只要ORDERSTATUS1<>'z',触发器不报错,
但是更新表的COMMONORDER2.ORDERSTATUS1='Z'字段 和存储过程里面IF CORDERSTATUS = 'Z' THEN 一致就报错了请教什么原因?

解决方案 »

  1.   

    IF LCMR.ORDERSTATUS1 <>'Z' then 
                          lsKIND:=LCMR.ORDERSTATUS1这是什么意思
    lsKIND是变量吗,怎么没有定义
    如果是字段名,不能这么写
      

  2.   

    ORA-06512   at   stringline   string   
        
      Cause:   Backtrace   message   as   the   stack   is   unwound   by   unhandled   exceptions.   
        
      Action:   Fix   the   problem   causing   the   exception   or   write   an   exception   handler   for   this   condition.   Or   you   may   need   to   contact   your   application   administrator   or   database   administrator.  检查下lsKIND字段的数据类型
    还有长度
    那个commit没用吧
      

  3.   

    lsKIND   VARCHAR2(1)  :='Z';这个没有问题的。
    报错指的位置是定义 CURSOR MR IS 和 FOR LCMR IN MR LOOP 那里。奇怪的是,只要更新表的COMMONORDER2.ORDERSTATUS1不是'Z' ,触发器是不出错的