我正在实践中学习包,这是我注意到的两个非常相似的包之间的区别。
这两行在功能上有什么不同?
FETCH key INTO id, source, file;
FETCH BULK key COLLECT INTO id, source, file;
编辑:此外,当我尝试使用第二行编译包时,我得到以下错误:
- 错误(259,49):PLS-00497:不能在INTO列表中混合单行和多行(BULK)
FETCH将游标结果集中的下一行检索为一个或多个标量变量。FETCH BULK将所有行(不超过可选的LIMIT)检索到一个或多个集合中。参见Fetch文档。编译错误(PLS-00497:…)是您试图将所有行提取到标量变量列表中。除了语法错误,应该是FETCH column_list BULK COLLECT INTO collection_name(s)
批量收集:
declare
type key_list is table of some_table.key%type;
key_array key_list;
cursor c_keys is
(select keys from some_table); begin
begin
open c_keys;
fetch c_keys
bulk collect
into key_array;
close c_keys;
-- process each of the keys in the key_list array
for index_var in 1 .. key_array.count
loop
--process key_array(index_var) ; Lets just "print it"
dbms_output.put_line( 'Key(' || index_var || ' is ' ||key_array(index_var));
end loop;
end ;