熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle中巧用bulkcollect實現cursor批量fetch

2013-11-13 16:22:57  來源: Oracle 

  在一般的情況下使用批量fetch的幾率並不是很多但是Oracle提供了這個功能我們最好能熟悉一下說不定什麼時候會用上它

  
  declare
  cursor c is select * from t_depart;
  v_depart t_depart%rowtype ;
  type v_code_type is table of t_departdepart_code%type ;
  v_code v_code_type ;
  type v_name_type is table of t_departdepart_name%type ;
  v_name v_name_type ;
  begin
  open c;
  fetch c bulk collect into v_code  v_name ;
  for i in unt loop
  dbms_outputput_line(v_code(i)||||v_name(i));
  end loop;
  close c;
  end;

  通過上面的這個例子大家可以發現如果列很多的話為每一列定義一個集合似乎有些繁瑣可以把集合和%rowtype結合起來一起使用來簡化程序!

  
  declare
  cursor c is select * from t_depart;
  type v_depart_type is table of t_depart%rowtype ;
  v_depart v_depart_type ;
  begin
  open c;
  fetch c bulk collect into v_depart ;
  for i in unt loop
  dbms_outputput_line(v_depart(i)depart_code||||
  v_depart(i)depart_name);
  end loop;
  close c;
  end;

  在輸出結果時既可以使用集合的count屬性和可以使用first和last在引用%rowtype類型的內容時還有一個需要注意的地方是v_depart(i)depart_code而不是v_departdepart_code(i)當然沒有這樣的寫法即使有意義也並不一樣

  
  declare
  cursor c is select * from t_depart;
  type v_depart_type is table of t_depart%rowtype ;
  v_depart v_depart_type ;
  begin
  open c;
  fetch c bulk collect into v_depart ;
  for i in v_departfirstv_departlast loop
  dbms_outputput_line(v_depart(i)depart_code||||
  v_depart(i)depart_name);
  end loop;
  close c;
  end;


From:http://tw.wingwit.com/Article/program/Oracle/201311/18238.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.