2012-08-09 80 views
0

我有一列簡單的數字表。我想加載大約3000個數字。我想在內存中執行該操作,而不使用SQL * Loader。我試過在Oracle中使用大量靜態數據批量插入

INSERT ALL 
    INTO t_table (code) VALUES (n1) 
    INTO t_table (code) VALUES (n2) 
    ... 
    ... 
    INTO t_table (code) VALUES (n3000) 
SELECT * FROM dual 

但是我失敗了1000個值。我該怎麼辦 ? SQL * Loader是唯一的方法嗎?我只能用SQL執行LOAD嗎?

+0

你在說什麼'load'?使用SQL * Loader?這是一種錯誤還是必須定期發生的事情?如果定期將文件結構總是相同> – Ben 2012-08-09 07:46:14

+0

是的,我意識到它是我正在談論的SQL * Loader。所以我不想使用它。我編輯了這個問題 – 2012-08-09 07:48:06

回答

2

推測您的初始值爲n。如果是這樣,這個代碼將填充code與價值觀nn+2999

insert into t_table (code) 
select (&N + level) - 1 
from dual 
connect by level <=3000 

此查詢使用一個SQL * Plus替代變量後的n的初始值。其他客戶需要以不同的方式傳遞價值。


「假設我在C++有STL :: vector的,我應該 寫什麼查詢?」

所以,當你寫n3000你真正的意思是n(3000)。在SQL中使用數組很容易。這個例子使用Oracle的預先定義的集合中的一個,NUMBER類型的表:

declare 
    ids system.number_tbl_type; 
begin 
    insert into t_table (code) 
    select column_value 
    from table (select ids from dual) 
    ; 
end; 

至於你的C++向量映射到Oracle類型,這是一個不同的問題(和一個我不能回答)。

+0

我不明白你的答案。假設我在C++中使用stl :: vector ,應該寫什麼查詢? – 2012-08-09 08:37:45

+1

@BaptistePernet - 你發佈了一個查詢,我給你一個查詢。 – APC 2012-08-09 11:02:00