pl/sql SP中常见三个报错(fetch out of sequence,invalid ROWID,numeric or value error)
2006-12-28 23:03
726 查看
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
要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
相关文章推荐
- ORA-06502: PL/SQL: numeric or value error: character string buffer too small
- ORA-06502: PL/SQL: numeric or value error: character string buffer too small
- Magento后台批量删除产品报错Fix for Magento issue: (SQLSTATE[22003]: Numeric value out of range: 1690 BIGINT UN
- list agg cause ORA-06502 PL/SQL: numeric or value error
- ORA-06502: PL/SQL:numeric or value error!
- DBCO获取第三方数据库时,提示:SQL error "99" with message: "Numeric value out of range......"
- ORA-06502: PL/SQL: numeric or value error
- PL/SQL: numeric or value error: character to number conversion error
- ORA-06502: PL/SQL:numeric or value error!
- ORA-06502: PL/SQL: numeric or value error: character string buffer too small
- PHP调用Oracle存储过程时的错误:ORA-06502: PL/SQL: numeric or value error: character string buffer too small
- ORA-06502:PL/SQL numeric or value error:associate array shape is not consistent with session parame
- ORA-00604: error occurred at recursive SQL level 1 ORA-12705: invalid or unknown NLS parameter value
- SQLSTATE[22003]: Numeric value out of range: 1690 BIGINT UNSIGNED value is out of range解决方法
- SQL Error:library routine called out of sequence.
- oracle report err:REP-2103 PL/SQL formula returned invalid value or no value
- MYSQL SQLSTATE[22003]: Numeric value out of range: 1690 BIGINT UNSIGNED value is out of range in
- Ora06502: PL/SQL numberic or value error.
- 安装Magento报错:SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'perio
- org.springframework.dao.InvalidDataAccessApiUsageException: ERR value is not an integer or out of ra