存储过程问题,如何定义两个游标,并且后一个游标sql语句需要前一个游标的返回值

解决方案 »

  1.   

    代码如下 
    DECLARE
      type curtyp is ref cursor;
      c1   curtyp;
      c2   curtyp;
     begin
       open c1 for 
       'select ACCNAME,CURRTYPE,OPENDATE,substr(OPENDATE,6,2) from grkh.grkh_accname where accno=accno';
     LOOP
     FETCH c1 INTO V_name,V_curr,V_opendate,V_month;
     EXIT WHEN c1 % NOTFOUND;
     END LOOP;
      CLOSE c1; 
     
     V_TABLE:='INPUTDATA.A_NFBALAN_MAIN_' || V_year || 'M' || V_month;
      
     open c1 for 
     'select balance from ' || V_TABLE || ' where v_workdate=' || V_opendate || 'and accno=' || accno;
     FETCH c1 INTO V_balance;
     EXIT WHEN c1 % NOTFOUND;
     END LOOP;
     CLOSE c1;
     
     end;
      

  2.   

    不好意思 贴错了 
    DECLARE
      type curtyp is ref cursor;
      c1   curtyp;
      c2   curtyp;
     begin
       open c1 for 
       'select ACCNAME,CURRTYPE,OPENDATE,substr(OPENDATE,6,2) from grkh.grkh_accname where accno=accno';
     LOOP
     FETCH c1 INTO V_name,V_curr,V_opendate,V_month; /* 取得游标c2需要的表名 */
     EXIT WHEN c1 % NOTFOUND;
     END LOOP;
      CLOSE c1; 
     
     V_TABLE:='INPUTDATA.A_NFBALAN_MAIN_' || V_year || 'M' || V_month;/* 生成游标c2需要的表名 */
      
     open c2 for 
     'select balance from ' || V_TABLE || ' where v_workdate=' || V_opendate || 'and accno=' || accno;
     FETCH c2 INTO V_balance;
     EXIT WHEN c2 % NOTFOUND;
     END LOOP;
     CLOSE c2;
     
     end;
      

  3.   

    第一个游标静态定义即可,
    第二个游标用动态sql。DECLARE
      type curtyp is ref cursor;
      c2   curtyp;  cursor c1 for 
      select ACCNAME,CURRTYPE,OPENDATE,substr(OPENDATE,6,2) 
      from grkh.grkh_accname 
      where accno=v_accno;
     begin
       open c1 ;
       LOOP
       FETCH c1 INTO V_name,V_curr,V_opendate,V_month; /* 取得游标c2需要的表名 */
       EXIT WHEN c1 % NOTFOUND;   V_TABLE:='INPUTDATA.A_NFBALAN_MAIN_'||V_year||'M'||V_month;/* 生成游标c2需要的表名*/
      
       open c2 for 
       'select balance from '||V_TABLE ||' where v_workdate=:v1 and accno=:v2'  
       using V_opendate,V_accno;   FETCH c2 INTO V_balance;
       EXIT WHEN c2 % NOTFOUND;
       ....   END LOOP;
       CLOSE c2;
     END LOOP;
     CLOSE c1;   
     end;
      

  4.   

    这个是从c1中查出一条记录放在变量中吧,如果c1有多条记录,而c2想借助c1和其他的表来查询,那怎么做呢?
    学习...
      

  5.   

    晕!"FETCH c2 INTO V_balance;"前漏了一个loop
    ...
    loop
    FETCH c2 INTO V_balance;"
    ...
      

  6.   

    那个loop是有的 粘贴的时候漏掉了
      

  7.   

    c1有多条记录,就定义数组,fetch c1 into 数组1,数组2,...
    然后循环数组