[英]Oracle insert lots of data to temporary table
我需要在臨時表中插入12000個字符串,每個字符串6個字符。 目前,我正在使用SELECT Code FROM Articles where Code = '111111' OR Code = '222222' ...
來執行此操作,該命令具有40萬個字符,執行時間為20秒。 我想知道如何加快這個過程?
我不需要驗證我的代碼。 它們需要作為查詢的一部分或作為命令參數從應用程序傳輸到數據庫。
我真的不需要Select Code From Articles
,但是oracle不支持INSERT INTO (...) VALUES (...)
多個記錄INSERT INTO (...) VALUES (...)
IN
通常比OR
快,因為一旦滿足條件, IN
就會停止評估。 在這里查看上一個q
所以:
Select code
from Articles
where Code in ('111111','222222')
為了允許非常大的列表,元組:
Select code
from Articles
where ('1', Code) in (('1','111111'),
('1','222222')...)
正如@AlexPoole指出的那樣,最好使用表值參數。
type t_varchar_tab is table of varchar2(10) index by pls_integer;
procedure insert_table(i_id_tab in t_varchar_tab);
身體:
procedure insert_table(i_id_tab in t_varchar_tab) is
begin
-- if You have temporary table You do not want commits here
forall i in i_id_tab.first .. i_id_tab.last
insert into MY_SCHEMA.MY_TABLE
VALUES (i_id_tab(i));
end ins_test;
C#:
using (OracleCommand dbCommand = connection.CreateCommand())
{
dbCommand.CommandText = "MY_SCHEMA.MY_PACKAGE.insert_table";
dbCommand.CommandType = CommandType.StoredProcedure;
var inputArray = new OracleParameter
{
Direction = ParameterDirection.Input,
CollectionType = OracleCollectionType.PLSQLAssociativeArray,
Value = StringList.ToArray()
};
dbCommand.Parameters.Add(inputArray);
await dbCommand.ExecuteNonQueryAsync();
謝謝亞歷克斯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.