更新大表中某個欄位的儲存過程

to_be_Dba發表於2013-05-24
create or replace procedure pp_temp2 is--用於根據某個表的資料來更新一張大表的某個欄位
  cursor cur is --從參考表中獲取需要的欄位,包括待更新的欄位和關聯欄位
    select column1,column2,column3
      from schema_name.bi_1_tkt t;--可以新增dblink
  type typ_column1 is table of tab_1.column1%type;--以下三句根據列格式定義三種型別的集合
  type typ_column2 is table of tab_1.column2%type;
  type typ_column3 is table of tab_1.column3%type;
  lis_column1     typ_column1; --以下三句建立與列型別對應的集合例項
  lis_column2 typ_column2;
  lis_column3   typ_column3 ;
  n_count number; --用於儲存數量
begin
  open cur;--開啟遊標
  loop
    fetch cur bulk collect--每批1000條,將資料分批fetch
      into lis_column2,lis_column1,lis_column3  limit 1000;
    n_count:=lis_column2.count;
    forall i in lis_column2.first .. lis_column2.last--用forall語句更新
      update tab_1
         set column3=lis_column3(i)
       where tab_1.column2=lis_column2(i)
         and tab_1.column1=lis_column1(i)
         and tab_1.bsp_code = 'XX';
    commit;
    exit when n_count=0;
  end loop;
  close cur;--關閉遊標,結束程式
end;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26451536/viewspace-761935/,如需轉載,請註明出處,否則將追究法律責任。

相關文章