create or replace procedure aaa_c1  isdeclare cursor c1 is 
    select t1.eqpid,t1.curmainqty,t1.lotid,t2.batch_type,t2.operator_type ,t1.menugroup menu,t1.trackintime
    from rep_batchgroup@dbre T1,rep_eqpid_eff  t2
    where t1.eqpid=t2.eqpid 
    and t2.batch_type='0' and t2.operator_type='3'
    order by t1.eqpid,t1.trackintime ;cursor  c2(p_curmainqty number,p_eqpid varchar2,p_menugroup varchar2) is 
   select processtime*p_curmainqty spt
   from csmc.mult_chamber_data@guip 
   where menustatus='1'  and eqpid=p_eqpid and menugroup=p_menugroup;cursor c3(p_curmainqty number,p_eqpid varchar2,p_menugroup varchar2) is 
    select (processtime*p_curmainqty+operationtime)spt
    from csmc.mult_chamber_data@guip
    where menustatus='1'  and eqpid=p_eqpid and menugroup=p_menugroup;  
   TYPE c1_type IS TABLE OF c1%rowtype
        INDEX BY BINARY_INTEGER;
TYPE c2_type IS TABLE OF c2%rowtype
        INDEX BY BINARY_INTEGER;
TYPE c3_type IS TABLE OF c3%rowtype
        INDEX BY BINARY_INTEGER;
    
c1_rec c1_type;
c2_rec c2_type;
c3_rec c3_type;----create table rep_eqpid_eff_oee1
---(lotid varchar2(20),curmainqty number,eqpid varchar2(8),menugroup varchar2(70),
----trackintime date,batch_type varchar2(1),operator_type varchar2(1),spt number)i number:=1;
tot_num1 number:=1;
v_eqpid varchar2(8);
v_menugroup varchar2(70);begin
  
open c1;
i:=1;
loop 
     fetch c1 into c1_rec(i);
exit when c1%notfound;
i:=i+1;
end loop;
close c1;
tot_num1:=i-1;i:=1;
 
open c3(c1_rec(i).curmainqty,c1_rec(i).eqpid,c1_rec(i).menu);
fetch c3 into c3_rec(i);insert into rep_eqpid_eff_oee1(lotid,curmainqty,eqpid,menugroup,trackintime,batch_type,operator_type,spt)
values(c1_rec(i).lotid,c1_rec(i).curmainqty,c1_rec(i).eqpid,c1_rec(i).menu,c1_rec(i).trackintime,0,3,c3_rec(i).spt);
v_eqpid:=c1_rec(i).eqpid;
v_menugroup:=c1_rec(i).menu;DBMS_OUTPUT.PUT_LINE(v_eqpid);
DBMS_OUTPUT.PUT_LINE(v_menugroup);i:=i+1;
for i in 2..tot_num1
loop
---     if c1_rec(i).eqpid=v_eqpid and c1.rec(i).menugroup=v_menugroup then
--             open c2(c1_rec(i).curmainqty,c1_rec(i).eqpid,c1_rec(i).menugroup);
--             fetch c2 into c2_rec(i);
                     
--             insert into rep_eqpid_eff_oee1(lotid,curmainqty,eqpid,menugroup,trackintime,batch_type,operator_type,spt)
---             values(c1_rec(i).lotid,c1_rec(i).curmainqty,c1_rec(i).eqpid,c1_rec(i).menu,c1_rec(i).trackintime,0,3,c2_rec(i).spt);
    
---     else 
                     
---            open c3(c1_rec(i).curmainqty,c1_rec(i).eqpid,c1_rec(i).menugroup);
---            fetch c3 into c3_rec(i);
            
---            insert into rep_eqpid_eff_oee1(lotid,curmainqty,eqpid,menugroup,trackintime,batch_type,operator_type,spt)
----           values(c1_rec(i).lotid,c1_rec(i).curmainqty,c1_rec(i).eqpid,c1_rec(i).menu,c1_rec(i).trackintime,0,3,c3_rec(i).spt);
    
---     end if ;
     
    v_eqpid:=c1_rec(i).eqpid; 
    v_menugroup:=c1_rec(i).memu;  出错
    DBMS_OUTPUT.PUT_LINE(v_eqpid);
    DBMS_OUTPUT.PUT_LINE(v_menugroup);
end loop;
end ;
出错信息为必须声明menu组件,请问这是什么原因?

解决方案 »

  1.   

    create or replace procedure aaa_c1  is declare 存储过程中不需要:declare 
      

  2.   

    不会吧
    open c3(c1_rec(i).curmainqty,c1_rec(i).eqpid,c1_rec(i).menu); 不报错
    v_menugroup:=c1_rec(i).memu;为什么报错
      

  3.   

    结果就是这样的,修改了参数,把memu变成menugroup,flag都报错,但是如果把v_menugroup换成了v_var就不报错了,是不是在与oracle中的关键字类似或者重复所以报错呢,期待高手解释一下,谢谢
      

  4.   

    哦 ,晕菜
    c1_rec(i).menu = c1_rec(i).memu??
      

  5.   


    v_menugroup:=c1_rec(i).memu;  出错