插入数据时出错提示:FRM-40735:POST-INSERT触发器出现无法处理的异常状况ORA-01401
------------------------------------------------------------
ORA-01401:插入的值对于列过大
出现该错误则表示插入数据的表定义的某列数据长度小于插入的数据长度,
但该FORM涉及大量数据表,我无法确定到底是哪个表里面的哪个列空间不足,且极多数涉及的表和列并不在FORM里显示
请问有什么方法知道是哪个表的哪个列长度不够?
可以在某个触发器加语句捕捉异常吗?

解决方案 »

  1.   

    不行吧,在程序里加try catch试试
      

  2.   

    没写过触发器,你看是不是能在异常处理里把SQL打出来,或者是把表名打出来,这样你就知道是哪个表的问题了
      

  3.   

    我找到插入数据的语句了
    问题是它出错的那个运算是循环插入100多次的,
    我需要知道在这么多次循环中哪组数据才出错,就能确定问题所在了!
    请问要怎么做到:begin
    --计算100多组数据,循环--  
    loop  
             insert into sdcd.zdeco_father_item  (      
                    列1,
                    列2,
                   ...
                   列N)
                   values (数值1,
                    数值2,
                   ...
                   数值N);
         end loop;  
    --循环--       
    exception when other then
    /*对话框输出此时的数值1,数值2,...数值N*/这个请问能做到吗?
    end;
      

  4.   

    这个问题以前做存储过程时也碰到过,我们在处理插入数据时,会写到一个日志表里面,并在日志表里面把SQL错误显示出来,通过查询日志表定位哪个字段出错!还有可以通过单步调试的方法来定位在那一次插入报错了,个人意见,纯当参考!
      

  5.   

    在loop的时候,加一个循环变量进行递增,当出错的时候,使用
    raise_application_error(error_number,“变量当前值+插入行的主键值”,true);抛出错误,然后这样可以快速定位出错的数据