刚才提问了一遍,居然给我划分到‘百度知道 > 教育/科学 > 外语学习 > 英语考试’这里面去了。 code: declare TYPE plist IS TABLE OF test_table%ROWTYPE INDEX BY BINARY_INTEGER; reslist_ plist; CURSOR getAll IS SELECT * FROM test_table; begin OPEN getAll; FETCH getAll BULK COLLECT INTO reslist_; IF getAll%FOUND THEN -- ..... --test_table表中有数据,为什么这里的不执行 END IF; CLOSE getAll; END;
IF getAll%FOUND 这个的返回结果是flase,当然不会执行。bulk collect只执行一次,把所有的游标记录查询出来插入到表中。 Collect批查询在某种程度上可以提高查询效率,它首先将所需数据读入内存,然后再统计分析,这样就可以提高查询效率。但是,如果Oracle数据库的内存较小,Shared Pool Size不足以保存Bulk Collect批查询结果,那么该方法需要将Bulk Collect的集合结果保存在磁盘上,在这种情况下,Bulk Collect方法的效率反而不如其他两种方法,有兴趣的读者可以进一步测试。