zoukankan      html  css  js  c++  java
  • pl/sql SP中常见三个报错(fetch out of sequence,invalid ROWID,numeric or value error)

    1.15:49:23  ORA-01002: fetch out of sequence
       要fetch的记录数不对(比如共8条,但是fetch到9条)
       PS:
       a. 就是COMMIT;导致错误
          在打开有for update的cursor时,系统会给取出的数据加上排他锁(exclusive),
          这样在这个锁释放前其他用户不能对这些记录作update、delete和加锁。
          而我一旦执行了commit,锁就释放了,游标也变成无效的,再去fetch数据时就出现错误了。
          因而要把commit放在循环外,等到所有数据处理完成后再commit,然后关闭cursor
       b.cursor   cur   is   select   *   from   table   for   update;   
         注释掉for   update就没事了,但for   update在别的地方都用得很好的,好奇怪。

    2.15:49:23  ORA-01002: invalid ROWID
       临时表commit时清空了记录
       因为记录为空(但是还想用游标),肯定找不到行
       临时表改为:ON COMMIT PRESERVE ROWS
       PS: 
             ● ON COMMIT DELETE ROWS 表名行只是在事务期间可见 
             ● ON COMMIT PRESERVE ROWS 表名行在整个会话期间可见

    3.19:36:09  ORA-06502: PL/SQL: numeric or value error
       varchar类型,赋的值超过定义的长度
       比如 declare hh varchar2(4000);
       hh := mm || nn;  -- mm 3564, nn 600
       PS: 
             有以下可能:
             1.如果是 IN 参数,那么可能是过程中把该参数赋予了一个长度比较小的变量,导致该变量无法存储传入的变量值
             2.如果是 OUT 参数,那么可能是调用过程的参数定义的长度不过,也就是小于在过程中对该参数赋值的长度。
             3.那就是一般的数值转换错误了:比如你把含有非数字的字符串转换为number

  • 相关阅读:
    Proximal Gradient Descent for L1 Regularization
    使用Spring Security3的四种方法概述
    理解spring对事务的处理:传播性
    MySQL事务隔离级别详解
    Spring 使用注解方式进行事务管理
    Redis的高级应用-安全性和主从复制
    Redis的高级应用-事务处理、持久化、发布与订阅消息、虚拟内存使用
    mysql 语句优化心得
    Maven搭建Spring Security3.2项目详解
    Java网络编程之TCP、UDP
  • 原文地址:https://www.cnblogs.com/songsh96/p/606542.html
Copyright © 2011-2022 走看看