Oracle隐式游标变量显示为零,而不是嵌套游标中的有效值

时间:2018-10-13 19:29:10

标签: oracle cursor

程序使用隐式游标和嵌套游标。而且我正在使用ROWTYPE进行抓取。但有些人却无法获取价值。我认为应该是因为它在嵌套游标中,所以它没有得到值。 (即,如果我没有获得价值,则在下面的第二个光标中,出现了问题)。

游标声明如下

cursor c1(begin_date varchar2, end_date varchar2)
IS
  SELECT empno from table1 where report_DATE between begin_date and end_date;

cursor c2(emp_num number, begin_date varchar2, end_date varchar2)
IS
  SELECT sum(tot_amt) as e_tot_amt 
  from table2 where report_DATE between begin_date and end_date
  and empno = emp_num;

cursor c3(emp_num number, begin_date varchar2, end_date varchar2)
IS
  SELECT sum(adj_amt) as e_adj_amt 
  from table3 where report_DATE between begin_date and end_date
  and empno = emp_num;

gr1      c1%ROWTYPE;
gr2      c2%ROWTYPE;
gr3      c3%ROWTYPE;

下面是代码

 gr1:=NULL;

 for lr in c1(begin_date, end_date)
 loop
       gr2:= lr;
       get_tot_amt;
       get_adj_amt;
       final_amt := g2.e_tot_amt + g3.e_adj_amt;
       write the values
  end loop      

  procedure get_tot_amt
  is 
  begin
        gr2:=NULL;
        for lr in c2(gr1.emp_num, gr1.begin_date, gr1.end_date)
        loop
             gr2:=lr;
        end loop;     
  end get_adj_amt

Problem is the Final_amount value is not calculating correctly. It showing as 0, but when i give the empno its giving the value.  Please advise.
  procedure get_adj_amt
  is 
  begin
        gr3:=NULL;
        for lr in c3(gr1.emp_num, gr1.begin_date, gr1.end_date)
        loop
             gr3:=lr;
        end loop;     
  end get_tot_amt

0 个答案:

没有答案