我有两个表A和B,这两个表有一个共同字段C,分别为这两个表建立游标。
伪代码:cursor cur_A is select * from A;cursor cur_B is select * from B;fetch cur_A.C into var_D;
loop
for var_D in cur_B.C
loop
end loop;
end loop;结果一运行提示“子程序活游标cur_A引用超出范围”“子程序活游标cur_B引用超出范围”
伪代码:cursor cur_A is select * from A;cursor cur_B is select * from B;fetch cur_A.C into var_D;
loop
for var_D in cur_B.C
loop
end loop;
end loop;结果一运行提示“子程序活游标cur_A引用超出范围”“子程序活游标cur_B引用超出范围”
解决方案 »
- vc ado oracle9i 存储过程大数据blob参数传空值
- 如何UPDATE 多条满足条件的纪录(急!)
- 数据库备份语句问题
- exp备份提示用户名和密码错误
- Oracle9i中,如何将一个CLOB变量(就是一个XML),如何转换成一个Varchar对象?
- 求oracle10g的错误代码大全-帮助文档
- Oracle安装中遇到的问题,急呀,大虾帮回答下,万分感激!!!
- 100分求购oracle简单问题,在线等,解决立刻结帖,失言小狗!
- oracle9i安装的问题???????
- ★★急,如何将oracle816的导出文件导入oracle734★★
- 请问oracle 里 foreign key的问题
- oracle9i sqlplus worksheet无法登录,没有找到 orancrypt9.dll
cursor emp_cur is select .....;
begin
open emp_cur;
fetch into ;
for in loop
end loop;
close emp_cur;
end;
--这样修改下..我最不喜欢fetch那样的模式...呵呵
for cur_A in (select * from A)
loop
for cur_B in (select * from B)
loop
end loop;
end loop;
for cur_A in (select * from A)
loop
for cur_B in (select * from B)
loop
end loop;
end loop;
fetch游标之前要open游标。
--2
cursor cur_crm_barcode is
select * from xry_crm_barcode;
--3
cursor cur_onhandnum_barcode is
select * from rs_onhandnum_barcode; --open cur_crm_barcode;
--open cur_onhandnum_barcode;
fetch cur_crm_barcode.resource_instance_code into var_crm_vbarcode;
--exit when cur_crm_barcode %NOTFOUND;
loop
--exit when cur_crm_barcode %NOTFOUND;
for var_crm_vbarcode in cur_onhandnum_barcode.vbarcode
loop
--exit when cur_onhandnum_barcode %NOTFOUND;
select count(*) into var_count from rs_onhandnum_barcode where vbarcode=var_crm_vbarcode
and storage_id=cur_crm_barcode.storage_code
and pk_invbasdoc=cur_crm_barcode.dev_subtype;
--具体的还没写完
end loop;
end loop;
--close cur_crm_barcode;
--close cur_onhandnum_barcode;
Cursor Cur_Crm_Barcode Is
Select * From Xry_Crm_Barcode;
Cursor Cur_Onhandnum_Barcode Is
Select * From Rs_Onhandnum_Barcode;
Begin
Open Cur_Crm_Barcode;
Loop
Fetch Cur_Crm_Barcode.Resource_Instance_Code
Into Var_Crm_Vbarcode;
Exit When Cur_Crm_Barcode%Notfound;
For Var_Crm_Vbarcode In Cur_Onhandnum_Barcode.Vbarcode Loop
Select Count(*)
Into Var_Count
From Rs_Onhandnum_Barcode
Where Vbarcode = Var_Crm_Vbarcode
And Storage_Id = Cur_Crm_Barcode.Storage_Code
And Pk_Invbasdoc = Cur_Crm_Barcode.Dev_Subtype;
End Loop;
End Loop;
Close Cur_Crm_Barcode;
End;应该是这样的把?
我不知道你到底要个什么样的功能。
declare
cursor cur_crm_barcode is select * from xry_crm_barcode;
cursor cur_onhandnum_barcode is select * from rs_onhandnum_barcode;
var_count number;
begin for a in cur_crm_barcode loop
for b in cur_onhandnum_barcode loop
select count(*) into var_count
from rs_onhandnum_barcode
where vbarcode=a.var_crm_vbarcode
and storage_id=a.storage_code
and pk_invbasdoc=a.dev_subtype;
end loop;
end loop;
end;
fetch后面应该跟游标名,不能是游标。字段的形式,而且select多少字段into后面就应该跟多少个变量
我fetch后面跟的都是游标名啊。
select * from xry_crm_barcode;
--3
cursor cur_onhandnum_barcode is
select * from rs_onhandnum_barcode;
v_code xry_crm_barcode.storage_code%type;
v_type xry_crm_barcode.dev_subtype%type;
begin
open cur_crm_barcode;
loop
exit when cur_crm_barcode %NOTFOUND;
fetch cur_crm_barcode into v_code,v_type;
--for var_crm_vbarcode in cur_onhandnum_barcode.vbarcode
for var_crm_vbarcode in cur_onhandnum_barcode
loop
exit when cur_onhandnum_barcode %NOTFOUND;
-- select count(*) into var_count from rs_onhandnum_barcode where vbarcode=var_crm_vbarcode
select count(*) into var_count from rs_onhandnum_barcode where vbarcode=var_crm_vbarcode.vbarcode
--and storage_id=cur_crm_barcode.storage_code
--and pk_invbasdoc=cur_crm_barcode.dev_subtype;
and storage_id=v_code
and pk_invbasdoc=v_type;
--具体的还没写完
end loop;
end loop;
close cur_crm_barcode;
end pp;
fetch cur_crm_barcode.resource_instance_code into var_crm_vbarcode;
你的格式是fetch后面跟游标名(cur_crm_barcode)。字段名(resource_instance_code ),这个用法是错误的
正确格式是fetch 游标名 into 变量名
其中变量名的个数要跟游标中select后面字段个数相同,或者是一个结果集变量
你用11楼的代码就可以实现你要的功能