oracle批量新增更新資料

smileNicky發表於2019-05-12

本部落格介紹一下Oracle批量新增資料和更新資料的sql寫法,業務場景是這樣的,往一張關聯表裡批量新增更新資料,然後,下面介紹一下批量新增和更新的寫法:

批量新增資料
對於批量新增資料,介紹兩種方法

(1)命令視窗執行的
一種需要在命令視窗執行的,Oracle資料庫可以使用sqlplus或者plsql developer客戶端軟體

可以使用sqlplus工具登入,進入資料庫

sqlplus / as sysdba

檢視使用者,可以用命令

show parameter db_name

plsql developer也可以使用,登入之後,選擇檔案(File)->新建(New)->命令視窗(Command Window)
假如要往表格t裡寫1000條資料,可以用如下批處理命令:

begin 
    for i in 1 .. 1000
    loop
        execute immediate
        'insert into t values('|| i ||')';
    end loop;
    commit;
end;

ps:這個commit提交事務,放的位置也是有區別的,具體可以參考我之前的部落格,Oracle體系結構學習筆記裡面有涉及到

(2) SQL視窗執行的
然後介紹sql視窗執行的方法,因為命令視窗執行有時候覺得不太便利,所以可以使用sql視窗的方法,語法大致為:

insert into [表格名稱](欄位名稱1,欄位名稱2,...) [查詢SQL]

給個例子,sys_guid()生成uuid資料,sysdate獲取當前時間,然後批量寫資料,根據查詢sql來

insert into t_stuff_dir_related
  (seq, dir_seq, create_date, create_man, stuff_id, t_item)
  select sys_guid(),
         'uuidss',
         sysdate,
         'admin',
         b.rs_id,
         a.t_item
    from t_itm_define a
  where a.is_valid =1

批量更新資料

對於批量更新的和批量新增方法型別,同樣可以用命令視窗和sql視窗兩種方法

(1)命令視窗執行的

同樣可以用如下批處理命令:

begin 
    for i in 1 .. 1000
    loop
        execute immediate
        '${更新SQL}';
    end loop;
    commit;
end;

(1)SQL視窗執行的

批量更新加了where條件就可以

 update t_itm_rcv_stuff stuff
    set stuff.dir_seq = '${目錄SEQ}', stuff.dir_name = '${目錄名稱}'
  where stuff.t_item in
        (select a.t_item
           from t_itm_define a)

相關文章