陣列介面允許你使用陣列變數替代標量變數來進行繫結。當特定的dml語句需要插入或更新大量資料的時候,它就會非常有用。在執行dml語句的時候,不再需要針對每條記錄分別執行一次,而可以將所有必要的值組合進乙個陣列然後僅僅需要執行一次即可,如果紀錄的數量太大,也可以將執行操作拆分成小一點的批次。結果,到資料庫的往返次數將與執行次數的數量成比例地下降。
必須強調的是,沒有應用批量處理時載入的低效能並不是資料庫引擎導致的,而是應用程式本身導致並反過來又受其拖累。
儘管陣列介面對客戶端來講更加有效,資料庫也能從中收益,事實上,陣列介面降低了邏輯讀的數量。
下面將提供一些關於如何在pl/sql、oci、jdbc和odp.net中使用陣列介面的基本資訊。
在pl/sql中,可以使用forall語句來應用陣列介面。在執行乙個dml語句的時候,可以利用它來將資料繫結成陣列傳遞給資料庫引擎。示例**如下:
declare
type t_id is table of t.id%type;
type t_pad is table of t.pad%type;
l_id t_id := t_id();
l_pad t_pad := t_pad();
begin
-- prepare data
l_id.extend(100000);
l_pad.extend(100000);
for i in 1..100000
loop
l_id(i) := i;
l_pad(i) := rpad('*',100,'*');
end loop;
-- insert data
forall i in l_id.first..l_id.last
insert into t values (l_id(i), l_pad(i));
end;
需要特別注意的是,儘管這個語法是基於關鍵字forall的,但這不是乙個迴圈。所有的紀錄都是在一次資料庫呼叫中傳送過去的。
在jdbc中,可以使用批量更新來使用陣列介面(在一次執行操作中插入10萬條記錄)。例如**如下:
sql = "insert into t values (?, ?)";
statement = connection.preparestatement(sql);
for (int i=1 ; i<=100000 ; i++)
statement.executebatch();
statement.close();
3.odp.net
在odp.net中,只要定義好基於陣列的引數,並將屬性arraybindcount設定為儲存在陣列中的值的個數,就可以應用陣列介面了。下面的**片段展示了這一點,它在一次執行操作中插入了10萬條記錄。
decimal idvalues = new decimal[100000];
string padvalues = new string[100000];
for (int i=0 ; i<100000 ; i++)
id = new oracleparameter();
id.oracledbtype = oracledbtype.decimal;
id.value = idvalues;
pad = new oracleparameter();
pad.oracledbtype = oracledbtype.varchar2;
pad.value = padvalues;
sql = "insert into t values (:id, :pad)";
command = new oraclecommand(sql, connection);
command.arraybindcount = 100000;
command.parameters.add(id);
command.parameters.add(pad);
command.executenonquery();
mysql 批量插入 Mysql批量插入分析
前言最近發現幾個專案中都有批次插入資料庫的功能,每個專案中批次插入的寫法有一些差別,所以本文打算對mysql的批次插入做乙個詳細的分析。準備1.jdk1.7,mysql5.6.38 2.準備庫和表 測試與分析 下面準備幾種插入的方式來分析優劣 1.statement插入方式 準備資料,然後通過sta...
Mysql指令碼迴圈批量插入陣列資料
首次寫部落格,不知道說點啥,直接上點乾貨,希望大家指出不足之處,共同進步。儲存過程 巢狀迴圈 mysql陣列概念 變數 擷取字串 字串去掉指定字元 資料表中涉及到某一列必填唯一值,唯一值的處理 清除ordersn中唯一值時間的小數點 update ecjia order info set order...
mybatis批量插入,批量更新
insert into t ingco trade lithium electric product product no,li e product no,transpor report number,msds,transpor report number path,msds path,un tes...