求oracle存储过程报错“读取违反顺序”解决办法

xuranyao0416 2010-03-04 05:13:57

create or replace procedure P_Search_CRM_Barcode_State
as

var_barcode varchar2(50);--条码使用
cur_refcursor sys_refcursor;--结果集使用

var_DEV_SUBTYPE VARCHAR2(20);
var_RESOURCE_INSTANCE_CODE VARCHAR2(50);
var_SALES_RESOURCE_NAME VARCHAR2(250);
var_STORAGE_NAME VARCHAR2(100);
var_CURR_STATE VARCHAR2(60);
var_DC_DEVICE_SCODE VARCHAR2(20);
var_NC_SALES_RESOURCE_ID VARCHAR2(50);
var_SALES_RESOURCE_ID NUMBER(9);
var_STORAGE_CODE VARCHAR2(21);
var_ATTR_ID number(9);
var_DN_NO VARCHAR2(20);
var_LAN_NAME VARCHAR2(40);
var_curr_state_temp varchar2(60);

--建立游标
--1
cursor cur_barcode is
select * from xry_temp_barcode2;

--2
cursor cur_crm_barcode is
select * from xry_crm_barcode where dr=0
and state='000';

var_cur_temp1 xry_crm_barcode%rowtype;

begin

--将要处理的条码存入临时表里
/*insert into xry_temp_barcode2
select distinct(vbarcode) from infl_nc_out_b
where dbizdate=to_char(to_date(sysdate-1),'yyyy-mm-dd');*/
--从临时表里取出条码,再调用copy库的zczx_bss_ljj.get_device_inf
open cur_barcode;
loop
fetch cur_barcode into var_barcode;
exit when cur_barcode %NOTFOUND;
zczx_bss_ljj.get_device_inf@CSSS_COPY(var_barcode,cur_refcursor);
--
fetch cur_refcursor into var_DEV_SUBTYPE,var_RESOURCE_INSTANCE_CODE,
var_SALES_RESOURCE_NAME,var_STORAGE_NAME,
var_CURR_STATE,var_DC_DEVICE_SCODE,
var_NC_SALES_RESOURCE_ID,var_SALES_RESOURCE_ID,
var_STORAGE_CODE,var_ATTR_ID,var_DN_NO,
var_LAN_NAME;
exit when cur_refcursor %NOTFOUND;
--将查询的结果插入xry_crm_barcode
insert into xry_crm_barcode
values(var_DEV_SUBTYPE,var_RESOURCE_INSTANCE_CODE,
var_SALES_RESOURCE_NAME,var_STORAGE_NAME,
var_CURR_STATE,var_DC_DEVICE_SCODE,
var_NC_SALES_RESOURCE_ID,var_SALES_RESOURCE_ID,
var_STORAGE_CODE,var_ATTR_ID,var_DN_NO,
var_LAN_NAME,var_curr_state_temp,sysdate,'0','');

end loop;
close cur_barcode;
end P_Search_CRM_Barcode_State;

运行到fetch cur_refcursor into这里就报错“ORA-01002:读取违反顺序”不知道什么问题。
...全文
412 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼W 2010-03-08
  • 打赏
  • 举报
回复
抱歉,最近忙,没怎么看也没认真看帖
你检查下,这恐怕是dblink导致的问题
检查一下zczx_bss_ljj.get_device_inf@CSSS_COPY是否有效
在loop里每一次循环,commit一次,提交dblink打开的事务,再试试
xuranyao0416 2010-03-08
  • 打赏
  • 举报
回复
虽然没人帮我解答,但还是感谢回答了各位。结贴!
vber1010 2010-03-05
  • 打赏
  • 举报
回复
exit when cur_refcursor %NOTFOUND;
放到前面试试。。。
vber1010 2010-03-05
  • 打赏
  • 举报
回复
问题没遇到过
帮楼主找了些资料发现ORA-01002:错误是未取得记录集。
楼主可以单步测试一下,是不是因为游标没有记录提示的错误
xuranyao0416 2010-03-04
  • 打赏
  • 举报
回复
高手快来啊!自己顶起来!
xuranyao0416 2010-03-04
  • 打赏
  • 举报
回复
怎么就没人解答呢?在线急等哦!
xuranyao0416 2010-03-04
  • 打赏
  • 举报
回复
引用 3 楼 sjm5210 的回复:
insert into xry_crm_barcode语句导致数据库中数据的条数与缓冲区中的不一致,致使游标访问越界。

那该怎么处理呢?
sjm5210 2010-03-04
  • 打赏
  • 举报
回复
insert into xry_crm_barcode语句导致数据库中数据的条数与缓冲区中的不一致,致使游标访问越界。
xuranyao0416 2010-03-04
  • 打赏
  • 举报
回复
cur_refcursor是个结果集游标,也需要open吗?在fetch cur_refcursor前加open cur_refcursor,提示Error: PLS-00382: 表达式类型错误
小灰狼W 2010-03-04
  • 打赏
  • 举报
回复
cur_refcursor 没有open?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧