刚学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;
现在做的一个项目要用到嵌套循环,因为之前看到游标的定义都是在方法的头部的,现在有一个功能,必须要在一个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;
你只需要在游标中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;
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;
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;
---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;
楼主你的游标是定义方式是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;
wkc168的正解!谢谢