在ORACLE 9i 的存储过程中用FOR……LOOP语句进行100万条的数据循环处理,有没有问题? 内存吃不吃得消?
要不要改写成显式开关闭游标的循环语句? 谢谢!FOR …… LOOP语句代码参考:
CURSOR cur_tbl_sa01
IS
SELECT
cust_no,
……
FROM tbl_sa01; rec_tbl_sa01_data cur_tbl_sa01%ROWTYPE; …… FOR rec_tbl_sa01_data IN cur_tbl_sa01 LOOP
……
END LOOP;其中表tbl_sa01有100万条数据。
假设内存是1~2G另: FOR …… LOOP隐式打开关闭游标语句和以下显式开关闭游标语句有差别吗?特别是在处理大数据量的表时。
OPEN cur_tbl_sa01;
WHILE NOT cur_tbl_sa01%NOT_FOUND
FETCH cur_tbl_sa01 INTO rec_tbl_sa01_data;
……
END
CLOSE cur_tbl_sa01;本例中FOR …… LOOP语句需不需要改写成 OPEN游标 循环FETCH数据 CLOSE游标 的语句?
要不要改写成显式开关闭游标的循环语句? 谢谢!FOR …… LOOP语句代码参考:
CURSOR cur_tbl_sa01
IS
SELECT
cust_no,
……
FROM tbl_sa01; rec_tbl_sa01_data cur_tbl_sa01%ROWTYPE; …… FOR rec_tbl_sa01_data IN cur_tbl_sa01 LOOP
……
END LOOP;其中表tbl_sa01有100万条数据。
假设内存是1~2G另: FOR …… LOOP隐式打开关闭游标语句和以下显式开关闭游标语句有差别吗?特别是在处理大数据量的表时。
OPEN cur_tbl_sa01;
WHILE NOT cur_tbl_sa01%NOT_FOUND
FETCH cur_tbl_sa01 INTO rec_tbl_sa01_data;
……
END
CLOSE cur_tbl_sa01;本例中FOR …… LOOP语句需不需要改写成 OPEN游标 循环FETCH数据 CLOSE游标 的语句?
而且前一种方式语句显得稍简单一些。
以下是测试环境和测试数据,请参考:CPU: (两块296MHz的CPU)
Mar 17 17:15:18 JCIRIUS-SERVER rootnex: [ID 466748 kern.info] root nexus = Sun Enterprise 450 (2 X UltraSPARC-II 296MHz)MEMORY:(1G内存)
1024MTEST TABLE:(用来测试的表有255个字段)
TEST_TBL (255 Fields)RECORD NUMBERS:(测试表TEST_TBL中有100多万条数据记录)
1000100FOR ... LOOP SPEND TIMES:(FOR ... LOOP隐式打开和关闭游标方式下读完全部数据,只是累加计数,没有做别的操作,共耗时21分3秒)
21'03''OPEN CUR, LOOP FETCH ... END LOOP CLOSE CUR SPEND TIMES:
用户自己显式打开和关闭游标的语句: OPEN游标 循环FETCH出数据处理(只是累加计数), CLOSE游标,该方式下读完全部数据,耗时28分21秒)
28'21''