刚学Oracle不久,很多基本的东西不知道。
现在做的一个项目要用到嵌套循环,因为之前看到游标的定义都是在方法的头部的,现在有一个功能,必须要在一个fetch中定义一个游标不知道行不行呀,各位大侠请指教指教。就是类似于这样:
declare c_1 cursor for SELECT * FROM 表名1;
open c_1;
LOOP
  FETCH  c_1 INTO title1_value
   EXIT WHEN c_1%NOTFOUND;      --想在此循环里再定义另一个游标
      declare c_2 from select * from 表名2;
      然后循环游标c_2
      ……END LOOP;
CLOSE c_1;

解决方案 »

  1.   

    你在declare里定义游标就可以了,用的时候只需open打开就可以,没必要向你所说的在游标中再定义游标
    你只需要在游标中open另一个游标就可以了
    类似:declare 
    cursor c_1 is SELECT * FROM 表名1;  --游标定义是这样的
    cursor c_2 is select * from 表名2;begin
         open c_1;
         LOOP
             FETCH c_1 INTO title1_value;
             EXIT WHEN c_1%NOTFOUND;         --此处只需打开你游标c_2就可以了
              open c_2;
             LOOP
                 FETCH c_2 INTO ...... ;
                 EXIT WHEN c_2%NOTFOUND;
                 ....
                 ....
             END LOOP;
             close c_2;     END LOOP;
        CLOSE c_1;
    end;
      

  2.   

    declare 
    c_1 cursor for SELECT * FROM 表名1;
    begin
    open c_1;
    LOOP
      FETCH c_1 INTO title1_value
      EXIT WHEN c_1%NOTFOUND;  --这样写就可以省略open curcursor等
      for i in (select * from 表名2) loop  ……
    end loop;END LOOP;
    CLOSE c_1;
    end;
      

  3.   

    能够。。declare 
    cursor c_1 is SELECT * FROM 表名1;  --游标定义是这样的
    begin
         open c_1;
         LOOP
             FETCH c_1 INTO title1_value;
             EXIT WHEN c_1%NOTFOUND;         --此处只需打开你游标c_2就可以了
              for cur in (select * from 表名2 where colName = titleValue.colName)
             loop
                     ----- to do
             end loop;
         END LOOP;
        CLOSE c_1;
    end;
      

  4.   


    ---ordeclare 
    cursor c_1 is SELECT * FROM 表名1;
    cursor c_2 is select * from 表名2;
    begin
    open c_1;
    LOOP
      FETCH c_1 INTO title1_value
      EXIT WHEN c_1%NOTFOUND;  open c_2;
    LOOP
      FETCH c_2 INTO title1_value
      EXIT WHEN c_2%NOTFOUND;
    ......;
    end loop;
    close c_2;
    ....;
    END LOOP;
    CLOSE c_1;
    end;
      

  5.   


    楼主你的游标是定义方式是mssql的
    declare 
    cursor c_1  is SELECT * FROM 表名1;
    begin
    open c_1;
    LOOP
      FETCH c_1 INTO title1_value
      EXIT WHEN c_1%NOTFOUND;  --这样写就可以省略open curcursor等
      for i in (select * from 表名2) loop  ……
    end loop;END LOOP;
    CLOSE c_1;
    end;
      

  6.   

    谢谢各位高手啦!
    wkc168的正解!谢谢