0

1列の数字を持つ単純なテーブルがあります。その中に約3000個の数字をロードしたいです。SQL*Loader を使用せずに、メモリ内で実行したいと考えています。私は試した

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 が唯一の方法ですか? LOADSQLのみでできますか?

4

1 に答える 1

2

おそらく初期値はnです。その場合、このコードには次codeの値が入力されnますn+2999

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

このクエリは、SQL*Plus 置換変数を使用して の初期値をポストしますn。他のクライアントは、別の方法で値を渡す必要があります。


「stl::vector を使用して C++ を使用していると仮定すると、どのようなクエリを作成すればよいでしょうか?」

だからあなたが書いたとき、あなたn3000が本当に意味したのはn(3000). SQL で配列を使用するのは簡単です。この例では、Oracle の定義済みコレクションの 1 つである 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 型にマッピングすることに関しては、それは別の質問です (私には答えられません)。

于 2012-08-09T08:18:51.313 に答える