2016-11-11 60 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

用一堆INSERT命令創建一個腳本,每個值一個INSERT。
然後將此腳本加載到您最喜歡的編輯器中,並一次運行它。

馬在這種情況下最喜歡的方法是使用電子表格來生成SQL命令。
通過電子表格,我可以在幾分鐘內爲數十萬個值生成腳本。

一個簡單的例子(使用谷歌片):

  • 值在列
  • 在B1細胞輸入公式:="INSERT INTO tablename(columnname) VALUES('"&A1&"');"
  • 拷貝formua從B1細胞以乙柱剩餘的細胞
  • 選擇B列並將其內容複製到文本編輯器中,並在最後追加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語句有幾種方法可以將數據作爲單個插入結合,如雙重選擇每個單獨的值和unioning在一起:

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')) 
/

...儘管你可能有問題more than 1000 entries listed like that,你可以解決由PL/SQL填充集合 - 這使得這種方法在這種情況下,缺乏吸引力。

但是,如果您有一個值列表,那麼您可能會發現通過external tableSQL*Loader甚至通過SQL Developer的導入機制加載它們會更容易。

如果您在自己的應用程序中有該列表,您可能可以從數組中填充集合,然後使用上面的table()版本,但具體取決於您使用的語言和驅動程序。

相關問題