2016-11-11 3 views
0

ハードコードされたデータをテーブルに追加する必要があります。何千ものエントリがありますが、それを一度にクエリで追加する方法はありますか?テーブルにハードコードデータを追加する

'1777193992'、 '1777535342'、 '1777519577'、 '1777725624'、 '1777311315'、 '1771416476'、 '1779312636'、 '1777125359'

:データは、下記の形式に似ています

私はこれ試してみました:

SELECT '1777193992', '1777535342', '1777519577', '1777725624', '1777311315', '1771416476', '1779312636', '1777125359' FROM dual; 

をしかし、それは私に行のデータを与えています。データを列に挿入します。

+0

ここからは何千という値が得られますか?ファイルがある場合は、外部テーブルまたはSQL \ * Loaderがオプションになります。そうでない場合は、他のメソッドがありますが、値のリストを少し操作する必要があります。 (また、ターゲット列のデータ型は何ですか?すべての例は数値ですが、文字列として扱っていますか?) –

答えて

2

各値に1つのINSERTコマンドを含むスクリプトを作成します。
このスクリプトをお気に入りのエディタに読み込んで、一度に実行してください。

このような場合の好きな方法は、スプレッドシートを使用してSQLコマンドを生成することです。
スプレッドシートを使用して数分間で何十万もの値のスクリプトを生成できます。

(Googleスプレッドシートを使用して)簡単な例:

  • 値はこの式を入力B1セルでカラム
  • である:="INSERT INTO tablename(columnname) VALUES('"&A1&"');"
  • コピーB1細胞からB列の残りのセルにこのformua
  • これをテキストエディタにコピーし、最後にCOMMIT;を追加します。これは私たちのSQLスクリプトです。「一度に」実行する準備ができています。これをSQL Developerにロードし、F5を押してください。

enter image description here

INSERT INTO tablename(columnname) VALUES('1777193992'); 
INSERT INTO tablename(columnname) VALUES('1777535342'); 
INSERT INTO tablename(columnname) VALUES('1777519577'); 
INSERT INTO tablename(columnname) VALUES('1777725624'); 
INSERT INTO tablename(columnname) VALUES('1777311315'); 
INSERT INTO tablename(columnname) VALUES('1771416476'); 
INSERT INTO tablename(columnname) VALUES('1779312636'); 
INSERT INTO tablename(columnname) VALUES('1777125359'); 
COMMIT; 
0

あなたは、個々の挿入文の多くを生成し、実行したくない場合は、このようなデュアルから個々の値を選択するような単一のインサートとしてのデータを結合するいくつかの方法があり、それらを一緒に合併する:

insert into tablename(columnname) 
select '1777193992' from dual 
union all select '1777535342' from dual 
union all select '1777519577' from dual 
union all select '1777725624' from dual 
union all select '1777311315' from dual 
union all select '1771416476' from dual 
union all select '1779312636' from dual 
union all select '1777125359' from dual 
/

またはそのわずか虐待the insert all syntaxマルチテーブルインサートアイデアと:

insert all 
    into tablename(columnname) values ('1777193992') 
    into tablename(columnname) values ('1777535342') 
    into tablename(columnname) values ('1777519577') 
    into tablename(columnname) values ('1777725624') 
    into tablename(columnname) values ('1777311315') 
    into tablename(columnname) values ('1771416476') 
    into tablename(columnname) values ('1779312636') 
    into tablename(columnname) values ('1777125359') 
select * from dual 
/

@krokodilkoが示したものを変更することで、Excelからそれらを生成することができます。

個々の値を入力するコレクションを作成することもできます。ここbuilt-in odcivarchar2list collection typeを使用して:

insert into tablename(columnname) 
select column_value 
from table(sys.odcivarchar2list('1777193992', '1777535342', '1777519577', 
    '1777725624', '1777311315', '1771416476', '1779312636', '1777125359')) 
/

...あなたがPL/SQLからコレクションを取り込むことで回避できmore than 1000 entries listed like thatに問題、持っているかもしれないが - この場合は、このアプローチはあまり魅力的になります。

しかし、値のリストがある場合は、external tableまたはSQL*Loader、またはSQL Developerのインポートメカニズムを使用してロードする方がはるかに簡単です。

あなた自身のアプリケーションにリストがある場合は、配列からコレクションを作成してから上記のtable()バージョンを使用することができますが、使用している言語とドライバによってどのように違いますか。

関連する問題